sc/inc/column.hxx | 4 +++- sc/inc/document.hxx | 5 ++++- sc/inc/table.hxx | 5 ++++- sc/source/core/data/column3.cxx | 20 +++++++++++++------- sc/source/core/data/documen2.cxx | 12 ++++++++++++ sc/source/core/data/document.cxx | 12 ++++++++++-- sc/source/core/data/table2.cxx | 23 +++++++++++++++++++++-- sc/source/ui/docshell/docfunc.cxx | 6 +++--- sc/source/ui/inc/undocell.hxx | 4 ++-- sc/source/ui/undo/undocell.cxx | 6 +++--- 10 files changed, 75 insertions(+), 22 deletions(-)
New commits: commit 384667a40c005b32cb78ba89cd35e0e94bfcf685 Author: Kohei Yoshida <kohei.yosh...@gmail.com> Date: Wed Mar 20 16:27:39 2013 -0400 Do the same for formula cells. Change-Id: Ia17079042ee4e17fb5b6abe8ae18b7838b68c7c1 diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx index edfa5f4..83a5530 100644 --- a/sc/inc/column.hxx +++ b/sc/inc/column.hxx @@ -264,6 +264,7 @@ public: void SetEditText( SCROW nRow, EditTextObject* pEditText ); void SetFormula( SCROW nRow, const ScTokenArray& rArray, formula::FormulaGrammar::Grammar eGram ); void SetFormula( SCROW nRow, const OUString& rFormula, formula::FormulaGrammar::Grammar eGram ); + void SetFormulaCell( SCROW nRow, ScFormulaCell* pCell ); void SetValue( SCROW nRow, const double& rVal); void SetError( SCROW nRow, const sal_uInt16 nError); @@ -273,7 +274,8 @@ public: double GetValue( SCROW nRow ) const; const EditTextObject* GetEditText( SCROW nRow ) const; void GetFormula( SCROW nRow, rtl::OUString& rFormula ) const; - const ScTokenArray* GetFormula( SCROW nRow ) const; + const ScTokenArray* GetFormulaTokens( SCROW nRow ) const; + const ScFormulaCell* GetFormulaCell( SCROW nRow ) const; CellType GetCellType( SCROW nRow ) const; SCSIZE GetCellCount() const; sal_uInt32 GetWeightedCount() const; diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx index 22fdec6..0f49166 100644 --- a/sc/inc/document.hxx +++ b/sc/inc/document.hxx @@ -787,6 +787,8 @@ public: const ScAddress& rPos, const OUString& rFormula, formula::FormulaGrammar::Grammar eGram = formula::FormulaGrammar::GRAM_DEFAULT ); + void SetFormulaCell( const ScAddress& rPos, ScFormulaCell* pCell ); + SC_DLLPUBLIC void InsertMatrixFormula(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2, const ScMarkData& rMark, @@ -820,7 +822,8 @@ public: SC_DLLPUBLIC void GetNumberFormatInfo( short& nType, sal_uLong& nIndex, const ScAddress& rPos, const ScBaseCell* pCell ) const; void GetFormula( SCCOL nCol, SCROW nRow, SCTAB nTab, String& rFormula ) const; - const ScTokenArray* GetFormula( const ScAddress& rPos ) const; + const ScTokenArray* GetFormulaTokens( const ScAddress& rPos ) const; + const ScFormulaCell* GetFormulaCell( const ScAddress& rPos ) const; SC_DLLPUBLIC void GetFormula( SCCOL nCol, SCROW nRow, SCTAB nTab, rtl::OUString& rFormula ) const; SC_DLLPUBLIC void GetCellType( SCCOL nCol, SCROW nRow, SCTAB nTab, CellType& rCellType ) const; SC_DLLPUBLIC CellType GetCellType( const ScAddress& rPos ) const; diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx index 84b5e0c..aebe9c0 100644 --- a/sc/inc/table.hxx +++ b/sc/inc/table.hxx @@ -311,6 +311,8 @@ public: void SetFormula( SCCOL nCol, SCROW nRow, const OUString& rFormula, formula::FormulaGrammar::Grammar eGram ); + void SetFormulaCell( SCCOL nCol, SCROW nRow, ScFormulaCell* pCell ); + void SetValue( SCCOL nCol, SCROW nRow, const double& rVal ); void SetError( SCCOL nCol, SCROW nRow, sal_uInt16 nError); @@ -325,7 +327,8 @@ public: double GetValue( SCCOL nCol, SCROW nRow ) const; const EditTextObject* GetEditText( SCCOL nCol, SCROW nRow ) const; void GetFormula( SCCOL nCol, SCROW nRow, rtl::OUString& rFormula ) const; - const ScTokenArray* GetFormula( SCCOL nCol, SCROW nRow ) const; + const ScTokenArray* GetFormulaTokens( SCCOL nCol, SCROW nRow ) const; + const ScFormulaCell* GetFormulaCell( SCCOL nCol, SCROW nRow ) const; CellType GetCellType( const ScAddress& rPos ) const { diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx index e914344..fedb528 100644 --- a/sc/source/core/data/column3.cxx +++ b/sc/source/core/data/column3.cxx @@ -1500,6 +1500,11 @@ void ScColumn::SetFormula( SCROW nRow, const OUString& rFormula, formula::Formul Insert(nRow, new ScFormulaCell(pDocument, aPos, rFormula, eGram)); } +void ScColumn::SetFormulaCell( SCROW nRow, ScFormulaCell* pCell ) +{ + Insert(nRow, pCell); +} + void ScColumn::GetFilterEntries(SCROW nStartRow, SCROW nEndRow, std::vector<ScTypedStrData>& rStrings, bool& rHasDates) { bool bHasDates = false; @@ -1823,17 +1828,18 @@ void ScColumn::GetFormula( SCROW nRow, rtl::OUString& rFormula ) const rFormula = rtl::OUString(); } -const ScTokenArray* ScColumn::GetFormula( SCROW nRow ) const +const ScTokenArray* ScColumn::GetFormulaTokens( SCROW nRow ) const { - SCSIZE nIndex; - if (!Search(nRow, nIndex)) + const ScFormulaCell* pCell = FetchFormulaCell(nRow); + if (!pCell) return NULL; - const ScBaseCell* pCell = maItems[nIndex].pCell; - if (pCell->GetCellType() != CELLTYPE_FORMULA) - return NULL; + return pCell->GetCode(); +} - return static_cast<const ScFormulaCell*>(pCell)->GetCode(); +const ScFormulaCell* ScColumn::GetFormulaCell( SCROW nRow ) const +{ + return FetchFormulaCell(nRow); } CellType ScColumn::GetCellType( SCROW nRow ) const diff --git a/sc/source/core/data/documen2.cxx b/sc/source/core/data/documen2.cxx index 3151053..90cc920 100644 --- a/sc/source/core/data/documen2.cxx +++ b/sc/source/core/data/documen2.cxx @@ -84,6 +84,7 @@ #include "formulaparserpool.hxx" #include "clipparam.hxx" #include "macromgr.hxx" +#include "cell.hxx" using namespace com::sun::star; @@ -1056,6 +1057,17 @@ void ScDocument::SetFormula( maTabs[rPos.Tab()]->SetFormula(rPos.Col(), rPos.Row(), rFormula, eGram); } +void ScDocument::SetFormulaCell( const ScAddress& rPos, ScFormulaCell* pCell ) +{ + if (!TableExists(rPos.Tab())) + { + pCell->Delete(); + return; + } + + maTabs[rPos.Tab()]->SetFormulaCell(rPos.Col(), rPos.Row(), pCell); +} + void ScDocument::SetConsolidateDlgData( const ScConsolidateParam* pData ) { delete pConsolidateDlgData; diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx index e798256..5ccd2bc 100644 --- a/sc/source/core/data/document.cxx +++ b/sc/source/core/data/document.cxx @@ -3242,12 +3242,20 @@ void ScDocument::GetFormula( SCCOL nCol, SCROW nRow, SCTAB nTab, String& rFormul rFormula = aString; } -const ScTokenArray* ScDocument::GetFormula( const ScAddress& rPos ) const +const ScTokenArray* ScDocument::GetFormulaTokens( const ScAddress& rPos ) const { if (!TableExists(rPos.Tab())) return NULL; - return maTabs[rPos.Tab()]->GetFormula(rPos.Col(), rPos.Row()); + return maTabs[rPos.Tab()]->GetFormulaTokens(rPos.Col(), rPos.Row()); +} + +const ScFormulaCell* ScDocument::GetFormulaCell( const ScAddress& rPos ) const +{ + if (!TableExists(rPos.Tab())) + return NULL; + + return maTabs[rPos.Tab()]->GetFormulaCell(rPos.Col(), rPos.Row()); } CellType ScDocument::GetCellType( const ScAddress& rPos ) const diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx index aab3235..0306f2c 100644 --- a/sc/source/core/data/table2.cxx +++ b/sc/source/core/data/table2.cxx @@ -1360,6 +1360,17 @@ void ScTable::SetFormula( aCol[nCol].SetFormula(nRow, rFormula, eGram); } +void ScTable::SetFormulaCell( SCCOL nCol, SCROW nRow, ScFormulaCell* pCell ) +{ + if (!ValidColRow(nCol, nRow)) + { + pCell->Delete(); + return; + } + + aCol[nCol].SetFormulaCell(nRow, pCell); +} + void ScTable::SetValue( SCCOL nCol, SCROW nRow, const double& rVal ) { if (ValidColRow(nCol, nRow)) @@ -1408,12 +1419,20 @@ void ScTable::GetFormula( SCCOL nCol, SCROW nRow, rtl::OUString& rFormula ) cons rFormula = rtl::OUString(); } -const ScTokenArray* ScTable::GetFormula( SCCOL nCol, SCROW nRow ) const +const ScTokenArray* ScTable::GetFormulaTokens( SCCOL nCol, SCROW nRow ) const +{ + if (!ValidColRow(nCol, nRow)) + return NULL; + + return aCol[nCol].GetFormulaTokens(nRow); +} + +const ScFormulaCell* ScTable::GetFormulaCell( SCCOL nCol, SCROW nRow ) const { if (!ValidColRow(nCol, nRow)) return NULL; - return aCol[nCol].GetFormula(nRow); + return aCol[nCol].GetFormulaCell(nRow); } ScNotes* ScTable::GetNotes() diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx index b3df393..08c96e3 100644 --- a/sc/source/ui/docshell/docfunc.cxx +++ b/sc/source/ui/docshell/docfunc.cxx @@ -842,9 +842,9 @@ void pushUndoSetCell( ScDocShell& rDocShell, ScDocument* pDoc, const ScAddress& break; case CELLTYPE_FORMULA: { - const ScTokenArray* pTokens = pDoc->GetFormula(rPos); - if (pTokens) - pUndoMgr->AddUndoAction(new ScUndoSetCell(&rDocShell, rPos, *pTokens, rNewVal)); + const ScFormulaCell* pCell = pDoc->GetFormulaCell(rPos); + if (pCell) + pUndoMgr->AddUndoAction(new ScUndoSetCell(&rDocShell, rPos, *pCell, rNewVal)); } break; default: diff --git a/sc/source/ui/inc/undocell.hxx b/sc/source/ui/inc/undocell.hxx index a99f05e..19bdee5 100644 --- a/sc/source/ui/inc/undocell.hxx +++ b/sc/source/ui/inc/undocell.hxx @@ -168,14 +168,14 @@ public: double mfValue; OUString* mpString; EditTextObject* mpEditText; - ScTokenArray* mpFormula; + ScFormulaCell* mpFormula; }; Value(); Value( double fValue ); Value( const OUString& rString ); Value( const EditTextObject& rEditText ); - Value( const ScTokenArray& rFormula ); + Value( const ScFormulaCell& rFormula ); Value( const Value& r ); ~Value(); }; diff --git a/sc/source/ui/undo/undocell.cxx b/sc/source/ui/undo/undocell.cxx index e7fb68a..878a077 100644 --- a/sc/source/ui/undo/undocell.cxx +++ b/sc/source/ui/undo/undocell.cxx @@ -502,7 +502,7 @@ ScUndoSetCell::Value::Value() : meType(CELLTYPE_NONE), mfValue(0.0) {} ScUndoSetCell::Value::Value( double fValue ) : meType(CELLTYPE_VALUE), mfValue(fValue) {} ScUndoSetCell::Value::Value( const OUString& rString ) : meType(CELLTYPE_STRING), mpString(new OUString(rString)) {} ScUndoSetCell::Value::Value( const EditTextObject& rEditText ) : meType(CELLTYPE_EDIT), mpEditText(rEditText.Clone()) {} -ScUndoSetCell::Value::Value( const ScTokenArray& rFormula ) : meType(CELLTYPE_FORMULA), mpFormula(rFormula.Clone()) {} +ScUndoSetCell::Value::Value( const ScFormulaCell& rFormula ) : meType(CELLTYPE_FORMULA), mpFormula(rFormula.Clone()) {} ScUndoSetCell::Value::Value( const Value& r ) : meType(r.meType), mfValue(r.mfValue) { @@ -531,7 +531,7 @@ ScUndoSetCell::Value::~Value() case CELLTYPE_EDIT: delete mpEditText; case CELLTYPE_FORMULA: - delete mpFormula; + mpFormula->Delete(); default: ; } @@ -594,7 +594,7 @@ void ScUndoSetCell::SetValue( const Value& rVal ) pDoc->SetEditText(maPos, rVal.mpEditText->Clone()); break; case CELLTYPE_FORMULA: - pDoc->SetFormula(maPos, *rVal.mpFormula); + pDoc->SetFormulaCell(maPos, rVal.mpFormula->Clone()); break; default: ; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits