diff options
author | Andre Fischer <af@openoffice.org> | 2010-02-17 18:49:32 +0100 |
---|---|---|
committer | Andre Fischer <af@openoffice.org> | 2010-02-17 18:49:32 +0100 |
commit | b237fdf1e2fa89da26fb94839d3010b6a0091733 (patch) | |
tree | 68bb705e260d04d24d9b4309978c6d5ceb46612b | |
parent | e1f5c8ef3c5bb207946f23c3769f9cd6e536c362 (diff) |
renaissance1: #i107215# Added detection for changes of master pages.
-rw-r--r-- | sd/source/ui/slidesorter/controller/SlsListener.cxx | 46 | ||||
-rw-r--r-- | sd/source/ui/slidesorter/controller/SlsListener.hxx | 6 |
2 files changed, 42 insertions, 10 deletions
diff --git a/sd/source/ui/slidesorter/controller/SlsListener.cxx b/sd/source/ui/slidesorter/controller/SlsListener.cxx index 71e93fee500e..703d44a9533f 100644 --- a/sd/source/ui/slidesorter/controller/SlsListener.cxx +++ b/sd/source/ui/slidesorter/controller/SlsListener.cxx @@ -39,6 +39,7 @@ #include "controller/SlsPageSelector.hxx" #include "controller/SlsCurrentSlideManager.hxx" #include "model/SlideSorterModel.hxx" +#include "model/SlsPageEnumerationProvider.hxx" #include "view/SlideSorterView.hxx" #include "cache/SlsPageCache.hxx" #include "drawdoc.hxx" @@ -437,16 +438,8 @@ IMPL_LINK(Listener, EventMultiplexerCallback, ::sd::tools::EventMultiplexerEvent case tools::EventMultiplexerEvent::EID_SHAPE_CHANGED: case tools::EventMultiplexerEvent::EID_SHAPE_INSERTED: case tools::EventMultiplexerEvent::EID_SHAPE_REMOVED: - { - const SdrPage* pPage = static_cast<const SdrPage*>(pEvent->mpUserData); - if (pPage != NULL) - { - mrSlideSorter.GetView().GetPreviewCache()->InvalidatePreviewBitmap( - pPage, - true); - } - } - break; + HandleShapeModification(static_cast<const SdrPage*>(pEvent->mpUserData)); + break; default: break; @@ -629,6 +622,39 @@ void Listener::UpdateEditMode (void) +void Listener::HandleShapeModification (const SdrPage* pPage) +{ + if (pPage == NULL) + return; + + if (pPage->IsMasterPage()) + { + // Invalidate the bitmaps of all pages that are linked to + // this master page. + model::PageEnumeration aAllPages ( + model::PageEnumerationProvider::CreateAllPagesEnumeration( + mrSlideSorter.GetModel())); + while (aAllPages.HasMoreElements()) + { + model::SharedPageDescriptor pDescriptor (aAllPages.GetNextElement()); + SdrPage* pCandidate = pDescriptor->GetPage(); + if (pCandidate!=NULL && &pCandidate->TRG_GetMasterPage() == pPage) + mrSlideSorter.GetView().GetPreviewCache()->InvalidatePreviewBitmap( + pCandidate, + true); + } + } + else + { + mrSlideSorter.GetView().GetPreviewCache()->InvalidatePreviewBitmap( + pPage, + true); + } +} + + + + void Listener::ThrowIfDisposed (void) throw (::com::sun::star::lang::DisposedException) { diff --git a/sd/source/ui/slidesorter/controller/SlsListener.hxx b/sd/source/ui/slidesorter/controller/SlsListener.hxx index 6ace8ebdd370..072349e5d247 100644 --- a/sd/source/ui/slidesorter/controller/SlsListener.hxx +++ b/sd/source/ui/slidesorter/controller/SlsListener.hxx @@ -174,6 +174,12 @@ private: */ void UpdateEditMode (void); + /** Handle a modification to a shape on the given page. + When this is a regular page then update its preview. When it is a + master page then update the previews of all pages linked to it. + */ + void HandleShapeModification (const SdrPage* pPage); + /** This method throws a DisposedException when the object has already been disposed. */ |