summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Fischer <af@openoffice.org>2010-02-17 18:49:32 +0100
committerAndre Fischer <af@openoffice.org>2010-02-17 18:49:32 +0100
commitb237fdf1e2fa89da26fb94839d3010b6a0091733 (patch)
tree68bb705e260d04d24d9b4309978c6d5ceb46612b
parente1f5c8ef3c5bb207946f23c3769f9cd6e536c362 (diff)
renaissance1: #i107215# Added detection for changes of master pages.
-rw-r--r--sd/source/ui/slidesorter/controller/SlsListener.cxx46
-rw-r--r--sd/source/ui/slidesorter/controller/SlsListener.hxx6
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.
*/