summaryrefslogtreecommitdiff
path: root/sc/source/core/data/documen7.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sc/source/core/data/documen7.cxx')
-rw-r--r--sc/source/core/data/documen7.cxx89
1 files changed, 0 insertions, 89 deletions
diff --git a/sc/source/core/data/documen7.cxx b/sc/source/core/data/documen7.cxx
index 6fedfecc91e0..98e5321253a2 100644
--- a/sc/source/core/data/documen7.cxx
+++ b/sc/source/core/data/documen7.cxx
@@ -187,95 +187,6 @@ void ScDocument::BroadcastCells( const ScRange& rRange, SfxHintId nHint, bool bB
BroadcastUno(SfxHint(SfxHintId::ScDataChanged));
}
-namespace {
-
-class RefMovedNotifier
-{
- const sc::RefMovedHint& mrHint;
-public:
- explicit RefMovedNotifier( const sc::RefMovedHint& rHint ) : mrHint(rHint) {}
-
- void operator() ( SvtListener* p )
- {
- p->Notify(mrHint);
- }
-};
-
-}
-
-void ScDocument::BroadcastRefMoved( const sc::RefMovedHint& rHint )
-{
- if (!pBASM)
- // clipboard or undo document.
- return;
-
- const ScRange& rSrcRange = rHint.getRange(); // old range
- const ScAddress& rDelta = rHint.getDelta();
-
- // Get all area listeners that listens on the old range, and end their listening.
- std::vector<sc::AreaListener> aAreaListeners = pBASM->GetAllListeners(rSrcRange, sc::AreaInside);
- {
- for (auto& rAreaListener : aAreaListeners)
- {
- pBASM->EndListeningArea(rAreaListener.maArea, rAreaListener.mbGroupListening, rAreaListener.mpListener);
- rAreaListener.mpListener->Notify(rHint); // Adjust the references.
- }
- }
-
- // Collect all listeners listening into the range.
- std::vector<SvtListener*> aListeners;
- for (SCTAB nTab = rSrcRange.aStart.Tab(); nTab <= rSrcRange.aEnd.Tab(); ++nTab)
- {
- ScTable* pTab = FetchTable(nTab);
- if (!pTab)
- continue;
-
- pTab->CollectListeners(
- aListeners,
- rSrcRange.aStart.Col(), rSrcRange.aStart.Row(),
- rSrcRange.aEnd.Col(), rSrcRange.aEnd.Row());
- }
-
- // Remove any duplicate listener entries. We must ensure that we notify
- // each unique listener only once.
- std::sort(aListeners.begin(), aListeners.end());
- aListeners.erase(std::unique(aListeners.begin(), aListeners.end()), aListeners.end());
-
- // Notify the listeners.
- std::for_each(aListeners.begin(), aListeners.end(), RefMovedNotifier(rHint));
-
- for (SCTAB nTab = rSrcRange.aStart.Tab(); nTab <= rSrcRange.aEnd.Tab(); ++nTab)
- {
- ScTable* pTab = FetchTable(nTab);
- if (!pTab)
- continue;
-
- SCTAB nDestTab = nTab + rDelta.Tab();
- ScTable* pDestTab = FetchTable(nDestTab);
- if (!pDestTab)
- continue;
-
- // Move the listeners from the old location to the new.
- pTab->TransferListeners(
- *pDestTab, rSrcRange.aStart.Col(), rSrcRange.aStart.Row(),
- rSrcRange.aEnd.Col(), rSrcRange.aEnd.Row(), rDelta.Col(), rDelta.Row());
- }
-
- // Re-start area listeners on the new range.
- {
- ScRange aErrorRange( ScAddress::UNINITIALIZED );
- for (auto& rAreaListener : aAreaListeners)
- {
- ScRange aNewRange = rAreaListener.maArea;
- if (!aNewRange.Move(rDelta.Col(), rDelta.Row(), rDelta.Tab(), aErrorRange))
- {
- assert(!"can't move AreaListener");
- }
- pBASM->StartListeningArea(aNewRange, rAreaListener.mbGroupListening, rAreaListener.mpListener);
- }
- }
-}
-
void ScDocument::AreaBroadcast( const ScHint& rHint )
{
if ( !pBASM )