Blame SOURCES/0001-allow-slide-design-to-affect-multiple-standard-pages.patch

a9add1
From f7ed8b99b628625851fb28ec1a3dead710c8871c Mon Sep 17 00:00:00 2001
a9add1
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
a9add1
Date: Tue, 23 Jun 2015 16:54:52 +0100
a9add1
Subject: [PATCH] allow slide design to affect multiple standard pages
a9add1
a9add1
modify this minimally and select all standard pages
a9add1
selected in the slidesorted, unselect them afterwards
a9add1
and loop over the selected ones.
a9add1
a9add1
This looks like it could do with a rework to disentangle
a9add1
the master/standard pages stuff, but leave it as is in
a9add1
this commit
a9add1
a9add1
Change-Id: Ifd01fe21c91e5e6b07b2d8bba0d85facadc25998
a9add1
---
a9add1
 sd/source/ui/func/fuprlout.cxx | 94 +++++++++++++++++++++++++++++-------------
a9add1
 1 file changed, 66 insertions(+), 28 deletions(-)
a9add1
a9add1
diff --git a/sd/source/ui/func/fuprlout.cxx b/sd/source/ui/func/fuprlout.cxx
a9add1
index 6ce661f..f087ad9 100644
a9add1
--- a/sd/source/ui/func/fuprlout.cxx
a9add1
+++ b/sd/source/ui/func/fuprlout.cxx
a9add1
@@ -42,6 +42,7 @@
a9add1
 #include "strmname.h"
a9add1
 #include "app.hrc"
a9add1
 #include "DrawDocShell.hxx"
a9add1
+#include "SlideSorterViewShell.hxx"
a9add1
 #include "unprlout.hxx"
a9add1
 #include "unchss.hxx"
a9add1
 #include "unmovss.hxx"
a9add1
@@ -89,24 +90,6 @@ void FuPresentationLayout::DoExecute( SfxRequest& rReq )
a9add1
 
a9add1
     bool bError = false;
a9add1
 
a9add1
-    // determine the active page
a9add1
-    sal_uInt16 nSelectedPage = SDRPAGE_NOTFOUND;
a9add1
-    for (sal_uInt16 nPage = 0; nPage < mpDoc->GetSdPageCount(PK_STANDARD); nPage++)
a9add1
-    {
a9add1
-        if (mpDoc->GetSdPage(nPage, PK_STANDARD)->IsSelected())
a9add1
-        {
a9add1
-            nSelectedPage = nPage;
a9add1
-            break;
a9add1
-        }
a9add1
-    }
a9add1
-
a9add1
-    DBG_ASSERT(nSelectedPage != SDRPAGE_NOTFOUND, "no selected page");
a9add1
-    SdPage* pSelectedPage = mpDoc->GetSdPage(nSelectedPage, PK_STANDARD);
a9add1
-    OUString aOldLayoutName(pSelectedPage->GetLayoutName());
a9add1
-    sal_Int32 nPos = aOldLayoutName.indexOf(SD_LT_SEPARATOR);
a9add1
-    if (nPos != -1)
a9add1
-        aOldLayoutName = aOldLayoutName.copy(0, nPos);
a9add1
-
a9add1
     /* if we are on a master page, the changes apply for all pages and notes-
a9add1
        pages who are using the relevant layout */
a9add1
     bool bOnMaster = false;
a9add1
@@ -117,6 +100,51 @@ void FuPresentationLayout::DoExecute( SfxRequest& rReq )
a9add1
         if (eEditMode == EM_MASTERPAGE)
a9add1
             bOnMaster = true;
a9add1
     }
a9add1
+
a9add1
+    std::vector<SdPage*> aUnselect;
a9add1
+    if (!bOnMaster)
a9add1
+    {
a9add1
+        //We later rely on IsSelected, so transfer the selection here
a9add1
+        //into the document
a9add1
+        slidesorter::SlideSorterViewShell* pSlideSorterViewShell
a9add1
+            = slidesorter::SlideSorterViewShell::GetSlideSorter(mpViewShell->GetViewShellBase());
a9add1
+        if (pSlideSorterViewShell)
a9add1
+        {
a9add1
+            boost::shared_ptr<slidesorter::SlideSorterViewShell::PageSelection> xSelection(
a9add1
+                pSlideSorterViewShell->GetPageSelection());
a9add1
+            if (xSelection)
a9add1
+            {
a9add1
+                for (auto it = xSelection->begin(); it != xSelection->end(); ++it)
a9add1
+                {
a9add1
+                    SdPage *pPage = *it;
a9add1
+                    if (pPage->IsSelected() || pPage->GetPageKind() != PK_STANDARD)
a9add1
+                        continue;
a9add1
+                    mpDoc->SetSelected(pPage, true);
a9add1
+                    aUnselect.push_back(pPage);
a9add1
+                }
a9add1
+            }
a9add1
+        }
a9add1
+    }
a9add1
+
a9add1
+    std::vector<SdPage*> aSelectedPages;
a9add1
+    std::vector<sal_uInt16> aSelectedPageNums;
a9add1
+    // determine the active pages
a9add1
+    for (sal_uInt16 nPage = 0; nPage < mpDoc->GetSdPageCount(PK_STANDARD); nPage++)
a9add1
+    {
a9add1
+        SdPage* pPage = mpDoc->GetSdPage(nPage, PK_STANDARD);
a9add1
+        if (pPage->IsSelected())
a9add1
+        {
a9add1
+            aSelectedPages.push_back(pPage);
a9add1
+            aSelectedPageNums.push_back(nPage);
a9add1
+        }
a9add1
+    }
a9add1
+
a9add1
+    assert(!aSelectedPages.empty() && "no selected page");
a9add1
+    OUString aOldLayoutName(aSelectedPages.back()->GetLayoutName());
a9add1
+    sal_Int32 nPos = aOldLayoutName.indexOf(SD_LT_SEPARATOR);
a9add1
+    if (nPos != -1)
a9add1
+        aOldLayoutName = aOldLayoutName.copy(0, nPos);
a9add1
+
a9add1
     bool bMasterPage = bOnMaster;
a9add1
     bool bCheckMasters = false;
a9add1
 
a9add1
@@ -196,14 +224,15 @@ void FuPresentationLayout::DoExecute( SfxRequest& rReq )
a9add1
             OUString aLayoutName;
a9add1
             if( pTempDoc )
a9add1
                 aLayoutName = aFile.getToken(1, DOCUMENT_TOKEN);
a9add1
-
a9add1
-            mpDoc->SetMasterPage(nSelectedPage, aLayoutName, pTempDoc, bMasterPage, bCheckMasters);
a9add1
+            for (auto nSelectedPage : aSelectedPageNums)
a9add1
+                mpDoc->SetMasterPage(nSelectedPage, aLayoutName, pTempDoc, bMasterPage, bCheckMasters);
a9add1
             mpDoc->CloseBookmarkDoc();
a9add1
         }
a9add1
         else
a9add1
         {
a9add1
             // use master page with the layout name aFile from current Doc
a9add1
-            mpDoc->SetMasterPage(nSelectedPage, aFile, mpDoc, bMasterPage, bCheckMasters);
a9add1
+            for (auto nSelectedPage : aSelectedPageNums)
a9add1
+                mpDoc->SetMasterPage(nSelectedPage, aFile, mpDoc, bMasterPage, bCheckMasters);
a9add1
         }
a9add1
 
a9add1
         // remove blocking
a9add1
@@ -211,7 +240,7 @@ void FuPresentationLayout::DoExecute( SfxRequest& rReq )
a9add1
             static_cast<DrawView*>(mpView)->BlockPageOrderChangedHint(false);
a9add1
 
a9add1
         // if the master page was visible, show it again
a9add1
-        if (!bError && nSelectedPage != SDRPAGE_NOTFOUND)
a9add1
+        if (!bError)
a9add1
         {
a9add1
             if (bOnMaster)
a9add1
             {
a9add1
@@ -219,13 +248,16 @@ void FuPresentationLayout::DoExecute( SfxRequest& rReq )
a9add1
                 {
a9add1
                     ::sd::View* pView =
a9add1
                           static_cast<DrawViewShell*>(mpViewShell)->GetView();
a9add1
-                    sal_uInt16 nPgNum = pSelectedPage->TRG_GetMasterPage().GetPageNum();
a9add1
+                    for (auto pSelectedPage : aSelectedPages)
a9add1
+                    {
a9add1
+                        sal_uInt16 nPgNum = pSelectedPage->TRG_GetMasterPage().GetPageNum();
a9add1
 
a9add1
-                    if (static_cast<DrawViewShell*>(mpViewShell)->GetPageKind() == PK_NOTES)
a9add1
-                        nPgNum++;
a9add1
+                        if (static_cast<DrawViewShell*>(mpViewShell)->GetPageKind() == PK_NOTES)
a9add1
+                            nPgNum++;
a9add1
 
a9add1
-                    pView->HideSdrPage();
a9add1
-                    pView->ShowSdrPage(pView->GetModel()->GetMasterPage(nPgNum));
a9add1
+                        pView->HideSdrPage();
a9add1
+                        pView->ShowSdrPage(pView->GetModel()->GetMasterPage(nPgNum));
a9add1
+                    }
a9add1
                 }
a9add1
 
a9add1
                 // force update of TabBar
a9add1
@@ -233,10 +265,16 @@ void FuPresentationLayout::DoExecute( SfxRequest& rReq )
a9add1
             }
a9add1
             else
a9add1
             {
a9add1
-                pSelectedPage->SetAutoLayout(pSelectedPage->GetAutoLayout());
a9add1
+                for (auto pSelectedPage : aSelectedPages)
a9add1
+                    pSelectedPage->SetAutoLayout(pSelectedPage->GetAutoLayout());
a9add1
             }
a9add1
         }
a9add1
 
a9add1
+        //Undo transfer to document selection
a9add1
+        for (auto pPage : aUnselect)
a9add1
+            mpDoc->SetSelected(pPage, false);
a9add1
+
a9add1
+
a9add1
         // fake a mode change to repaint the page tab bar
a9add1
         if( mpViewShell && mpViewShell->ISA( DrawViewShell ) )
a9add1
         {
a9add1
-- 
a9add1
2.4.0
a9add1