Diffstat (limited to 'noncore/apps/opie-sheet/sheet.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/apps/opie-sheet/sheet.cpp | 32 |
1 files changed, 20 insertions, 12 deletions
diff --git a/noncore/apps/opie-sheet/sheet.cpp b/noncore/apps/opie-sheet/sheet.cpp index be4046b..c2563c2 100644 --- a/noncore/apps/opie-sheet/sheet.cpp +++ b/noncore/apps/opie-sheet/sheet.cpp @@ -87,9 +87,9 @@ void Sheet::slotCellChanged(int row, int col) typeCellData *cellData=findCellData(row, col); if (!cellData) cellData=createCellData(row, col); if (cellData) cellData->data=text(row, col); for (cellData=sheetData.first(); cellData; cellData=sheetData.next()) - setText(cellData->row, cellData->col, dataParser(cellData->data)); + setText(cellData->row, cellData->col, dataParser(findCellName(cellData->row, cellData->col), cellData->data)); emit sheetModified(); } void Sheet::swapCells(int row1, int col1, int row2, int col2) @@ -101,10 +101,10 @@ void Sheet::swapCells(int row1, int col1, int row2, int col2) { QString tempData(cellData1->data); cellData1->data=cellData2->data; cellData2->data=tempData; - setText(cellData1->row, cellData1->col, dataParser(cellData1->data)); - setText(cellData2->row, cellData2->col, dataParser(cellData2->data)); + setText(cellData1->row, cellData1->col, dataParser(findCellName(cellData1->row, cellData1->col), cellData1->data)); + setText(cellData2->row, cellData2->col, dataParser(findCellName(cellData2->row, cellData2->col), cellData2->data)); emit sheetModified(); } } @@ -165,9 +165,9 @@ double Sheet::calculateVariable(const QString &variable) double tempResult=variable.toDouble(&ok); if (ok) return tempResult; int row, col; - return (findRowColumn(variable, &row, &col, TRUE) ? text(row, col).toDouble() : 0); + return (findRowColumn(variable, &row, &col, TRUE) ? dataParser(variable, text(row, col)).toDouble() : 0); } double Sheet::functionSum(const QString ¶m1, const QString ¶m2) { @@ -419,13 +419,15 @@ QString Sheet::dataParserHelper(const QString &data) tempElement.prepend(popStringStack(&stackElements)+","); return tempElement; } -QString Sheet::dataParser(const QString &data) +QString Sheet::dataParser(const QString &cell, const QString &data) { QString strippedData(data); strippedData.replace(QRegExp("\\s"), ""); if (strippedData.isEmpty() || strippedData[0]!='=') return data; + if (listDataParser.find(cell)!=listDataParser.end()) return "0"; + listDataParser.append(cell); strippedData=dataParserHelper(strippedData.remove(0, 1).upper().replace(QRegExp(":"), ",")); int i=0; QString tempParameter(getParameter(strippedData, i)), result=""; @@ -434,8 +436,9 @@ QString Sheet::dataParser(const QString &data) result+=","+QString::number(calculateVariable(tempParameter)); tempParameter=getParameter(strippedData, ++i); } while (!tempParameter.isNull()); + listDataParser.remove(cell); return result.mid(1); } void Sheet::setData(const QString &data) @@ -538,16 +541,21 @@ void Sheet::viewportMouseReleaseEvent(QMouseEvent *e) oldSelection.expandTo(rowAt(ce.pos().y()), columnAt(ce.pos().x())); removeSelection(selectionNo); selectionNo=-1; if (oldSelection.topRow()==oldSelection.bottomRow() && oldSelection.leftCol()==oldSelection.rightCol()) - emit cellClicked(getHeaderString(oldSelection.leftCol()+1)+QString::number(oldSelection.topRow()+1)); + emit cellClicked(findCellName(oldSelection.topRow(), oldSelection.leftCol())); else - emit cellClicked(getHeaderString(oldSelection.leftCol()+1)+QString::number(oldSelection.topRow()+1)+','+getHeaderString(oldSelection.rightCol()+1)+QString::number(oldSelection.bottomRow()+1)); + emit cellClicked(findCellName(oldSelection.topRow(), oldSelection.leftCol())+','+findCellName(oldSelection.bottomRow(), oldSelection.rightCol())); } else QTable::contentsMouseReleaseEvent(&ce); } +QString Sheet::findCellName(int row, int col) +{ + return (getHeaderString(col+1)+QString::number(row+1)); +} + void Sheet::copySheetData(QList<typeCellData> *destSheetData) { typeCellData *tempCellData, *newCellData; destSheetData->clear(); @@ -575,9 +583,9 @@ void Sheet::setSheetData(QList<typeCellData> *srcSheetData) { newCellData=new typeCellData; *newCellData=*tempCellData; sheetData.append(newCellData); - setText(newCellData->row, newCellData->col, dataParser(newCellData->data)); + setText(newCellData->row, newCellData->col, dataParser(findCellName(newCellData->row, newCellData->col), newCellData->data)); } emit sheetModified(); } @@ -755,9 +763,9 @@ void Sheet::editPaste(bool onlyContents) *cellData=*tempCellData; cellData->row+=row1; cellData->col+=col1; } - setText(cellData->row, cellData->col, dataParser(cellData->data)); + setText(cellData->row, cellData->col, dataParser(findCellName(cellData->row, cellData->col), cellData->data)); emit sheetModified(); } } } @@ -778,9 +786,9 @@ void Sheet::insertRows(int no, bool allColumns) for (tempCellData=sheetData.first(); tempCellData; tempCellData=sheetData.next()) if (tempCellData->row>=row && (allColumns || tempCellData->col==col)) { updateCell(tempCellData->row-no, tempCellData->col); - setText(tempCellData->row, tempCellData->col, dataParser(tempCellData->data)); + setText(tempCellData->row, tempCellData->col, dataParser(findCellName(tempCellData->row, tempCellData->col), tempCellData->data)); } emit sheetModified(); } @@ -804,9 +812,9 @@ void Sheet::insertColumns(int no, bool allRows) for (tempCellData=sheetData.first(); tempCellData; tempCellData=sheetData.next()) if (tempCellData->col>=col && (allRows || tempCellData->row==row)) { updateCell(tempCellData->row, tempCellData->col-no); - setText(tempCellData->row, tempCellData->col, dataParser(tempCellData->data)); + setText(tempCellData->row, tempCellData->col, dataParser(findCellName(tempCellData->row, tempCellData->col), tempCellData->data)); } emit sheetModified(); } @@ -831,9 +839,9 @@ void Sheet::dataFindReplace(const QString &findStr, const QString &replaceStr, b setCurrentCell(tempCellData->row, tempCellData->col); if (replace) { tempCellData->data=cellItem->text().replace(QRegExp(findStr, matchCase), replaceStr); - setText(tempCellData->row, tempCellData->col, dataParser(tempCellData->data)); + setText(tempCellData->row, tempCellData->col, dataParser(findCellName(tempCellData->row, tempCellData->col), tempCellData->data)); } if (!replace || !replaceAll) break; } } |