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