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

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