[Libreoffice-commits] core.git: include/vcl sw/inc sw/source vcl/source
Jim Raykowski (via logerrit)
logerrit at kemper.freedesktop.org
Wed Oct 23 02:39:34 UTC 2019
include/vcl/treelist.hxx | 1 +
sw/inc/strings.hrc | 2 ++
sw/source/uibase/utlui/content.cxx | 16 ++++++++++++++++
vcl/source/treelist/svimpbox.cxx | 2 +-
vcl/source/treelist/treelist.cxx | 17 +++++++++++++++++
5 files changed, 37 insertions(+), 1 deletion(-)
New commits:
commit 3ed56f407235feb97ee2565a613e5f1d2bb2d925
Author: Jim Raykowski <raykowj at gmail..com>
AuthorDate: Thu Oct 17 19:09:18 2019 -0800
Commit: Jim Raykowski <raykowj at gmail.com>
CommitDate: Wed Oct 23 04:38:36 2019 +0200
tdf#128058 Add Expand Collapse All to Navigator context menu
Change-Id: I8c68865c8bc95a9ef6d1bea565e635e288f728e6
Reviewed-on: https://gerrit.libreoffice.org/81003
Reviewed-by: Heiko Tietze <heiko.tietze at documentfoundation.org>
Tested-by: Heiko Tietze <heiko.tietze at documentfoundation.org>
Tested-by: Jenkins
diff --git a/include/vcl/treelist.hxx b/include/vcl/treelist.hxx
index 2d8fc7b4379d..15931d79f9d6 100644
--- a/include/vcl/treelist.hxx
+++ b/include/vcl/treelist.hxx
@@ -288,6 +288,7 @@ public:
{ return pModel->IsEntryVisible(this,pEntry); }
bool IsExpanded( SvTreeListEntry* pEntry ) const;
+ bool IsAllExpanded( SvTreeListEntry* pEntry) const;
bool IsSelected( SvTreeListEntry* pEntry ) const;
void SetEntryFocus( SvTreeListEntry* pEntry, bool bFocus );
const SvViewDataEntry* GetViewData( const SvTreeListEntry* pEntry ) const;
diff --git a/sw/inc/strings.hrc b/sw/inc/strings.hrc
index e6355c4cbb3d..b77225641089 100644
--- a/sw/inc/strings.hrc
+++ b/sw/inc/strings.hrc
@@ -631,6 +631,8 @@
#define STR_OUTLINE_LEVEL NC_("STR_OUTLINE_LEVEL", "Outline Level")
#define STR_DRAGMODE NC_("STR_DRAGMODE", "Drag Mode")
#define STR_SEND_OUTLINE_TO_CLIPBOARD_ENTRY NC_("STR_SEND_OUTLINE_TO_CLIPBOARD_ENTRY", "Send Outline to Clipboard")
+#define STR_EXPANDALL NC_("STR_EXPANDALL", "Expand All")
+#define STR_COLLAPSEALL NC_("STR_COLLAPSEALL", "Collapse All")
#define STR_HYPERLINK NC_("STR_HYPERLINK", "Insert as Hyperlink")
#define STR_LINK_REGION NC_("STR_LINK_REGION", "Insert as Link")
#define STR_COPY_REGION NC_("STR_COPY_REGION", "Insert as Copy")
diff --git a/sw/source/uibase/utlui/content.cxx b/sw/source/uibase/utlui/content.cxx
index 7ee2789a4f9f..0381b2101281 100644
--- a/sw/source/uibase/utlui/content.cxx
+++ b/sw/source/uibase/utlui/content.cxx
@@ -1207,6 +1207,16 @@ sal_Int8 SwContentTree::ExecuteDrop( const ExecuteDropEvent& rEvt )
// Handler for Dragging and ContextMenu
+static void lcl_InsertExpandCollapseAllItem(SwContentTree* pContentTree, SvTreeListEntry* pEntry, PopupMenu* pPop)
+{
+ if(pEntry->HasChildren() || pEntry->HasChildrenOnDemand())
+ {
+ pPop->InsertSeparator();
+ pPop->InsertItem(800, pContentTree->IsAllExpanded(pEntry) ? SwResId(STR_COLLAPSEALL) : SwResId(STR_EXPANDALL));
+ pPop->SetAccelKey(800, vcl::KeyCode(KEY_MULTIPLY, false, true, false, false));
+ }
+}
+
VclPtr<PopupMenu> SwContentTree::CreateContextMenu()
{
auto pPop = VclPtr<PopupMenu>::Create();
@@ -1348,6 +1358,8 @@ VclPtr<PopupMenu> SwContentTree::CreateContextMenu()
pPop->SetPopupMenu(4, pSubPop4);
}
}
+ else if(ContentTypeId::OUTLINE == nContentType)
+ lcl_InsertExpandCollapseAllItem(this, pEntry, pPop);
}
else if( pEntry )
{
@@ -1355,6 +1367,7 @@ VclPtr<PopupMenu> SwContentTree::CreateContextMenu()
SwContentType* pType = static_cast<SwContentType*>(pEntry->GetUserData());
if(ContentTypeId::OUTLINE == pType->GetType())
{
+ lcl_InsertExpandCollapseAllItem(this, pEntry, pPop);
pPop->InsertSeparator();
pPop->InsertItem(700, m_aContextStrings[IDX_STR_SEND_OUTLINE_TO_CLIPBOARD_ENTRY]);
}
@@ -3291,6 +3304,9 @@ void SwContentTree::ExecuteContextMenuAction( sal_uInt16 nSelectedPopupEntry )
m_pActiveShell->GetView().GetViewFrame()->GetDispatcher()->Execute(FN_OUTLINE_TO_CLIPBOARD);
break;
}
+ case 800:
+ KeyInput(KeyEvent(0, KEY_MOD1|KEY_MULTIPLY));
+ break;
//Display
default:
if(nSelectedPopupEntry > 300 && nSelectedPopupEntry < 400)
diff --git a/vcl/source/treelist/svimpbox.cxx b/vcl/source/treelist/svimpbox.cxx
index a936c4a3f9e4..5a7308b8a3a3 100644
--- a/vcl/source/treelist/svimpbox.cxx
+++ b/vcl/source/treelist/svimpbox.cxx
@@ -2473,7 +2473,7 @@ bool SvImpLBox::KeyInput( const KeyEvent& rKEvt)
// otherwise ignore the key press
if( IsExpandable() )
{
- if (!m_pView->IsExpanded(m_pCursor))
+ if (!m_pView->IsAllExpanded(m_pCursor))
{
m_pView->Expand(m_pCursor);
ExpandAll();
diff --git a/vcl/source/treelist/treelist.cxx b/vcl/source/treelist/treelist.cxx
index 11a4221e5305..03c1d9d4e831 100644
--- a/vcl/source/treelist/treelist.cxx
+++ b/vcl/source/treelist/treelist.cxx
@@ -1352,6 +1352,23 @@ bool SvListView::IsExpanded( SvTreeListEntry* pEntry ) const
return itr->second->IsExpanded();
}
+bool SvListView::IsAllExpanded( SvTreeListEntry* pEntry ) const
+{
+ DBG_ASSERT(pEntry,"IsAllExpanded:No Entry");
+ if (!IsExpanded(pEntry))
+ return false;
+ const SvTreeListEntries& rChildren = pEntry->GetChildEntries();
+ for (auto& rChild : rChildren)
+ {
+ if (rChild->HasChildren() || rChild->HasChildrenOnDemand())
+ {
+ if (!IsAllExpanded(rChild.get()))
+ return false;
+ }
+ }
+ return true;
+}
+
bool SvListView::IsSelected( SvTreeListEntry* pEntry ) const
{
DBG_ASSERT(pEntry,"IsExpanded:No Entry");
More information about the Libreoffice-commits
mailing list