diff options
author | Kohei Yoshida <kohei.yoshida@gmail.com> | 2013-05-20 13:17:28 -0400 |
---|---|---|
committer | Kohei Yoshida <kohei.yoshida@gmail.com> | 2013-05-20 20:19:28 -0400 |
commit | 02304b8fc917a8af4230ddf3e26a45000550768a (patch) | |
tree | 8f90b756363f86e707e7a17041c893fede876b0f /sc/source | |
parent | 96d56b9cc6a3e00faf231e92bffbfff7e73a7ee5 (diff) |
Ditto when purging broadcasters.
Change-Id: I632d617cad76485f7e1f57daa7db4d4cfa775e8b
Diffstat (limited to 'sc/source')
-rw-r--r-- | sc/source/core/data/column2.cxx | 5 | ||||
-rw-r--r-- | sc/source/core/data/columnspanset.cxx | 33 | ||||
-rw-r--r-- | sc/source/core/data/document.cxx | 6 | ||||
-rw-r--r-- | sc/source/core/data/listenercontext.cxx | 14 | ||||
-rw-r--r-- | sc/source/core/data/table1.cxx | 5 |
5 files changed, 23 insertions, 40 deletions
diff --git a/sc/source/core/data/column2.cxx b/sc/source/core/data/column2.cxx index fa603f522da0..375752c5c085 100644 --- a/sc/source/core/data/column2.cxx +++ b/sc/source/core/data/column2.cxx @@ -1605,9 +1605,10 @@ const SvtBroadcaster* ScColumn::GetBroadcaster(SCROW nRow) const return maBroadcasters.get<SvtBroadcaster*>(nRow); } -void ScColumn::DeleteBroadcasters( SCROW nRow1, SCROW nRow2 ) +void ScColumn::DeleteBroadcasters( sc::ColumnBlockPosition& rBlockPos, SCROW nRow1, SCROW nRow2 ) { - maBroadcasters.set_empty(nRow1, nRow2); + rBlockPos.miBroadcasterPos = + maBroadcasters.set_empty(rBlockPos.miBroadcasterPos, nRow1, nRow2); } sal_uInt16 ScColumn::GetTextWidth(SCROW nRow) const diff --git a/sc/source/core/data/columnspanset.cxx b/sc/source/core/data/columnspanset.cxx index ea4f7060dbc6..9b63dc75f728 100644 --- a/sc/source/core/data/columnspanset.cxx +++ b/sc/source/core/data/columnspanset.cxx @@ -85,43 +85,14 @@ void ColumnSpanSet::executeFromTop(Action& ac) const ColumnSpansType::const_iterator it = rCol.begin(), itEnd = rCol.end(); SCROW nRow1, nRow2; nRow1 = it->first; + bool bVal = it->second; for (++it; it != itEnd; ++it) { nRow2 = it->first-1; - bool bVal = it->second; ac.execute(ScAddress(nCol, nRow1, nTab), nRow2-nRow1+1, bVal); nRow1 = nRow2+1; // for the next iteration. - } - } - } -} - -void ColumnSpanSet::executeFromBottom(Action& ac) const -{ - for (size_t nTab = 0; nTab < maDoc.size(); ++nTab) - { - if (!maDoc[nTab]) - continue; - - const TableType& rTab = *maDoc[nTab]; - for (size_t nCol = 0; nCol < rTab.size(); ++nCol) - { - if (!rTab[nCol]) - continue; - - ac.startColumn(nTab, nCol); - ColumnSpansType& rCol = *rTab[nCol]; - ColumnSpansType::const_reverse_iterator it = rCol.rbegin(), itEnd = rCol.rend(); - SCROW nRow1, nRow2; - nRow2 = it->first-1; - for (++it; it != itEnd; ++it) - { - nRow1 = it->first; - bool bVal = it->second; - ac.execute(ScAddress(nCol, nRow1, nTab), nRow2-nRow1+1, bVal); - - nRow2 = nRow1-1; // for the next iteration. + bVal = it->second; } } } diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx index f74a946bd504..901476e70a6d 100644 --- a/sc/source/core/data/document.cxx +++ b/sc/source/core/data/document.cxx @@ -2241,20 +2241,20 @@ SvtBroadcaster* ScDocument::GetBroadcaster( const ScAddress& rPos ) const SvtBroadcaster* ScDocument::GetBroadcaster( const ScAddress& rPos ) const { - ScTable* pTab = FetchTable(rPos.Tab()); + const ScTable* pTab = FetchTable(rPos.Tab()); if (!pTab) return NULL; return pTab->GetBroadcaster(rPos.Col(), rPos.Row()); } -void ScDocument::DeleteBroadcasters( const ScAddress& rTopPos, SCROW nLength ) +void ScDocument::DeleteBroadcasters( sc::ColumnBlockPosition& rBlockPos, const ScAddress& rTopPos, SCROW nLength ) { ScTable* pTab = FetchTable(rTopPos.Tab()); if (!pTab || nLength <= 0) return; - pTab->DeleteBroadcasters(rTopPos.Col(), rTopPos.Row(), rTopPos.Row()+nLength-1); + pTab->DeleteBroadcasters(rBlockPos, rTopPos.Col(), rTopPos.Row(), rTopPos.Row()+nLength-1); } bool ScDocument::TableExists( SCTAB nTab ) const diff --git a/sc/source/core/data/listenercontext.cxx b/sc/source/core/data/listenercontext.cxx index f53f1bcae771..1f4c995c25ea 100644 --- a/sc/source/core/data/listenercontext.cxx +++ b/sc/source/core/data/listenercontext.cxx @@ -17,12 +17,22 @@ namespace { class PurgeAction : public ColumnSpanSet::Action { ScDocument& mrDoc; + sc::ColumnBlockPosition maBlockPos; + public: PurgeAction(ScDocument& rDoc) : mrDoc(rDoc) {} + + virtual void startColumn(SCTAB nTab, SCCOL nCol) + { + mrDoc.InitColumnBlockPosition(maBlockPos, nTab, nCol); + } + virtual void execute(const ScAddress& rPos, SCROW nLength, bool bVal) { if (bVal) - mrDoc.DeleteBroadcasters(rPos, nLength); + { + mrDoc.DeleteBroadcasters(maBlockPos, rPos, nLength); + } }; }; @@ -60,7 +70,7 @@ void EndListeningContext::addEmptyBroadcasterPosition(SCTAB nTab, SCCOL nCol, SC void EndListeningContext::purgeEmptyBroadcasters() { PurgeAction aAction(mrDoc); - maSet.executeFromBottom(aAction); + maSet.executeFromTop(aAction); } } diff --git a/sc/source/core/data/table1.cxx b/sc/source/core/data/table1.cxx index d1654a6d6ffc..9c380c812754 100644 --- a/sc/source/core/data/table1.cxx +++ b/sc/source/core/data/table1.cxx @@ -2177,12 +2177,13 @@ SvtBroadcaster* ScTable::GetBroadcaster( SCCOL nCol, SCROW nRow ) return aCol[nCol].GetBroadcaster(nRow); } -void ScTable::DeleteBroadcasters( SCCOL nCol, SCROW nRow1, SCROW nRow2 ) +void ScTable::DeleteBroadcasters( + sc::ColumnBlockPosition& rBlockPos, SCCOL nCol, SCROW nRow1, SCROW nRow2 ) { if (!ValidCol(nCol)) return; - aCol[nCol].DeleteBroadcasters(nRow1, nRow2); + aCol[nCol].DeleteBroadcasters(rBlockPos, nRow1, nRow2); } const SvtBroadcaster* ScTable::GetBroadcaster( SCCOL nCol, SCROW nRow ) const |