Kaydet (Commit) 7a522da4 authored tarafından Kohei Yoshida's avatar Kohei Yoshida

Add more calls to CellStorageModified() when it's called for.

Change-Id: Ib7a7abd82060b19f7911f1fef5ccccff5d850055
üst 33a417fc
...@@ -464,7 +464,7 @@ private: ...@@ -464,7 +464,7 @@ private:
sc::CellStoreType::iterator GetPositionToInsert( const sc::CellStoreType::iterator& it, SCROW nRow ); sc::CellStoreType::iterator GetPositionToInsert( const sc::CellStoreType::iterator& it, SCROW nRow );
void ActivateNewFormulaCell( ScFormulaCell* pCell ); void ActivateNewFormulaCell( ScFormulaCell* pCell );
void BroadcastNewCell( SCROW nRow ); void BroadcastNewCell( SCROW nRow );
void UpdateScriptType( sc::CellTextAttr& rAttr, SCROW nRow ); bool UpdateScriptType( sc::CellTextAttr& rAttr, SCROW nRow );
const ScFormulaCell* FetchFormulaCell( SCROW nRow ) const; const ScFormulaCell* FetchFormulaCell( SCROW nRow ) const;
...@@ -476,7 +476,7 @@ private: ...@@ -476,7 +476,7 @@ private:
* Called whenever the state of cell array gets modified i.e. new cell * Called whenever the state of cell array gets modified i.e. new cell
* insertion, cell removal or relocation, cell value update and so on. * insertion, cell removal or relocation, cell value update and so on.
* *
* Call this only from those methods where maItems is modified directly. * Call this only from those methods where maCells is modified directly.
*/ */
void CellStorageModified(); void CellStorageModified();
......
...@@ -1369,6 +1369,8 @@ void ScColumn::CopyStaticToDocument(SCROW nRow1, SCROW nRow2, ScColumn& rDestCol ...@@ -1369,6 +1369,8 @@ void ScColumn::CopyStaticToDocument(SCROW nRow1, SCROW nRow2, ScColumn& rDestCol
if (bLastBlock) if (bLastBlock)
break; break;
} }
rDestCol.CellStorageModified();
} }
void ScColumn::CopyCellToDocument( SCROW nSrcRow, SCROW nDestRow, ScColumn& rDestCol ) void ScColumn::CopyCellToDocument( SCROW nSrcRow, SCROW nDestRow, ScColumn& rDestCol )
...@@ -1416,6 +1418,8 @@ void ScColumn::CopyCellToDocument( SCROW nSrcRow, SCROW nDestRow, ScColumn& rDes ...@@ -1416,6 +1418,8 @@ void ScColumn::CopyCellToDocument( SCROW nSrcRow, SCROW nDestRow, ScColumn& rDes
rDestCol.maCellTextAttrs.set(nDestRow, maCellTextAttrs.get<sc::CellTextAttr>(nSrcRow)); rDestCol.maCellTextAttrs.set(nDestRow, maCellTextAttrs.get<sc::CellTextAttr>(nSrcRow));
else else
rDestCol.maCellTextAttrs.set_empty(nDestRow, nDestRow); rDestCol.maCellTextAttrs.set_empty(nDestRow, nDestRow);
rDestCol.CellStorageModified();
} }
namespace { namespace {
...@@ -1918,9 +1922,6 @@ void ScColumn::SwapCol(ScColumn& rCol) ...@@ -1918,9 +1922,6 @@ void ScColumn::SwapCol(ScColumn& rCol)
maCells.swap(rCol.maCells); maCells.swap(rCol.maCells);
maCellTextAttrs.swap(rCol.maCellTextAttrs); maCellTextAttrs.swap(rCol.maCellTextAttrs);
CellStorageModified();
rCol.CellStorageModified();
ScAttrArray* pTempAttr = rCol.pAttrArray; ScAttrArray* pTempAttr = rCol.pAttrArray;
rCol.pAttrArray = pAttrArray; rCol.pAttrArray = pAttrArray;
pAttrArray = pTempAttr; pAttrArray = pTempAttr;
...@@ -1934,6 +1935,10 @@ void ScColumn::SwapCol(ScColumn& rCol) ...@@ -1934,6 +1935,10 @@ void ScColumn::SwapCol(ScColumn& rCol)
// Reset column positions in formula cells. // Reset column positions in formula cells.
resetColumnPosition(maCells, nCol); resetColumnPosition(maCells, nCol);
resetColumnPosition(rCol.maCells, rCol.nCol); resetColumnPosition(rCol.maCells, rCol.nCol);
CellStorageModified();
rCol.CellStorageModified();
} }
void ScColumn::MoveTo(SCROW nStartRow, SCROW nEndRow, ScColumn& rCol) void ScColumn::MoveTo(SCROW nStartRow, SCROW nEndRow, ScColumn& rCol)
...@@ -2107,17 +2112,21 @@ class InsertTabUpdater ...@@ -2107,17 +2112,21 @@ class InsertTabUpdater
SCTAB mnTab; SCTAB mnTab;
SCTAB mnInsPos; SCTAB mnInsPos;
SCTAB mnNewSheets; SCTAB mnNewSheets;
bool mbModified;
public: public:
InsertTabUpdater(sc::CellTextAttrStoreType& rTextAttrs, SCTAB nTab, SCTAB nInsPos, SCTAB nNewSheets) : InsertTabUpdater(sc::CellTextAttrStoreType& rTextAttrs, SCTAB nTab, SCTAB nInsPos, SCTAB nNewSheets) :
mrTextAttrs(rTextAttrs), mrTextAttrs(rTextAttrs),
miAttrPos(rTextAttrs.begin()), miAttrPos(rTextAttrs.begin()),
mnTab(nTab), mnTab(nTab),
mnInsPos(nInsPos), mnInsPos(nInsPos),
mnNewSheets(nNewSheets) {} mnNewSheets(nNewSheets),
mbModified(false) {}
void operator() (size_t /*nRow*/, ScFormulaCell* pCell) void operator() (size_t /*nRow*/, ScFormulaCell* pCell)
{ {
pCell->UpdateInsertTab(mnInsPos, mnNewSheets); pCell->UpdateInsertTab(mnInsPos, mnNewSheets);
mbModified = true;
} }
void operator() (size_t nRow, EditTextObject* pCell) void operator() (size_t nRow, EditTextObject* pCell)
...@@ -2125,7 +2134,10 @@ public: ...@@ -2125,7 +2134,10 @@ public:
editeng::FieldUpdater aUpdater = pCell->GetFieldUpdater(); editeng::FieldUpdater aUpdater = pCell->GetFieldUpdater();
aUpdater.updateTableFields(mnTab); aUpdater.updateTableFields(mnTab);
miAttrPos = mrTextAttrs.set(miAttrPos, nRow, sc::CellTextAttr()); miAttrPos = mrTextAttrs.set(miAttrPos, nRow, sc::CellTextAttr());
mbModified = true;
} }
bool isModified() const { return mbModified; }
}; };
class DeleteTabUpdater class DeleteTabUpdater
...@@ -2136,6 +2148,7 @@ class DeleteTabUpdater ...@@ -2136,6 +2148,7 @@ class DeleteTabUpdater
SCTAB mnSheets; SCTAB mnSheets;
SCTAB mnTab; SCTAB mnTab;
bool mbIsMove; bool mbIsMove;
bool mbModified;
public: public:
DeleteTabUpdater(sc::CellTextAttrStoreType& rTextAttrs, SCTAB nDelPos, SCTAB nSheets, SCTAB nTab, bool bIsMove) : DeleteTabUpdater(sc::CellTextAttrStoreType& rTextAttrs, SCTAB nDelPos, SCTAB nSheets, SCTAB nTab, bool bIsMove) :
mrTextAttrs(rTextAttrs), mrTextAttrs(rTextAttrs),
...@@ -2143,11 +2156,13 @@ public: ...@@ -2143,11 +2156,13 @@ public:
mnDelPos(nDelPos), mnDelPos(nDelPos),
mnSheets(nSheets), mnSheets(nSheets),
mnTab(nTab), mnTab(nTab),
mbIsMove(bIsMove) {} mbIsMove(bIsMove),
mbModified(false) {}
void operator() (size_t, ScFormulaCell* pCell) void operator() (size_t, ScFormulaCell* pCell)
{ {
pCell->UpdateDeleteTab(mnDelPos, mbIsMove, mnSheets); pCell->UpdateDeleteTab(mnDelPos, mbIsMove, mnSheets);
mbModified = true;
} }
void operator() (size_t nRow, EditTextObject* pCell) void operator() (size_t nRow, EditTextObject* pCell)
...@@ -2155,7 +2170,10 @@ public: ...@@ -2155,7 +2170,10 @@ public:
editeng::FieldUpdater aUpdater = pCell->GetFieldUpdater(); editeng::FieldUpdater aUpdater = pCell->GetFieldUpdater();
aUpdater.updateTableFields(mnTab); aUpdater.updateTableFields(mnTab);
miAttrPos = mrTextAttrs.set(miAttrPos, nRow, sc::CellTextAttr()); miAttrPos = mrTextAttrs.set(miAttrPos, nRow, sc::CellTextAttr());
mbModified = true;
} }
bool isModified() const { return mbModified; }
}; };
class InsertAbsTabUpdater class InsertAbsTabUpdater
...@@ -2164,16 +2182,19 @@ class InsertAbsTabUpdater ...@@ -2164,16 +2182,19 @@ class InsertAbsTabUpdater
sc::CellTextAttrStoreType::iterator miAttrPos; sc::CellTextAttrStoreType::iterator miAttrPos;
SCTAB mnTab; SCTAB mnTab;
SCTAB mnNewPos; SCTAB mnNewPos;
bool mbModified;
public: public:
InsertAbsTabUpdater(sc::CellTextAttrStoreType& rTextAttrs, SCTAB nTab, SCTAB nNewPos) : InsertAbsTabUpdater(sc::CellTextAttrStoreType& rTextAttrs, SCTAB nTab, SCTAB nNewPos) :
mrTextAttrs(rTextAttrs), mrTextAttrs(rTextAttrs),
miAttrPos(rTextAttrs.begin()), miAttrPos(rTextAttrs.begin()),
mnTab(nTab), mnTab(nTab),
mnNewPos(nNewPos) {} mnNewPos(nNewPos),
mbModified(false) {}
void operator() (size_t /*nRow*/, ScFormulaCell* pCell) void operator() (size_t /*nRow*/, ScFormulaCell* pCell)
{ {
pCell->UpdateInsertTabAbs(mnNewPos); pCell->UpdateInsertTabAbs(mnNewPos);
mbModified = true;
} }
void operator() (size_t nRow, EditTextObject* pCell) void operator() (size_t nRow, EditTextObject* pCell)
...@@ -2181,7 +2202,10 @@ public: ...@@ -2181,7 +2202,10 @@ public:
editeng::FieldUpdater aUpdater = pCell->GetFieldUpdater(); editeng::FieldUpdater aUpdater = pCell->GetFieldUpdater();
aUpdater.updateTableFields(mnTab); aUpdater.updateTableFields(mnTab);
miAttrPos = mrTextAttrs.set(miAttrPos, nRow, sc::CellTextAttr()); miAttrPos = mrTextAttrs.set(miAttrPos, nRow, sc::CellTextAttr());
mbModified = true;
} }
bool isModified() const { return mbModified; }
}; };
class MoveTabUpdater class MoveTabUpdater
...@@ -2191,17 +2215,20 @@ class MoveTabUpdater ...@@ -2191,17 +2215,20 @@ class MoveTabUpdater
SCTAB mnTab; SCTAB mnTab;
SCTAB mnOldPos; SCTAB mnOldPos;
SCTAB mnNewPos; SCTAB mnNewPos;
bool mbModified;
public: public:
MoveTabUpdater(sc::CellTextAttrStoreType& rTextAttrs, SCTAB nTab, SCTAB nOldPos, SCTAB nNewPos) : MoveTabUpdater(sc::CellTextAttrStoreType& rTextAttrs, SCTAB nTab, SCTAB nOldPos, SCTAB nNewPos) :
mrTextAttrs(rTextAttrs), mrTextAttrs(rTextAttrs),
miAttrPos(rTextAttrs.begin()), miAttrPos(rTextAttrs.begin()),
mnTab(nTab), mnTab(nTab),
mnOldPos(nOldPos), mnOldPos(nOldPos),
mnNewPos(nNewPos) {} mnNewPos(nNewPos),
mbModified(false) {}
void operator() (size_t /*nRow*/, ScFormulaCell* pCell) void operator() (size_t /*nRow*/, ScFormulaCell* pCell)
{ {
pCell->UpdateMoveTab(mnOldPos, mnNewPos, mnTab); pCell->UpdateMoveTab(mnOldPos, mnNewPos, mnTab);
mbModified = true;
} }
void operator() (size_t nRow, EditTextObject* pCell) void operator() (size_t nRow, EditTextObject* pCell)
...@@ -2209,14 +2236,18 @@ public: ...@@ -2209,14 +2236,18 @@ public:
editeng::FieldUpdater aUpdater = pCell->GetFieldUpdater(); editeng::FieldUpdater aUpdater = pCell->GetFieldUpdater();
aUpdater.updateTableFields(mnTab); aUpdater.updateTableFields(mnTab);
miAttrPos = mrTextAttrs.set(miAttrPos, nRow, sc::CellTextAttr()); miAttrPos = mrTextAttrs.set(miAttrPos, nRow, sc::CellTextAttr());
mbModified = true;
} }
bool isModified() const { return mbModified; }
}; };
class UpdateCompileHandler class UpdateCompileHandler
{ {
bool mbForceIfNameInUse; bool mbForceIfNameInUse:1;
public: public:
UpdateCompileHandler(bool bForceIfNameInUse) : mbForceIfNameInUse(bForceIfNameInUse) {} UpdateCompileHandler(bool bForceIfNameInUse) :
mbForceIfNameInUse(bForceIfNameInUse) {}
void operator() (size_t /*nRow*/, ScFormulaCell* pCell) void operator() (size_t /*nRow*/, ScFormulaCell* pCell)
{ {
...@@ -2541,6 +2572,8 @@ void ScColumn::UpdateInsertTabOnlyCells(SCTAB nInsPos, SCTAB nNewSheets) ...@@ -2541,6 +2572,8 @@ void ScColumn::UpdateInsertTabOnlyCells(SCTAB nInsPos, SCTAB nNewSheets)
{ {
InsertTabUpdater aFunc(maCellTextAttrs, nTab, nInsPos, nNewSheets); InsertTabUpdater aFunc(maCellTextAttrs, nTab, nInsPos, nNewSheets);
sc::ProcessFormulaEditText(maCells, aFunc); sc::ProcessFormulaEditText(maCells, aFunc);
if (aFunc.isModified())
CellStorageModified();
} }
void ScColumn::UpdateDeleteTab(SCTAB nDelPos, bool bIsMove, ScColumn* /*pRefUndo*/, SCTAB nSheets) void ScColumn::UpdateDeleteTab(SCTAB nDelPos, bool bIsMove, ScColumn* /*pRefUndo*/, SCTAB nSheets)
...@@ -2553,12 +2586,16 @@ void ScColumn::UpdateDeleteTab(SCTAB nDelPos, bool bIsMove, ScColumn* /*pRefUndo ...@@ -2553,12 +2586,16 @@ void ScColumn::UpdateDeleteTab(SCTAB nDelPos, bool bIsMove, ScColumn* /*pRefUndo
DeleteTabUpdater aFunc(maCellTextAttrs, nDelPos, nSheets, nTab, bIsMove); DeleteTabUpdater aFunc(maCellTextAttrs, nDelPos, nSheets, nTab, bIsMove);
sc::ProcessFormulaEditText(maCells, aFunc); sc::ProcessFormulaEditText(maCells, aFunc);
if (aFunc.isModified())
CellStorageModified();
} }
void ScColumn::UpdateInsertTabAbs(SCTAB nNewPos) void ScColumn::UpdateInsertTabAbs(SCTAB nNewPos)
{ {
InsertAbsTabUpdater aFunc(maCellTextAttrs, nTab, nNewPos); InsertAbsTabUpdater aFunc(maCellTextAttrs, nTab, nNewPos);
sc::ProcessFormulaEditText(maCells, aFunc); sc::ProcessFormulaEditText(maCells, aFunc);
if (aFunc.isModified())
CellStorageModified();
} }
void ScColumn::UpdateMoveTab( SCTAB nOldPos, SCTAB nNewPos, SCTAB nTabNo ) void ScColumn::UpdateMoveTab( SCTAB nOldPos, SCTAB nNewPos, SCTAB nTabNo )
...@@ -2568,6 +2605,8 @@ void ScColumn::UpdateMoveTab( SCTAB nOldPos, SCTAB nNewPos, SCTAB nTabNo ) ...@@ -2568,6 +2605,8 @@ void ScColumn::UpdateMoveTab( SCTAB nOldPos, SCTAB nNewPos, SCTAB nTabNo )
MoveTabUpdater aFunc(maCellTextAttrs, nTab, nOldPos, nNewPos); MoveTabUpdater aFunc(maCellTextAttrs, nTab, nOldPos, nNewPos);
sc::ProcessFormulaEditText(maCells, aFunc); sc::ProcessFormulaEditText(maCells, aFunc);
if (aFunc.isModified())
CellStorageModified();
} }
......
...@@ -1621,6 +1621,7 @@ void ScColumn::ResetCellTextAttrs() ...@@ -1621,6 +1621,7 @@ void ScColumn::ResetCellTextAttrs()
CellTextAttrInitializer aFunc; CellTextAttrInitializer aFunc;
std::for_each(maCells.begin(), maCells.end(), aFunc); std::for_each(maCells.begin(), maCells.end(), aFunc);
aFunc.swap(maCellTextAttrs); aFunc.swap(maCellTextAttrs);
CellStorageModified();
} }
void ScColumn::SwapCellTextAttrs( SCROW nRow1, SCROW nRow2 ) void ScColumn::SwapCellTextAttrs( SCROW nRow1, SCROW nRow2 )
...@@ -1670,6 +1671,8 @@ void ScColumn::SwapCellTextAttrs( SCROW nRow1, SCROW nRow2 ) ...@@ -1670,6 +1671,8 @@ void ScColumn::SwapCellTextAttrs( SCROW nRow1, SCROW nRow2 )
sc::CellTextAttr aVal1 = sc::celltextattr_block::at(*it1->data, aPos1.second); // make a copy. sc::CellTextAttr aVal1 = sc::celltextattr_block::at(*it1->data, aPos1.second); // make a copy.
it1 = maCellTextAttrs.set_empty(it1, nRow1, nRow1); it1 = maCellTextAttrs.set_empty(it1, nRow1, nRow1);
maCellTextAttrs.set(it1, nRow2, aVal1); maCellTextAttrs.set(it1, nRow2, aVal1);
CellStorageModified();
} }
SvtBroadcaster* ScColumn::GetBroadcaster(SCROW nRow) SvtBroadcaster* ScColumn::GetBroadcaster(SCROW nRow)
...@@ -1710,6 +1713,7 @@ void ScColumn::SetTextWidth(SCROW nRow, sal_uInt16 nWidth) ...@@ -1710,6 +1713,7 @@ void ScColumn::SetTextWidth(SCROW nRow, sal_uInt16 nWidth)
sc::CellTextAttr aVal = maCellTextAttrs.get<sc::CellTextAttr>(nRow); sc::CellTextAttr aVal = maCellTextAttrs.get<sc::CellTextAttr>(nRow);
aVal.mnTextWidth = nWidth; aVal.mnTextWidth = nWidth;
maCellTextAttrs.set(nRow, aVal); maCellTextAttrs.set(nRow, aVal);
CellStorageModified();
} }
sal_uInt8 ScColumn::GetScriptType( SCROW nRow ) const sal_uInt8 ScColumn::GetScriptType( SCROW nRow ) const
...@@ -1733,7 +1737,7 @@ sal_uInt8 ScColumn::GetRangeScriptType( ...@@ -1733,7 +1737,7 @@ sal_uInt8 ScColumn::GetRangeScriptType(
itPos = aRet.first; // Track the position of cell text attribute array. itPos = aRet.first; // Track the position of cell text attribute array.
sal_uInt8 nScriptType = 0; sal_uInt8 nScriptType = 0;
bool bUpdated = false;
if (itPos->type == sc::element_type_celltextattr) if (itPos->type == sc::element_type_celltextattr)
{ {
sc::celltextattr_block::iterator it = sc::celltextattr_block::begin(*itPos->data); sc::celltextattr_block::iterator it = sc::celltextattr_block::begin(*itPos->data);
...@@ -1745,7 +1749,8 @@ sal_uInt8 ScColumn::GetRangeScriptType( ...@@ -1745,7 +1749,8 @@ sal_uInt8 ScColumn::GetRangeScriptType(
return nScriptType; return nScriptType;
sc::CellTextAttr& rVal = *it; sc::CellTextAttr& rVal = *it;
UpdateScriptType(rVal, nRow); if (UpdateScriptType(rVal, nRow))
bUpdated = true;
nScriptType |= rVal.mnScriptType; nScriptType |= rVal.mnScriptType;
} }
} }
...@@ -1776,11 +1781,16 @@ sal_uInt8 ScColumn::GetRangeScriptType( ...@@ -1776,11 +1781,16 @@ sal_uInt8 ScColumn::GetRangeScriptType(
return nScriptType; return nScriptType;
sc::CellTextAttr& rVal = *it; sc::CellTextAttr& rVal = *it;
UpdateScriptType(rVal, nRow); if (UpdateScriptType(rVal, nRow))
bUpdated = true;
nScriptType |= rVal.mnScriptType; nScriptType |= rVal.mnScriptType;
} }
} }
if (bUpdated)
CellStorageModified();
return nScriptType; return nScriptType;
} }
...@@ -1797,12 +1807,14 @@ void ScColumn::SetScriptType( SCROW nRow, sal_uInt8 nType ) ...@@ -1797,12 +1807,14 @@ void ScColumn::SetScriptType( SCROW nRow, sal_uInt8 nType )
sc::CellTextAttr aVal = maCellTextAttrs.get<sc::CellTextAttr>(nRow); sc::CellTextAttr aVal = maCellTextAttrs.get<sc::CellTextAttr>(nRow);
aVal.mnScriptType = nType; aVal.mnScriptType = nType;
maCellTextAttrs.set(nRow, aVal); maCellTextAttrs.set(nRow, aVal);
CellStorageModified();
} }
else else
{ {
sc::CellTextAttr aVal = maCellTextAttrs.get<sc::CellTextAttr>(nRow); sc::CellTextAttr aVal = maCellTextAttrs.get<sc::CellTextAttr>(nRow);
aVal.mnScriptType = nType; aVal.mnScriptType = nType;
maCellTextAttrs.set(nRow, aVal); maCellTextAttrs.set(nRow, aVal);
CellStorageModified();
} }
} }
......
...@@ -455,17 +455,17 @@ void ScColumn::BroadcastNewCell( SCROW nRow ) ...@@ -455,17 +455,17 @@ void ScColumn::BroadcastNewCell( SCROW nRow )
pDocument->Broadcast(aHint); pDocument->Broadcast(aHint);
} }
void ScColumn::UpdateScriptType( sc::CellTextAttr& rAttr, SCROW nRow ) bool ScColumn::UpdateScriptType( sc::CellTextAttr& rAttr, SCROW nRow )
{ {
if (rAttr.mnScriptType != SC_SCRIPTTYPE_UNKNOWN) if (rAttr.mnScriptType != SC_SCRIPTTYPE_UNKNOWN)
// Already updated. Nothing to do. // Already updated. Nothing to do.
return; return false;
// Script type not yet determined. Determine the real script // Script type not yet determined. Determine the real script
// type, and store it. // type, and store it.
const ScPatternAttr* pPattern = GetPattern(nRow); const ScPatternAttr* pPattern = GetPattern(nRow);
if (!pPattern) if (!pPattern)
return; return false;
ScRefCellValue aCell; ScRefCellValue aCell;
ScAddress aPos(nCol, nRow, nTab); ScAddress aPos(nCol, nRow, nTab);
...@@ -490,6 +490,7 @@ void ScColumn::UpdateScriptType( sc::CellTextAttr& rAttr, SCROW nRow ) ...@@ -490,6 +490,7 @@ void ScColumn::UpdateScriptType( sc::CellTextAttr& rAttr, SCROW nRow )
// Store the real script type to the array. // Store the real script type to the array.
rAttr.mnScriptType = pDocument->GetStringScriptType(aStr); rAttr.mnScriptType = pDocument->GetStringScriptType(aStr);
return true;
} }
namespace { namespace {
...@@ -1346,6 +1347,7 @@ void ScColumn::MixData( ...@@ -1346,6 +1347,7 @@ void ScColumn::MixData(
sc::ParseAll(rSrcCol.maCells.begin(), rSrcCol.maCells, nRow1, nRow2, aFunc, aFunc); sc::ParseAll(rSrcCol.maCells.begin(), rSrcCol.maCells, nRow1, nRow2, aFunc, aFunc);
aFunc.commit(p); aFunc.commit(p);
CellStorageModified();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment