summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-sheet/sheet.cpp
Unidiff
Diffstat (limited to 'noncore/apps/opie-sheet/sheet.cpp') (more/less context) (show whitespace changes)
-rw-r--r--noncore/apps/opie-sheet/sheet.cpp32
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
@@ -85,13 +85,13 @@ typeCellData *Sheet::createCellData(int row, int col)
85void Sheet::slotCellChanged(int row, int col) 85void Sheet::slotCellChanged(int row, int col)
86{ 86{
87 typeCellData *cellData=findCellData(row, col); 87 typeCellData *cellData=findCellData(row, col);
88 if (!cellData) cellData=createCellData(row, col); 88 if (!cellData) cellData=createCellData(row, col);
89 if (cellData) cellData->data=text(row, col); 89 if (cellData) cellData->data=text(row, col);
90 for (cellData=sheetData.first(); cellData; cellData=sheetData.next()) 90 for (cellData=sheetData.first(); cellData; cellData=sheetData.next())
91 setText(cellData->row, cellData->col, dataParser(cellData->data)); 91 setText(cellData->row, cellData->col, dataParser(findCellName(cellData->row, cellData->col), cellData->data));
92 emit sheetModified(); 92 emit sheetModified();
93} 93}
94 94
95void Sheet::swapCells(int row1, int col1, int row2, int col2) 95void Sheet::swapCells(int row1, int col1, int row2, int col2)
96{ 96{
97 typeCellData *cellData1=findCellData(row1, col1), *cellData2=findCellData(row2, col2); 97 typeCellData *cellData1=findCellData(row1, col1), *cellData2=findCellData(row2, col2);
@@ -99,14 +99,14 @@ void Sheet::swapCells(int row1, int col1, int row2, int col2)
99 if (!cellData2) cellData2=createCellData(row2, col2); 99 if (!cellData2) cellData2=createCellData(row2, col2);
100 if (cellData1 && cellData2) 100 if (cellData1 && cellData2)
101 { 101 {
102 QString tempData(cellData1->data); 102 QString tempData(cellData1->data);
103 cellData1->data=cellData2->data; 103 cellData1->data=cellData2->data;
104 cellData2->data=tempData; 104 cellData2->data=tempData;
105 setText(cellData1->row, cellData1->col, dataParser(cellData1->data)); 105 setText(cellData1->row, cellData1->col, dataParser(findCellName(cellData1->row, cellData1->col), cellData1->data));
106 setText(cellData2->row, cellData2->col, dataParser(cellData2->data)); 106 setText(cellData2->row, cellData2->col, dataParser(findCellName(cellData2->row, cellData2->col), cellData2->data));
107 emit sheetModified(); 107 emit sheetModified();
108 } 108 }
109} 109}
110 110
111QString Sheet::getParameter(const QString &parameters, int paramNo, bool giveError, const QString funcName) 111QString Sheet::getParameter(const QString &parameters, int paramNo, bool giveError, const QString funcName)
112{ 112{
@@ -163,13 +163,13 @@ double Sheet::calculateVariable(const QString &variable)
163{ 163{
164 bool ok; 164 bool ok;
165 double tempResult=variable.toDouble(&ok); 165 double tempResult=variable.toDouble(&ok);
166 if (ok) return tempResult; 166 if (ok) return tempResult;
167 167
168 int row, col; 168 int row, col;
169 return (findRowColumn(variable, &row, &col, TRUE) ? text(row, col).toDouble() : 0); 169 return (findRowColumn(variable, &row, &col, TRUE) ? dataParser(variable, text(row, col)).toDouble() : 0);
170} 170}
171 171
172double Sheet::functionSum(const QString &param1, const QString &param2) 172double Sheet::functionSum(const QString &param1, const QString &param2)
173{ 173{
174 int row1, col1, row2, col2, row, col; 174 int row1, col1, row2, col2, row, col;
175 if (!findRange(param1, param2, &row1, &col1, &row2, &col2)) return 0; 175 if (!findRange(param1, param2, &row1, &col1, &row2, &col2)) return 0;
@@ -417,27 +417,30 @@ QString Sheet::dataParserHelper(const QString &data)
417 tempElement=popStringStack(&stackElements); 417 tempElement=popStringStack(&stackElements);
418 while (!stackElements.isEmpty()) 418 while (!stackElements.isEmpty())
419 tempElement.prepend(popStringStack(&stackElements)+","); 419 tempElement.prepend(popStringStack(&stackElements)+",");
420 return tempElement; 420 return tempElement;
421} 421}
422 422
423QString Sheet::dataParser(const QString &data) 423QString Sheet::dataParser(const QString &cell, const QString &data)
424{ 424{
425 QString strippedData(data); 425 QString strippedData(data);
426 strippedData.replace(QRegExp("\\s"), ""); 426 strippedData.replace(QRegExp("\\s"), "");
427 if (strippedData.isEmpty() || strippedData[0]!='=') return data; 427 if (strippedData.isEmpty() || strippedData[0]!='=') return data;
428 if (listDataParser.find(cell)!=listDataParser.end()) return "0";
429 listDataParser.append(cell);
428 strippedData=dataParserHelper(strippedData.remove(0, 1).upper().replace(QRegExp(":"), ",")); 430 strippedData=dataParserHelper(strippedData.remove(0, 1).upper().replace(QRegExp(":"), ","));
429 431
430 int i=0; 432 int i=0;
431 QString tempParameter(getParameter(strippedData, i)), result=""; 433 QString tempParameter(getParameter(strippedData, i)), result="";
432 do 434 do
433 { 435 {
434 result+=","+QString::number(calculateVariable(tempParameter)); 436 result+=","+QString::number(calculateVariable(tempParameter));
435 tempParameter=getParameter(strippedData, ++i); 437 tempParameter=getParameter(strippedData, ++i);
436 } 438 }
437 while (!tempParameter.isNull()); 439 while (!tempParameter.isNull());
440 listDataParser.remove(cell);
438 return result.mid(1); 441 return result.mid(1);
439} 442}
440 443
441void Sheet::setData(const QString &data) 444void Sheet::setData(const QString &data)
442{ 445{
443 setText(currentRow(), currentColumn(), data); 446 setText(currentRow(), currentColumn(), data);
@@ -536,20 +539,25 @@ void Sheet::viewportMouseReleaseEvent(QMouseEvent *e)
536 { 539 {
537 QTableSelection oldSelection(selection(selectionNo)); 540 QTableSelection oldSelection(selection(selectionNo));
538 oldSelection.expandTo(rowAt(ce.pos().y()), columnAt(ce.pos().x())); 541 oldSelection.expandTo(rowAt(ce.pos().y()), columnAt(ce.pos().x()));
539 removeSelection(selectionNo); 542 removeSelection(selectionNo);
540 selectionNo=-1; 543 selectionNo=-1;
541 if (oldSelection.topRow()==oldSelection.bottomRow() && oldSelection.leftCol()==oldSelection.rightCol()) 544 if (oldSelection.topRow()==oldSelection.bottomRow() && oldSelection.leftCol()==oldSelection.rightCol())
542 emit cellClicked(getHeaderString(oldSelection.leftCol()+1)+QString::number(oldSelection.topRow()+1)); 545 emit cellClicked(findCellName(oldSelection.topRow(), oldSelection.leftCol()));
543 else 546 else
544 emit cellClicked(getHeaderString(oldSelection.leftCol()+1)+QString::number(oldSelection.topRow()+1)+','+getHeaderString(oldSelection.rightCol()+1)+QString::number(oldSelection.bottomRow()+1)); 547 emit cellClicked(findCellName(oldSelection.topRow(), oldSelection.leftCol())+','+findCellName(oldSelection.bottomRow(), oldSelection.rightCol()));
545 } 548 }
546 else 549 else
547 QTable::contentsMouseReleaseEvent(&ce); 550 QTable::contentsMouseReleaseEvent(&ce);
548} 551}
549 552
553QString Sheet::findCellName(int row, int col)
554{
555 return (getHeaderString(col+1)+QString::number(row+1));
556}
557
550void Sheet::copySheetData(QList<typeCellData> *destSheetData) 558void Sheet::copySheetData(QList<typeCellData> *destSheetData)
551{ 559{
552 typeCellData *tempCellData, *newCellData; 560 typeCellData *tempCellData, *newCellData;
553 destSheetData->clear(); 561 destSheetData->clear();
554 562
555 for (tempCellData=sheetData.first(); tempCellData; tempCellData=sheetData.next()) 563 for (tempCellData=sheetData.first(); tempCellData; tempCellData=sheetData.next())
@@ -573,13 +581,13 @@ void Sheet::setSheetData(QList<typeCellData> *srcSheetData)
573 581
574 for (tempCellData=srcSheetData->first(); tempCellData; tempCellData=srcSheetData->next()) 582 for (tempCellData=srcSheetData->first(); tempCellData; tempCellData=srcSheetData->next())
575 { 583 {
576 newCellData=new typeCellData; 584 newCellData=new typeCellData;
577 *newCellData=*tempCellData; 585 *newCellData=*tempCellData;
578 sheetData.append(newCellData); 586 sheetData.append(newCellData);
579 setText(newCellData->row, newCellData->col, dataParser(newCellData->data)); 587 setText(newCellData->row, newCellData->col, dataParser(findCellName(newCellData->row, newCellData->col), newCellData->data));
580 } 588 }
581 emit sheetModified(); 589 emit sheetModified();
582} 590}
583 591
584void Sheet::setName(const QString &name) 592void Sheet::setName(const QString &name)
585{ 593{
@@ -753,13 +761,13 @@ void Sheet::editPaste(bool onlyContents)
753 else 761 else
754 { 762 {
755 *cellData=*tempCellData; 763 *cellData=*tempCellData;
756 cellData->row+=row1; 764 cellData->row+=row1;
757 cellData->col+=col1; 765 cellData->col+=col1;
758 } 766 }
759 setText(cellData->row, cellData->col, dataParser(cellData->data)); 767 setText(cellData->row, cellData->col, dataParser(findCellName(cellData->row, cellData->col), cellData->data));
760 emit sheetModified(); 768 emit sheetModified();
761 } 769 }
762 } 770 }
763} 771}
764 772
765void Sheet::insertRows(int no, bool allColumns) 773void Sheet::insertRows(int no, bool allColumns)
@@ -776,13 +784,13 @@ void Sheet::insertRows(int no, bool allColumns)
776 tempCellData->row+=no; 784 tempCellData->row+=no;
777 } 785 }
778 for (tempCellData=sheetData.first(); tempCellData; tempCellData=sheetData.next()) 786 for (tempCellData=sheetData.first(); tempCellData; tempCellData=sheetData.next())
779 if (tempCellData->row>=row && (allColumns || tempCellData->col==col)) 787 if (tempCellData->row>=row && (allColumns || tempCellData->col==col))
780 { 788 {
781 updateCell(tempCellData->row-no, tempCellData->col); 789 updateCell(tempCellData->row-no, tempCellData->col);
782 setText(tempCellData->row, tempCellData->col, dataParser(tempCellData->data)); 790 setText(tempCellData->row, tempCellData->col, dataParser(findCellName(tempCellData->row, tempCellData->col), tempCellData->data));
783 } 791 }
784 emit sheetModified(); 792 emit sheetModified();
785} 793}
786 794
787void Sheet::insertColumns(int no, bool allRows) 795void Sheet::insertColumns(int no, bool allRows)
788{ 796{
@@ -802,13 +810,13 @@ void Sheet::insertColumns(int no, bool allRows)
802 tempCellData->col+=no; 810 tempCellData->col+=no;
803 } 811 }
804 for (tempCellData=sheetData.first(); tempCellData; tempCellData=sheetData.next()) 812 for (tempCellData=sheetData.first(); tempCellData; tempCellData=sheetData.next())
805 if (tempCellData->col>=col && (allRows || tempCellData->row==row)) 813 if (tempCellData->col>=col && (allRows || tempCellData->row==row))
806 { 814 {
807 updateCell(tempCellData->row, tempCellData->col-no); 815 updateCell(tempCellData->row, tempCellData->col-no);
808 setText(tempCellData->row, tempCellData->col, dataParser(tempCellData->data)); 816 setText(tempCellData->row, tempCellData->col, dataParser(findCellName(tempCellData->row, tempCellData->col), tempCellData->data));
809 } 817 }
810 emit sheetModified(); 818 emit sheetModified();
811} 819}
812 820
813void Sheet::dataFindReplace(const QString &findStr, const QString &replaceStr, bool matchCase, bool allCells, bool entireCell, bool replace, bool replaceAll) 821void Sheet::dataFindReplace(const QString &findStr, const QString &replaceStr, bool matchCase, bool allCells, bool entireCell, bool replace, bool replaceAll)
814{ 822{
@@ -829,13 +837,13 @@ void Sheet::dataFindReplace(const QString &findStr, const QString &replaceStr, b
829 clearSelection(); 837 clearSelection();
830 } 838 }
831 setCurrentCell(tempCellData->row, tempCellData->col); 839 setCurrentCell(tempCellData->row, tempCellData->col);
832 if (replace) 840 if (replace)
833 { 841 {
834 tempCellData->data=cellItem->text().replace(QRegExp(findStr, matchCase), replaceStr); 842 tempCellData->data=cellItem->text().replace(QRegExp(findStr, matchCase), replaceStr);
835 setText(tempCellData->row, tempCellData->col, dataParser(tempCellData->data)); 843 setText(tempCellData->row, tempCellData->col, dataParser(findCellName(tempCellData->row, tempCellData->col), tempCellData->data));
836 } 844 }
837 if (!replace || !replaceAll) break; 845 if (!replace || !replaceAll) break;
838 } 846 }
839 } 847 }
840 848
841 if (found) 849 if (found)