Blame SOURCES/0001-implement-equalize-width-and-height-for-impress-draw.patch

f325b2
From bdd33fda337d37431e6bffb99fb90416884981c9 Mon Sep 17 00:00:00 2001
f325b2
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
f325b2
Date: Thu, 25 Jun 2015 10:33:06 +0100
f325b2
Subject: [PATCH] implement equalize width and height for impress/draw
f325b2
f325b2
Equalize width/height adjusts width/height of selected objects to the
f325b2
width/height of the last selected object.
f325b2
f325b2
Change-Id: I7c222a6591112cb674322d310ebd87f04a9198bd
f325b2
---
f325b2
 include/svx/svdedtv.hxx                            |  5 +++
f325b2
 include/svx/svdstr.hrc                             |  4 +-
f325b2
 include/svx/svxids.hrc                             |  2 +
f325b2
 .../org/openoffice/Office/UI/GenericCommands.xcu   | 10 +++++
f325b2
 sd/sdi/_drvwsh.sdi                                 | 10 +++++
f325b2
 sd/source/ui/view/drviews2.cxx                     | 13 ++++++
f325b2
 sd/source/ui/view/drviewsj.cxx                     | 16 ++++++--
f325b2
 sd/uiconfig/sdraw/menubar/menubar.xml              |  3 ++
f325b2
 svx/inc/globlmn_tmpl.hrc                           | 20 +++++++++
f325b2
 svx/sdi/svx.sdi                                    | 47 ++++++++++++++++++++++
f325b2
 svx/source/svdraw/svdedtv2.cxx                     | 38 +++++++++++++++++
f325b2
 svx/source/svdraw/svdstr.src                       |  8 ++++
f325b2
 12 files changed, 171 insertions(+), 5 deletions(-)
f325b2
f325b2
diff --git a/include/svx/svdedtv.hxx b/include/svx/svdedtv.hxx
f325b2
index cdc2308..b109e0c 100644
f325b2
--- a/include/svx/svdedtv.hxx
f325b2
+++ b/include/svx/svdedtv.hxx
f325b2
@@ -272,6 +272,11 @@ public:
f325b2
     // for distribution dialog function
f325b2
     void DistributeMarkedObjects();
f325b2
 
f325b2
+    // for setting either the width or height of all selected
f325b2
+    // objects to the width/height of the last selected object
f325b2
+    // of the selection
f325b2
+    void EqualizeMarkedObjects(bool bWidth);
f325b2
+
f325b2
     // Decompose marked polypolygon objects into polygons.
f325b2
     // Grouped objects are searched and decomposed, if all member objects are PathObjs.
f325b2
     // bMakeLines=TRUE:  all polygones are decomposed into single lines resp. bezier segments
f325b2
diff --git a/include/svx/svdstr.hrc b/include/svx/svdstr.hrc
f325b2
index 90ef697..36e8719 100644
f325b2
--- a/include/svx/svdstr.hrc
f325b2
+++ b/include/svx/svdstr.hrc
f325b2
@@ -241,7 +241,9 @@
f325b2
 #define STR_EditMergeSubstractPoly   (STR_EditBegin  + 55)
f325b2
 #define STR_EditMergeIntersectPoly   (STR_EditBegin  + 56)
f325b2
 #define STR_DistributeMarkedObjects  (STR_EditBegin  + 57)
f325b2
-#define STR_EditEnd                  (STR_DistributeMarkedObjects)
f325b2
+#define STR_EqualizeWidthMarkedObjects  (STR_EditBegin  + 58)
f325b2
+#define STR_EqualizeHeightMarkedObjects (STR_EditBegin  + 59)
f325b2
+#define STR_EditEnd                  (STR_EqualizeHeightMarkedObjects)
f325b2
 
f325b2
 #define STR_ExchangeBegin            (STR_EditEnd+1)
f325b2
 #define STR_ExchangePaste            (STR_ExchangeBegin +0)
f325b2
diff --git a/include/svx/svxids.hrc b/include/svx/svxids.hrc
f325b2
index 5b8efbc..67ee3da 100644
f325b2
--- a/include/svx/svxids.hrc
f325b2
+++ b/include/svx/svxids.hrc
f325b2
@@ -113,6 +113,8 @@
f325b2
 #define SID_POLY_INTERSECT                  (SID_SFX_START + 681)
