Blame SOURCES/0001-implement-toggling-off-removeable-master-elements-wi.patch

ebc4bd
From ff0eba6c1cbf4a5816c5b9b48d4e29778f0e0869 Mon Sep 17 00:00:00 2001
ebc4bd
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
ebc4bd
Date: Thu, 6 Nov 2014 14:59:49 +0000
ebc4bd
Subject: [PATCH] implement toggling off removeable master elements with direct
ebc4bd
 delete
ebc4bd
ebc4bd
i.e. selecting footers/headers/slidenumber/datetime previes placeholders in
ebc4bd
master page view and pressing delete will toggle those master elements off.
ebc4bd
ebc4bd
Change-Id: I91f745703e43cbb4fdd037da4eab7c8f6bf9fbf5
ebc4bd
(cherry picked from commit e36dae401fc8963c9a92cb2c11d9b650b943c6d3)
ebc4bd
---
ebc4bd
 sd/inc/sdpage.hxx                    |  1 +
ebc4bd
 sd/source/core/sdpage.cxx            | 19 +++++++++
ebc4bd
 sd/source/ui/dlg/masterlayoutdlg.cxx | 19 ++-------
ebc4bd
 sd/source/ui/inc/DrawViewShell.hxx   |  1 +
ebc4bd
 sd/source/ui/view/drviewse.cxx       | 74 ++++++++++++++++++++++++++++--------
ebc4bd
 5 files changed, 83 insertions(+), 31 deletions(-)
ebc4bd
ebc4bd
diff --git a/sd/inc/sdpage.hxx b/sd/inc/sdpage.hxx
ebc4bd
index 4cce906..0d3b138 100644
ebc4bd
--- a/sd/inc/sdpage.hxx
ebc4bd
+++ b/sd/inc/sdpage.hxx
ebc4bd
@@ -176,6 +176,7 @@ public:
ebc4bd
     void EnsureMasterPageDefaultBackground();
ebc4bd
     SdrObject*      CreatePresObj(PresObjKind eObjKind, bool bVertical, const Rectangle& rRect, bool bInsert=false);
ebc4bd
     SdrObject*      CreateDefaultPresObj(PresObjKind eObjKind, bool bInsert);
ebc4bd
+    void            DestroyDefaultPresObj(PresObjKind eObjKind);
ebc4bd
     SdrObject*      GetPresObj(PresObjKind eObjKind, int nIndex = 1, bool bFuzzySearch = false );
ebc4bd
     PresObjKind     GetPresObjKind(SdrObject* pObj) const;
ebc4bd
     OUString        GetPresObjText(PresObjKind eObjKind) const;
ebc4bd
diff --git a/sd/source/core/sdpage.cxx b/sd/source/core/sdpage.cxx
ebc4bd
index 477ea48..fccd7cf 100644
ebc4bd
--- a/sd/source/core/sdpage.cxx
ebc4bd
+++ b/sd/source/core/sdpage.cxx
ebc4bd
@@ -1018,6 +1018,25 @@ SdrObject* SdPage::CreateDefaultPresObj(PresObjKind eObjKind, bool bInsert)
ebc4bd
     }
ebc4bd
 }
ebc4bd
 
ebc4bd
+void SdPage::DestroyDefaultPresObj(PresObjKind eObjKind)
ebc4bd
+{
ebc4bd
+    SdrObject* pObject = GetPresObj( eObjKind );
ebc4bd
+
ebc4bd
+    if( pObject )
ebc4bd
+    {
ebc4bd
+        SdDrawDocument *pDoc = static_cast<SdDrawDocument*>(pModel);
ebc4bd
+
ebc4bd
+        const bool bUndo = pDoc->IsUndoEnabled();
ebc4bd
+        if( bUndo )
ebc4bd
+            pDoc->AddUndo(pDoc->GetSdrUndoFactory().CreateUndoDeleteObject(*pObject));
ebc4bd
+        SdrObjList* pOL = pObject->GetObjList();
ebc4bd
+        pOL->RemoveObject(pObject->GetOrdNumDirect());
ebc4bd
+
ebc4bd
+        if( !bUndo )
ebc4bd
+            SdrObject::Free(pObject);
ebc4bd
+    }
ebc4bd
+}
ebc4bd
+
ebc4bd
 /*************************************************************************
ebc4bd
 |*
ebc4bd
 |* return title area
ebc4bd
diff --git a/sd/source/ui/dlg/masterlayoutdlg.cxx b/sd/source/ui/dlg/masterlayoutdlg.cxx
ebc4bd
index 21aa64b..acfd28a 100644
ebc4bd
--- a/sd/source/ui/dlg/masterlayoutdlg.cxx
ebc4bd
+++ b/sd/source/ui/dlg/masterlayoutdlg.cxx
ebc4bd
@@ -121,27 +121,14 @@ void MasterLayoutDialog::applyChanges()
ebc4bd
     mpDoc->EndUndo();
ebc4bd
 }
ebc4bd
 
ebc4bd
-void MasterLayoutDialog::create( PresObjKind eKind )
ebc4bd
+void MasterLayoutDialog::create(PresObjKind eKind)
ebc4bd
 {
ebc4bd
-    mpCurrentPage->CreateDefaultPresObj( eKind, true );
ebc4bd
+    mpCurrentPage->CreateDefaultPresObj(eKind, true);
ebc4bd
 }
ebc4bd
 
ebc4bd
 void MasterLayoutDialog::remove( PresObjKind eKind )
ebc4bd
 {
ebc4bd
-    SdrObject* pObject = mpCurrentPage->GetPresObj( eKind );
ebc4bd
-
ebc4bd
-    if( pObject )
ebc4bd
-    {
ebc4bd
-        const bool bUndo = mpDoc->IsUndoEnabled();
ebc4bd
-        if( bUndo )
ebc4bd
-            mpDoc->AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoDeleteObject(*pObject));
ebc4bd
-        SdrObjList* pOL =pObject->GetObjList();
ebc4bd
-        sal_uInt32 nOrdNum=pObject->GetOrdNumDirect();
ebc4bd
-        pOL->RemoveObject(nOrdNum);
ebc4bd
-
ebc4bd
-        if( !bUndo )
ebc4bd
-            SdrObject::Free(pObject);
ebc4bd
-    }
ebc4bd
+    mpCurrentPage->DestroyDefaultPresObj(eKind);
ebc4bd
 }
ebc4bd
 
ebc4bd
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
ebc4bd
diff --git a/sd/source/ui/inc/DrawViewShell.hxx b/sd/source/ui/inc/DrawViewShell.hxx
ebc4bd
index 96c5c9c..a6f5a13 100644
ebc4bd
--- a/sd/source/ui/inc/DrawViewShell.hxx
ebc4bd
+++ b/sd/source/ui/inc/DrawViewShell.hxx
ebc4bd
@@ -216,6 +216,7 @@ public:
ebc4bd
     void            FuTemporary(SfxRequest& rReq);
ebc4bd
     void            FuPermanent(SfxRequest& rReq);
ebc4bd
     void            FuSupport(SfxRequest& rReq);
ebc4bd
+    void            FuDeleteSelectedObjects();
ebc4bd
     void            FuSupportRotate(SfxRequest& rReq);
ebc4bd
     void            FuTable(SfxRequest& rReq);
ebc4bd
 
ebc4bd
diff --git a/sd/source/ui/view/drviewse.cxx b/sd/source/ui/view/drviewse.cxx
ebc4bd
index cd643b0..6e7cb8d 100644
ebc4bd
--- a/sd/source/ui/view/drviewse.cxx
ebc4bd
+++ b/sd/source/ui/view/drviewse.cxx
ebc4bd
@@ -625,6 +625,64 @@ void DrawViewShell::FuPermanent(SfxRequest& rReq)
ebc4bd
     }
ebc4bd
 }
ebc4bd
 
ebc4bd
+void DrawViewShell::FuDeleteSelectedObjects()
ebc4bd
+{
ebc4bd
+    bool bConsumed = false;
ebc4bd
+
ebc4bd
+    //if any placeholders are selected
ebc4bd
+    if (mpDrawView->IsPresObjSelected(false, true, false, false))
ebc4bd
+    {
ebc4bd
+        //If there are placeholders in the list which can be toggled
ebc4bd
+        //off in edit->master->master elements then do that here,
ebc4bd
+        std::vector<SdrObject*> aPresMarksToRemove;
ebc4bd
+        const SdrMarkList& rMarkList = mpDrawView->GetMarkedObjectList();
ebc4bd
+        for (size_t i=0; i < rMarkList.GetMarkCount(); ++i)
ebc4bd
+        {
ebc4bd
+            SdrObject* pObj = rMarkList.GetMark(i)->GetMarkedSdrObj();
ebc4bd
+            SdPage* pPage = (SdPage*)pObj->GetPage();
ebc4bd
+            PresObjKind eKind = pPage->GetPresObjKind(pObj);
ebc4bd
+            if (eKind == PRESOBJ_FOOTER || eKind == PRESOBJ_HEADER ||
ebc4bd
+                eKind == PRESOBJ_DATETIME || eKind == PRESOBJ_SLIDENUMBER)
ebc4bd
+            {
ebc4bd
+                aPresMarksToRemove.push_back(pObj);
ebc4bd
+            }
ebc4bd
+        }
ebc4bd
+
ebc4bd
+        for (std::vector<SdrObject*>::iterator aI = aPresMarksToRemove.begin(); aI < aPresMarksToRemove.end(); ++aI)
ebc4bd
+        {
ebc4bd
+            //Unmark object
ebc4bd
+            mpDrawView->MarkObj((*aI), mpDrawView->GetSdrPageView(), true);
ebc4bd
+            SdPage* pPage = (SdPage*)(*aI)->GetPage();
ebc4bd
+            //remove placeholder from master page
ebc4bd
+            pPage->DestroyDefaultPresObj(pPage->GetPresObjKind((*aI)));
ebc4bd
+        }
ebc4bd
+
ebc4bd
+        bConsumed = true;
ebc4bd
+    }
ebc4bd
+
ebc4bd
+    // placeholders which cannot be deleted selected
ebc4bd
+    if (mpDrawView->IsPresObjSelected(false, true, false, true))
ebc4bd
+    {
ebc4bd
+        ::sd::Window* pWindow = GetActiveWindow();
ebc4bd
+        InfoBox(pWindow, SD_RESSTR(STR_ACTION_NOTPOSSIBLE) ).Execute();
ebc4bd
+        bConsumed = true;
ebc4bd
+    }
ebc4bd
+
ebc4bd
+    if (!bConsumed)
ebc4bd
+    {
ebc4bd
+        KeyCode aKCode(KEY_DELETE);
ebc4bd
+        KeyEvent aKEvt( 0, aKCode);
ebc4bd
+
ebc4bd
+        bConsumed = mpDrawView && mpDrawView->getSmartTags().KeyInput( aKEvt );
ebc4bd
+
ebc4bd
+        if( !bConsumed && HasCurrentFunction() )
ebc4bd
+            bConsumed = GetCurrentFunction()->KeyInput(aKEvt);
ebc4bd
+
ebc4bd
+        if( !bConsumed && mpDrawView )
ebc4bd
+            mpDrawView->DeleteMarked();
ebc4bd
+    }
ebc4bd
+}
ebc4bd
+
ebc4bd
 void DrawViewShell::FuSupport(SfxRequest& rReq)
ebc4bd
 {
ebc4bd
     if( rReq.GetSlot() == SID_STYLE_FAMILY && rReq.GetArgs())
ebc4bd
@@ -873,23 +931,9 @@ void DrawViewShell::FuSupport(SfxRequest& rReq)
ebc4bd
                     pOLV->PostKeyEvent(aKEvt);
ebc4bd
                 }
ebc4bd
             }
ebc4bd
-            else if ( mpDrawView->IsPresObjSelected(false, true, false, true) )
ebc4bd
-            {
ebc4bd
-                ::sd::Window* pWindow = GetActiveWindow();
ebc4bd
-                InfoBox(pWindow, SD_RESSTR(STR_ACTION_NOTPOSSIBLE) ).Execute();
ebc4bd
-            }
ebc4bd
             else
ebc4bd
             {
ebc4bd
-                KeyCode aKCode(KEY_DELETE);
ebc4bd
-                KeyEvent aKEvt( 0, aKCode);
ebc4bd
-
ebc4bd
-                bool bConsumed = mpDrawView && mpDrawView->getSmartTags().KeyInput( aKEvt );
ebc4bd
-
ebc4bd
-                if( !bConsumed && HasCurrentFunction() )
ebc4bd
-                    bConsumed = GetCurrentFunction()->KeyInput(aKEvt);
ebc4bd
-
ebc4bd
-                if( !bConsumed && mpDrawView )
ebc4bd
-                    mpDrawView->DeleteMarked();
ebc4bd
+                FuDeleteSelectedObjects();
ebc4bd
             }
ebc4bd
             rReq.Ignore ();
ebc4bd
         }
ebc4bd
-- 
ebc4bd
1.9.3
ebc4bd