summaryrefslogtreecommitdiff
path: root/sd
diff options
context:
space:
mode:
authorJim Raykowski <raykowj@gmail.com>2023-04-22 11:23:48 -0800
committerJim Raykowski <raykowj@gmail.com>2023-04-25 19:50:06 +0200
commita8493ee3d7dac611286a75516f24dd6e451f9718 (patch)
tree9cbfc42a09acd5dd9f8423233c2fe646a415f16c /sd
parent4bc86f6477c3ed5f0e97b0a530acf7e102b613b3 (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.cxx9
-rw-r--r--sd/source/ui/dlg/sdtreelb.cxx12
-rw-r--r--sd/source/ui/inc/sdtreelb.hxx13
-rw-r--r--sd/uiconfig/simpress/ui/navigatorpanel.ui33
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>