f325b2
 #define SID_POLY_FORMEN                     (SID_SFX_START + 682)
f325b2
 #define SID_DISTRIBUTE_DLG                  (SID_SFX_START + 683)
f325b2
+#define SID_EQUALIZEWIDTH                   (SID_SFX_START + 684)
f325b2
+#define SID_EQUALIZEHEIGHT                  (SID_SFX_START + 685)
f325b2
 
f325b2
 // Basic IDE-Id's
f325b2
 
f325b2
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
f325b2
index 1c679bd..d221d56 100644
f325b2
--- a/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
f325b2
+++ b/officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
f325b2
@@ -3472,6 +3472,16 @@
f325b2
           <value xml:lang="en-US">~Subtract</value>
f325b2
         </prop>
f325b2
       </node>
f325b2
+      <node oor:name=".uno:EqualizeWidth" oor:op="replace">
f325b2
+        <prop oor:name="Label" oor:type="xs:string">
f325b2
+          <value xml:lang="en-US">Equalize ~Width</value>
f325b2
+        </prop>
f325b2
+      </node>
f325b2
+      <node oor:name=".uno:EqualizeHeight" oor:op="replace">
f325b2
+        <prop oor:name="Label" oor:type="xs:string">
f325b2
+          <value xml:lang="en-US">Equalize ~Height</value>
f325b2
+        </prop>
f325b2
+      </node>
f325b2
       <node oor:name=".uno:SuperScript" oor:op="replace">
f325b2
         <prop oor:name="Label" oor:type="xs:string">
f325b2
           <value xml:lang="en-US">Superscript</value>
f325b2
diff --git a/sd/sdi/_drvwsh.sdi b/sd/sdi/_drvwsh.sdi
f325b2
index 0b5469bf..6b2f17c 100644
f325b2
--- a/sd/sdi/_drvwsh.sdi
f325b2
+++ b/sd/sdi/_drvwsh.sdi
f325b2
@@ -507,6 +507,16 @@ interface DrawView
f325b2
         ExecMethod = FuTemporary ;
f325b2
         StateMethod = GetMenuState ;
f325b2
     ]
f325b2
+    SID_EQUALIZEWIDTH // ole : no, status : ?
f325b2
+    [
f325b2
+        ExecMethod = FuTemporary ;
f325b2
+        StateMethod = GetMenuState ;
f325b2
+    ]
f325b2
+    SID_EQUALIZEHEIGHT // ole : no, status : ?
f325b2
+    [
f325b2
+        ExecMethod = FuTemporary ;
f325b2
+        StateMethod = GetMenuState ;
f325b2
+    ]
f325b2
     SID_CONNECT // ole : no, status : ?
f325b2
     [
f325b2
         ExecMethod = FuTemporary ;
f325b2
diff --git a/sd/source/ui/view/drviews2.cxx b/sd/source/ui/view/drviews2.cxx
f325b2
index ffbb503..90c3d59 100644
f325b2
--- a/sd/source/ui/view/drviews2.cxx
f325b2
+++ b/sd/source/ui/view/drviews2.cxx
f325b2
@@ -2272,6 +2272,19 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
f325b2
         }
f325b2
         break;
f325b2
 
f325b2
+        case SID_EQUALIZEWIDTH:
f325b2
+        case SID_EQUALIZEHEIGHT:
f325b2
+        {
f325b2
+            // End text edit to avoid conflicts
f325b2
+            if(mpDrawView->IsTextEdit())
f325b2
+                mpDrawView->SdrEndTextEdit();
f325b2
+
f325b2
+            mpDrawView->EqualizeMarkedObjects(nSId == SID_EQUALIZEWIDTH);
f325b2
+            Cancel();
f325b2
+            rReq.Done ();
f325b2
+        }
f325b2
+        break;
f325b2
+
f325b2
         case SID_DISMANTLE:  // BASIC
f325b2
         {
f325b2
             if ( mpDrawView->IsDismantlePossible(false) )
f325b2
diff --git a/sd/source/ui/view/drviewsj.cxx b/sd/source/ui/view/drviewsj.cxx
f325b2
index 857601f..10a3f5a 100644
f325b2
--- a/sd/source/ui/view/drviewsj.cxx
f325b2
+++ b/sd/source/ui/view/drviewsj.cxx
f325b2
@@ -284,13 +284,15 @@ void DrawViewShell::GetMenuStateSel( SfxItemSet &rSet )
f325b2
             rSet.Put(SfxBoolItem(SID_OUTLINE_TEXT_AUTOFIT, bSet));
f325b2
         }
f325b2
 
f325b2
-        rSet.DisableItem( SID_GROUP );
f325b2
-        rSet.DisableItem( SID_COMBINE );
f325b2
+        rSet.DisableItem(SID_GROUP);
f325b2
+        rSet.DisableItem(SID_COMBINE);
f325b2
         rSet.DisableItem(SID_DISTRIBUTE_DLG);
f325b2
         rSet.DisableItem(SID_POLY_MERGE);
f325b2
         rSet.DisableItem(SID_POLY_SUBSTRACT);
f325b2
         rSet.DisableItem(SID_POLY_INTERSECT);
f325b2
-        rSet.DisableItem( SID_CONNECT );
f325b2
+        rSet.DisableItem(SID_EQUALIZEWIDTH);
f325b2
+        rSet.DisableItem(SID_EQUALIZEHEIGHT);
f325b2
+        rSet.DisableItem(SID_CONNECT);
f325b2
     }
f325b2
     // multi-selection
f325b2
     else if( nMarkCount > 1 )
f325b2
@@ -377,6 +379,8 @@ void DrawViewShell::GetMenuStateSel( SfxItemSet &rSet )
f325b2
                 rSet.DisableItem(SID_POLY_MERGE);
f325b2
                 rSet.DisableItem(SID_POLY_SUBSTRACT);
f325b2
                 rSet.DisableItem(SID_POLY_INTERSECT);
f325b2
+                rSet.DisableItem(SID_EQUALIZEWIDTH);
f325b2
+                rSet.DisableItem(SID_EQUALIZEHEIGHT);
f325b2
             }
f325b2
 
f325b2
             if (b3dObj                                        ||
f325b2
@@ -438,10 +442,12 @@ void DrawViewShell::GetMenuStateSel( SfxItemSet &rSet )
f325b2
         }
f325b2
         if ( !mpDrawView->IsCombinePossible(false) )
f325b2
         {
f325b2
-            rSet.DisableItem( SID_COMBINE );
f325b2
+            rSet.DisableItem(SID_COMBINE);
f325b2
             rSet.DisableItem(SID_POLY_MERGE);
f325b2
             rSet.DisableItem(SID_POLY_SUBSTRACT);
f325b2
             rSet.DisableItem(SID_POLY_INTERSECT);
f325b2
+            rSet.DisableItem(SID_EQUALIZEWIDTH);
f325b2
+            rSet.DisableItem(SID_EQUALIZEHEIGHT);
f325b2
         }
f325b2
         if ( !mpDrawView->IsCombinePossible(true) )
f325b2
         {
f325b2
@@ -501,6 +507,8 @@ void DrawViewShell::GetMenuStateSel( SfxItemSet &rSet )
f325b2
         rSet.DisableItem(SID_POLY_MERGE);
f325b2
         rSet.DisableItem(SID_POLY_SUBSTRACT);
f325b2
         rSet.DisableItem(SID_POLY_INTERSECT);
f325b2
+        rSet.DisableItem(SID_EQUALIZEWIDTH);
f325b2
+        rSet.DisableItem(SID_EQUALIZEHEIGHT);
f325b2
         rSet.DisableItem( SID_CONNECT );
f325b2
         rSet.DisableItem( SID_ANIMATION_EFFECTS );
f325b2
         rSet.DisableItem( SID_MODIFY_FIELD );
f325b2
diff --git a/sd/uiconfig/sdraw/menubar/menubar.xml b/sd/uiconfig/sdraw/menubar/menubar.xml
f325b2
index f12287b..bc8cfee 100644
f325b2
--- a/sd/uiconfig/sdraw/menubar/menubar.xml
f325b2
+++ b/sd/uiconfig/sdraw/menubar/menubar.xml
f325b2
@@ -346,6 +346,9 @@
f325b2
           <menu:menuitem menu:id=".uno:Merge"/>
f325b2
           <menu:menuitem menu:id=".uno:Substract"/>
f325b2
           <menu:menuitem menu:id=".uno:Intersect"/>
f325b2
+          <menu:menuseparator/>
f325b2
+          <menu:menuitem menu:id=".uno:EqualizeWidth"/>
f325b2
+          <menu:menuitem menu:id=".uno:EqualizeHeight"/>
f325b2
         </menu:menupopup>
f325b2
       </menu:menu>
f325b2
       <menu:menuseparator/>
f325b2
diff --git a/svx/inc/globlmn_tmpl.hrc b/svx/inc/globlmn_tmpl.hrc
f325b2
index 9d511c8..8d82489 100644
f325b2
--- a/svx/inc/globlmn_tmpl.hrc
f325b2
+++ b/svx/inc/globlmn_tmpl.hrc
f325b2
@@ -306,6 +306,20 @@
f325b2
         Command = ".uno:Intersect" ; \
f325b2
         Text [ en-US ] = "I~ntersect" ; \
f325b2
             };
