From a3e2a4840cc34a3f151bb0ab224e5f69cd72cc4b Mon Sep 17 00:00:00 2001 From: jules Date: Thu, 3 Jan 2013 10:53:07 +0000 Subject: [PATCH] Introjucer: collapse/expand options in treeview. --- .../Source/Project/jucer_TreeViewTypes.cpp | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/extras/Introjucer/Source/Project/jucer_TreeViewTypes.cpp b/extras/Introjucer/Source/Project/jucer_TreeViewTypes.cpp index 65be2681aa..7ae1523e2d 100644 --- a/extras/Introjucer/Source/Project/jucer_TreeViewTypes.cpp +++ b/extras/Introjucer/Source/Project/jucer_TreeViewTypes.cpp @@ -81,14 +81,11 @@ void GroupTreeViewItem::checkFileStatus() ProjectTreeViewBase* GroupTreeViewItem::createSubItem (const Project::Item& child) { - if (child.isGroup()) - return new GroupTreeViewItem (child); - - if (child.isFile()) - return new SourceFileTreeViewItem (child); + if (child.isGroup()) return new GroupTreeViewItem (child); + if (child.isFile()) return new SourceFileTreeViewItem (child); jassertfalse - return 0; + return nullptr; } void GroupTreeViewItem::showDocument() @@ -101,6 +98,14 @@ void GroupTreeViewItem::showPopupMenu() { PopupMenu m; addCreateFileMenuItems (m); + + m.addSeparator(); + + if (isOpen()) + m.addItem (4, "Collapse all Sub-groups"); + else + m.addItem (5, "Expand all Sub-groups"); + m.addSeparator(); m.addItem (3, "Sort Contents Alphabetically"); m.addSeparator(); @@ -112,6 +117,15 @@ void GroupTreeViewItem::showPopupMenu() launchPopupMenu (m); } +static void openOrCloseAllSubGroups (TreeViewItem& item, bool shouldOpen) +{ + item.setOpen (shouldOpen); + + for (int i = item.getNumSubItems(); --i >= 0;) + if (TreeViewItem* sub = item.getSubItem(i)) + openOrCloseAllSubGroups (*sub, shouldOpen); +} + void GroupTreeViewItem::handlePopupMenuResult (int resultCode) { switch (resultCode) @@ -119,6 +133,8 @@ void GroupTreeViewItem::handlePopupMenuResult (int resultCode) case 1: triggerAsyncRename (item); break; case 2: deleteAllSelectedItems(); break; case 3: item.sortAlphabetically (false); break; + case 4: openOrCloseAllSubGroups (*this, false); break; + case 5: openOrCloseAllSubGroups (*this, true); break; default: processCreateFileMenuItem (resultCode); break; } }