diff options
author | Jim Raykowski <raykowj@gmail.com> | 2023-04-22 11:23:48 -0800 |
---|---|---|
committer | Jim Raykowski <raykowj@gmail.com> | 2023-04-25 19:50:06 +0200 |
commit | a8493ee3d7dac611286a75516f24dd6e451f9718 (patch) | |
tree | 9cbfc42a09acd5dd9f8423233c2fe646a415f16c /sd | |
parent | 4bc86f6477c3ed5f0e97b0a530acf7e102b613b3 (diff) |
tdf#154604 SdNavigator: Support listing in front-to-back z order
Enhancement patch to provide the option to list objects in front-to-
back or back-to-front z order
Change-Id: I2194cace08736d948002548887661314834cef89
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/150893
Tested-by: Jenkins
Reviewed-by: Jim Raykowski <raykowj@gmail.com>
Diffstat (limited to 'sd')
-rw-r--r-- | sd/source/ui/dlg/navigatr.cxx | 9 | ||||
-rw-r--r-- | sd/source/ui/dlg/sdtreelb.cxx | 12 | ||||
-rw-r--r-- | sd/source/ui/inc/sdtreelb.hxx | 13 | ||||
-rw-r--r-- | sd/uiconfig/simpress/ui/navigatorpanel.ui | 33 |
4 files changed, 64 insertions, 3 deletions
diff --git a/sd/source/ui/dlg/navigatr.cxx b/sd/source/ui/dlg/navigatr.cxx index ff0bc85d9b85..be0f5919afa9 100644 --- a/sd/source/ui/dlg/navigatr.cxx +++ b/sd/source/ui/dlg/navigatr.cxx @@ -309,6 +309,9 @@ IMPL_LINK(SdNavigatorWin, DropdownClickToolBoxHdl, const OUString&, rCommand, vo bool bAll = mxTlbObjects->GetShowAllShapes(); mxShapeMenu->set_active("named", !bAll); mxShapeMenu->set_active("all", bAll); + bool bOrderFrontToBack = mxTlbObjects->GetOrderFrontToBack(); + mxShapeMenu->set_active("fronttoback", bOrderFrontToBack); + mxShapeMenu->set_active("backtofront", !bOrderFrontToBack); } } @@ -501,13 +504,19 @@ IMPL_LINK(SdNavigatorWin, MenuSelectHdl, const OUString&, rIdent, void) IMPL_LINK( SdNavigatorWin, ShapeFilterCallback, const OUString&, rIdent, void ) { bool bShowAllShapes(mxTlbObjects->GetShowAllShapes()); + bool bOrderFrontToBack(mxTlbObjects->GetOrderFrontToBack()); if (rIdent == "named") bShowAllShapes = false; else if (rIdent == "all") bShowAllShapes = true; + else if (rIdent == "fronttoback") + bOrderFrontToBack = true; + else if (rIdent == "backtofront") + bOrderFrontToBack = false; else OSL_FAIL("SdNavigatorWin::ShapeFilterCallback called for unknown menu entry"); + mxTlbObjects->SetOrderFrontToBack(bOrderFrontToBack); mxTlbObjects->SetShowAllShapes(bShowAllShapes, true); // Remember the selection in the FrameView. diff --git a/sd/source/ui/dlg/sdtreelb.cxx b/sd/source/ui/dlg/sdtreelb.cxx index efb027c2119c..68e794c21d5d 100644 --- a/sd/source/ui/dlg/sdtreelb.cxx +++ b/sd/source/ui/dlg/sdtreelb.cxx @@ -182,6 +182,11 @@ void SdPageObjsTLV::SetShowAllShapes ( } } +void SdPageObjsTLV::SetOrderFrontToBack(const bool bOrderFrontToBack) +{ + m_bOrderFrontToBack = bOrderFrontToBack; +} + bool SdPageObjsTLV::IsEqualToShapeList(std::unique_ptr<weld::TreeIter>& rEntry, const SdrObjList& rList, std::u16string_view rListName) { @@ -416,6 +421,7 @@ bool SdPageObjsTLV::DoDrag() } m_xDropTargetHelper->SetDrawView(pViewShell->GetDrawView()); + m_xDropTargetHelper->SetOrderFrontToBack(m_bOrderFrontToBack); bIsInDrag = true; std::unique_ptr<weld::TreeIter> xEntry = m_xTreeView->make_iterator(); @@ -562,7 +568,7 @@ sal_Int8 SdPageObjsTLVDropTarget::ExecuteDrop( const ExecuteDropEvent& rEvt ) m_rTreeView.iter_previous_sibling(*xTarget); m_rTreeView.set_cursor(*xTarget); - // Remove and insert are required for moving objects in to and out of groups. + // Remove and insert are required for moving objects into and out of groups. // PutMarked... by itself would suffice if this wasn't allowed. // Remove the source object from source parent list and insert it in the target parent list. @@ -595,7 +601,8 @@ sal_Int8 SdPageObjsTLVDropTarget::ExecuteDrop( const ExecuteDropEvent& rEvt ) pList->NbcInsertObject(rSourceObject.get()); } - m_pSdrView->PutMarkedBehindObj(pTargetObject); + m_bOrderFrontToBack ? m_pSdrView->PutMarkedInFrontOfObj(pTargetObject) : + m_pSdrView->PutMarkedBehindObj(pTargetObject); } return DND_ACTION_NONE; @@ -710,6 +717,7 @@ SdPageObjsTLV::SdPageObjsTLV(std::unique_ptr<weld::TreeView> xTreeView) , m_pOwnMedium(nullptr) , m_bLinkableSelected(false) , m_bShowAllShapes(false) + , m_bOrderFrontToBack(false) , m_bShowAllPages(false) , m_bSelectionHandlerNavigates(false) , m_bNavigationGrabsFocus(true) diff --git a/sd/source/ui/inc/sdtreelb.hxx b/sd/source/ui/inc/sdtreelb.hxx index 07e79c566df9..38255a66e16f 100644 --- a/sd/source/ui/inc/sdtreelb.hxx +++ b/sd/source/ui/inc/sdtreelb.hxx @@ -56,6 +56,7 @@ class SdPageObjsTLVDropTarget final : public DropTargetHelper private: weld::TreeView& m_rTreeView; SdrView* m_pSdrView; + bool m_bOrderFrontToBack = false; virtual sal_Int8 AcceptDrop( const AcceptDropEvent& rEvt ) override; virtual sal_Int8 ExecuteDrop( const ExecuteDropEvent& rEvt ) override; @@ -64,6 +65,7 @@ public: SdPageObjsTLVDropTarget(weld::TreeView& rTreeView); void SetDrawView(SdrView* pSdrView) { m_pSdrView = pSdrView; } + void SetOrderFrontToBack(bool bSet) { m_bOrderFrontToBack = bSet; } }; class SD_DLLPUBLIC SdPageObjsTLV @@ -82,6 +84,7 @@ private: SfxMedium* m_pOwnMedium; bool m_bLinkableSelected; bool m_bShowAllShapes; + bool m_bOrderFrontToBack; /** This flag controls whether to show all pages. */ @@ -330,6 +333,9 @@ public: void SetShowAllShapes (const bool bShowAllShapes, const bool bFill); bool GetShowAllShapes() const { return m_bShowAllShapes; } + void SetOrderFrontToBack (const bool bOrderFrontToBack); + bool GetOrderFrontToBack() const { return m_bOrderFrontToBack; } + bool IsNavigationGrabsFocus() const { return m_bNavigationGrabsFocus; } bool IsEqualToDoc(const SdDrawDocument* pInDoc); /// Visits rList recursively and tries to advance rEntry accordingly. @@ -395,7 +401,12 @@ public: void InsertEntry(const weld::TreeIter* pParent, const OUString& rId, const OUString &rName, const OUString &rExpander, weld::TreeIter* pEntry = nullptr) { - m_xTreeView->insert(pParent, -1, &rName, &rId, nullptr, nullptr, false, m_xScratchIter.get()); + if (pParent) + m_xTreeView->insert(pParent, m_bOrderFrontToBack ? 0 : -1, &rName, &rId, nullptr, + nullptr, false, m_xScratchIter.get()); + else + // always append page/slide entry + m_xTreeView->insert(nullptr, -1, &rName, &rId, nullptr, nullptr, false, m_xScratchIter.get()); m_xTreeView->set_image(*m_xScratchIter, rExpander); if (pEntry) m_xTreeView->copy_iterator(*m_xScratchIter, *pEntry); diff --git a/sd/uiconfig/simpress/ui/navigatorpanel.ui b/sd/uiconfig/simpress/ui/navigatorpanel.ui index 08ddbfae2155..2994219b21b7 100644 --- a/sd/uiconfig/simpress/ui/navigatorpanel.ui +++ b/sd/uiconfig/simpress/ui/navigatorpanel.ui @@ -138,6 +138,7 @@ <child> <object class="GtkToolButton" id="first"> <property name="visible">True</property> + <property name="can-focus">False</property> <property name="tooltip-text" translatable="yes" context="navigatorpanel|first|tooltip_text">First Slide</property> <property name="icon-name">sd/res/nv03.png</property> <child internal-child="accessible"> @@ -154,6 +155,7 @@ <child> <object class="GtkToolButton" id="previous"> <property name="visible">True</property> + <property name="can-focus">False</property> <property name="tooltip-text" translatable="yes" context="navigatorpanel|previous|tooltip_text">Previous Slide</property> <property name="icon-name">sd/res/nv04.png</property> <child internal-child="accessible"> @@ -170,6 +172,7 @@ <child> <object class="GtkToolButton" id="next"> <property name="visible">True</property> + <property name="can-focus">False</property> <property name="tooltip-text" translatable="yes" context="navigatorpanel|next|tooltip_text">Next Slide</property> <property name="icon-name">sd/res/nv05.png</property> <child internal-child="accessible"> @@ -186,6 +189,7 @@ <child> <object class="GtkToolButton" id="last"> <property name="visible">True</property> + <property name="can-focus">False</property> <property name="tooltip-text" translatable="yes" context="navigatorpanel|last|tooltip_text">Last Slide</property> <property name="icon-name">sd/res/nv06.png</property> <child internal-child="accessible"> @@ -214,6 +218,7 @@ <child> <object class="GtkMenuToolButton" id="dragmode"> <property name="visible">True</property> + <property name="can-focus">False</property> <property name="tooltip-text" translatable="yes" context="navigatorpanel|dragmode|tooltip_text">Drag Mode</property> <property name="icon-name">sd/res/nv09.png</property> <child internal-child="accessible"> @@ -230,6 +235,7 @@ <child> <object class="GtkMenuToolButton" id="shapes"> <property name="visible">True</property> + <property name="can-focus">False</property> <property name="tooltip-text" translatable="yes" context="navigatorpanel|shapes|tooltip_text">Show Shapes</property> <property name="icon-name">sd/res/graphic.png</property> <child internal-child="accessible"> @@ -271,6 +277,7 @@ <property name="label" translatable="yes" context="navigatorpanel|STR_NAVIGATOR_SHOW_NAMED_SHAPES">Named shapes</property> <property name="use-underline">True</property> <property name="draw-as-radio">True</property> + <property name="group">all</property> </object> </child> <child> @@ -283,5 +290,31 @@ <property name="group">named</property> </object> </child> + <child> + <object class="GtkSeparatorMenuItem"> + <property name="visible">True</property> + <property name="can-focus">False</property> + </object> + </child> + <child> + <object class="GtkRadioMenuItem" id="fronttoback"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="navigatorpanel|STR_NAVIGATOR_FRONT_TO_BACK">Front to back</property> + <property name="use-underline">True</property> + <property name="draw-as-radio">True</property> + <property name="group">backtofront</property> + </object> + </child> + <child> + <object class="GtkRadioMenuItem" id="backtofront"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes" context="navigatorpanel|STR_NAVIGATOR_BACK_TO_FRONT">Back to front</property> + <property name="use-underline">True</property> + <property name="draw-as-radio">True</property> + <property name="group">fronttoback</property> + </object> + </child> </object> </interface> |