f325b2
+#define ITEM_EQUALIZEWIDTH \
f325b2
+    MenuItem\
f325b2
+    {\
f325b2
+        Identifier = SID_EQUALIZEWIDTH ; \
f325b2
+        Command = ".uno:EqualizeWidth" ; \
f325b2
+        Text [ en-US ] = "Equalize ~Width" ; \
f325b2
+            };
f325b2
+#define ITEM_EQUALIZEHEIGHT \
f325b2
+    MenuItem\
f325b2
+    {\
f325b2
+        Identifier = SID_EQUALIZEHEIGHT ; \
f325b2
+        Command = ".uno:EqualizeHeight" ; \
f325b2
+        Text [ en-US ] = "Equalize ~Height" ; \
f325b2
+            };
f325b2
 
f325b2
 #define MNSUB_FORMEN \
f325b2
     MenuItem \
f325b2
@@ -320,6 +334,12 @@
f325b2
                 ITEM_POLY_MERGE \
f325b2
                 ITEM_POLY_SUBSTRACT \
f325b2
                 ITEM_POLY_INTERSECT \
f325b2
+                MenuItem \
f325b2
+                { \
f325b2
+                    Separator = TRUE; \
f325b2
+                }; \
f325b2
+                ITEM_EQUALIZEWIDTH \
f325b2
+                ITEM_EQUALIZEHEIGHT \
f325b2
             };\
f325b2
         };\
f325b2
     };
f325b2
diff --git a/svx/sdi/svx.sdi b/svx/sdi/svx.sdi
f325b2
index 941f3e8..b301c58 100644
f325b2
--- a/svx/sdi/svx.sdi
f325b2
+++ b/svx/sdi/svx.sdi
f325b2
@@ -11100,6 +11100,53 @@ SfxVoidItem Substract SID_POLY_SUBSTRACT
f325b2
     GroupId = GID_MODIFY;
f325b2
 ]
f325b2
 
f325b2
+SfxVoidItem EqualizeWidth SID_EQUALIZEWIDTH
f325b2
+()
f325b2
+[
f325b2
+    /* flags: */
f325b2
+    AutoUpdate = FALSE,
f325b2
+    Cachable = Cachable,
f325b2
+    FastCall = FALSE,
f325b2
+    HasCoreId = FALSE,
f325b2
+    HasDialog = FALSE,
f325b2
+    ReadOnlyDoc = FALSE,
f325b2
+    Toggle = FALSE,
f325b2
+    Container = FALSE,
f325b2
+    RecordAbsolute = FALSE,
f325b2
+    RecordPerSet;
f325b2
+    Synchron;
f325b2
+
f325b2
+    /* config: */
f325b2
+    AccelConfig = TRUE,
f325b2
+    MenuConfig = TRUE,
f325b2
+    StatusBarConfig = FALSE,
f325b2
+    ToolBoxConfig = TRUE,
f325b2
+    GroupId = GID_MODIFY;
f325b2
+]
f325b2
+
f325b2
+SfxVoidItem EqualizeHeight SID_EQUALIZEHEIGHT
f325b2
+()
f325b2
+[
f325b2
+    /* flags: */
f325b2
+    AutoUpdate = FALSE,
f325b2
+    Cachable = Cachable,
f325b2
+    FastCall = FALSE,
f325b2
+    HasCoreId = FALSE,
f325b2
+    HasDialog = FALSE,
f325b2
+    ReadOnlyDoc = FALSE,
f325b2
+    Toggle = FALSE,
f325b2
+    Container = FALSE,
f325b2
+    RecordAbsolute = FALSE,
f325b2
+    RecordPerSet;
f325b2
+    Synchron;
f325b2
+
f325b2
+    /* config: */
f325b2
+    AccelConfig = TRUE,
f325b2
+    MenuConfig = TRUE,
f325b2
+    StatusBarConfig = FALSE,
f325b2
+    ToolBoxConfig = TRUE,
f325b2
+    GroupId = GID_MODIFY;
f325b2
+]
f325b2
 
f325b2
 SfxBoolItem SuperScript SID_SET_SUPER_SCRIPT
f325b2
 
f325b2
diff --git a/svx/source/svdraw/svdedtv2.cxx b/svx/source/svdraw/svdedtv2.cxx
f325b2
index 0a60082..ad7dd3f 100644
f325b2
--- a/svx/source/svdraw/svdedtv2.cxx
f325b2
+++ b/svx/source/svdraw/svdedtv2.cxx
f325b2
@@ -1173,6 +1173,44 @@ void SdrEditView::MergeMarkedObjects(SdrMergeMode eMode)
f325b2
     }
f325b2
 }
f325b2
 
f325b2
+void SdrEditView::EqualizeMarkedObjects(bool bWidth)
f325b2
+{
f325b2
+    const SdrMarkList& rMarkList = GetMarkedObjectList();
f325b2
+    size_t nMarked = rMarkList.GetMarkCount();
f325b2
+
f325b2
+    if (nMarked < 2)
f325b2
+        return;
f325b2
+
f325b2
+    SdrObject* pLastSelectedObj = rMarkList.GetMark(nMarked-1)->GetMarkedSdrObj();
f325b2
+    Size aLastRectSize(pLastSelectedObj->GetLogicRect().GetSize());
f325b2
+
f325b2
+    const bool bUndo = IsUndoEnabled();
f325b2
+
f325b2
+    if (bUndo)
f325b2
+        BegUndo();
f325b2
+
f325b2
+    for (size_t a = 0; a < nMarked-1; ++a)
f325b2
+    {
f325b2
+        SdrMark* pM = rMarkList.GetMark(a);
f325b2
+        SdrObject* pObj = pM->GetMarkedSdrObj();
f325b2
+        Rectangle aLogicRect(pObj->GetLogicRect());
f325b2
+        Size aLogicRectSize(aLogicRect.GetSize());
f325b2
+        if (bWidth)
f325b2
+            aLogicRectSize.Width() = aLastRectSize.Width();
f325b2
+        else
f325b2
+            aLogicRectSize.Height() = aLastRectSize.Height();
f325b2
+        aLogicRect.SetSize(aLogicRectSize);
f325b2
+        pObj->SetLogicRect(aLogicRect);
f325b2
+    }
f325b2
+
f325b2
+    SetUndoComment(
f325b2
+        ImpGetResStr(bWidth ? STR_EqualizeWidthMarkedObjects : STR_EqualizeHeightMarkedObjects),
f325b2
+        rMarkList.GetMarkDescription());
f325b2
+
f325b2
+    if (bUndo)
f325b2
+        EndUndo();
f325b2
+}
f325b2
+
f325b2
 void SdrEditView::CombineMarkedObjects(bool bNoPolyPoly)
f325b2
 {
f325b2
     // #105899# Start of Combine-Undo put to front, else ConvertMarkedToPolyObj would
f325b2
diff --git a/svx/source/svdraw/svdstr.src b/svx/source/svdraw/svdstr.src
f325b2
index 364749a..6dc4420 100644
f325b2
--- a/svx/source/svdraw/svdstr.src
f325b2
+++ b/svx/source/svdraw/svdstr.src
f325b2
@@ -823,6 +823,14 @@ String STR_DistributeMarkedObjects
f325b2
 {
f325b2
     Text [ en-US ] = "Distribute selected objects";
f325b2
 };
f325b2
+String STR_EqualizeWidthMarkedObjects
f325b2
+{
f325b2
+    Text [ en-US ] = "Equalize Width %1";
f325b2
+};
f325b2
+String STR_EqualizeHeightMarkedObjects
f325b2
+{
f325b2
+    Text [ en-US ] = "Equalize Height %1";
f325b2
+};
f325b2
 String STR_EditCombine_OnePoly
f325b2
 {
f325b2
     Text [ en-US ] = "Combine %1" ;
f325b2
-- 
f325b2
2.4.0
f325b2