diff --git a/extras/Introjucer/Source/Application/jucer_Application.h b/extras/Introjucer/Source/Application/jucer_Application.h index ff6fb2df2c..4111597a99 100644 --- a/extras/Introjucer/Source/Application/jucer_Application.h +++ b/extras/Introjucer/Source/Application/jucer_Application.h @@ -33,6 +33,7 @@ #include "../Code Editor/jucer_SourceCodeEditor.h" void createGUIEditorMenu (PopupMenu&); +void handleGUIEditorMenuCommand (int); void registerGUIEditorCommands(); //============================================================================== @@ -326,6 +327,10 @@ public: { settings->appearance.selectPresetScheme (menuItemID - colourSchemeBaseID); } + else + { + handleGUIEditorMenuCommand (menuItemID); + } } //============================================================================== diff --git a/extras/Introjucer/Source/ComponentEditor/ui/jucer_JucerDocumentEditor.cpp b/extras/Introjucer/Source/ComponentEditor/ui/jucer_JucerDocumentEditor.cpp index 0bd4755d2c..cf7584a9da 100644 --- a/extras/Introjucer/Source/ComponentEditor/ui/jucer_JucerDocumentEditor.cpp +++ b/extras/Introjucer/Source/ComponentEditor/ui/jucer_JucerDocumentEditor.cpp @@ -1099,6 +1099,9 @@ Image JucerDocumentEditor::createComponentLayerSnapshot() const return Image(); } +const int gridSnapMenuItemBase = 0x8723620; +const int snapSizes[] = { 2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 24, 32 }; + void createGUIEditorMenu (PopupMenu& menu) { menu.addCommandItem (commandManager, JucerCommandIDs::editCompLayout); @@ -1140,12 +1143,12 @@ void createGUIEditorMenu (PopupMenu& menu) JucerDocumentEditor* holder = JucerDocumentEditor::getActiveDocumentHolder(); { - const int snapSizes[] = { 2, 3, 4, 5, 6, 8, 10, 12, 16, 20, 24, 32 }; const int currentSnapSize = holder != nullptr ? holder->getDocument()->getSnappingGridSize() : -1; PopupMenu m; for (int i = 0; i < numElementsInArray (snapSizes); ++i) - m.addItem (300 + i, String (snapSizes[i]) + " pixels", true, snapSizes[i] == currentSnapSize); + m.addItem (gridSnapMenuItemBase + i, String (snapSizes[i]) + " pixels", + true, snapSizes[i] == currentSnapSize); menu.addSubMenu ("Grid size", m, currentSnapSize >= 0); } @@ -1168,6 +1171,23 @@ void createGUIEditorMenu (PopupMenu& menu) } } +void handleGUIEditorMenuCommand (int menuItemID) +{ + if (JucerDocumentEditor* ed = JucerDocumentEditor::getActiveDocumentHolder()) + { + int gridIndex = menuItemID - gridSnapMenuItemBase; + + if (isPositiveAndBelow (gridIndex, numElementsInArray (snapSizes))) + { + JucerDocument& doc = *ed->getDocument(); + + doc.setSnappingGrid (snapSizes [gridIndex], + doc.isSnapActive (false), + doc.isSnapShown()); + } + } +} + void registerGUIEditorCommands() { JucerDocumentEditor dh (nullptr); diff --git a/extras/Introjucer/Source/Project/jucer_TreeViewTypes.cpp b/extras/Introjucer/Source/Project/jucer_TreeViewTypes.cpp index 5a25d9c82f..70b43564d1 100644 --- a/extras/Introjucer/Source/Project/jucer_TreeViewTypes.cpp +++ b/extras/Introjucer/Source/Project/jucer_TreeViewTypes.cpp @@ -32,8 +32,8 @@ #include "jucer_ProjectContentComponent.h" //============================================================================== -GroupTreeViewItem::GroupTreeViewItem (const Project::Item& item_) - : ProjectTreeViewBase (item_) +GroupTreeViewItem::GroupTreeViewItem (const Project::Item& i) + : ProjectTreeViewBase (i) { } @@ -94,33 +94,6 @@ void GroupTreeViewItem::showDocument() pcc->setEditorComponent (new GroupInformationComponent (item), nullptr); } -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 (6, "Enable compiling of all enclosed files"); - m.addItem (7, "Disable compiling of all enclosed files"); - - m.addSeparator(); - m.addItem (3, "Sort Contents Alphabetically"); - m.addSeparator(); - m.addItem (1, "Rename..."); - - if (! isRoot()) - m.addItem (2, "Delete"); - - launchPopupMenu (m); -} - static void openOrCloseAllSubGroups (TreeViewItem& item, bool shouldOpen) { item.setOpen (shouldOpen); @@ -139,17 +112,46 @@ static void setFilesToCompile (Project::Item item, const bool shouldCompile) setFilesToCompile (item.getChild (i), shouldCompile); } +void GroupTreeViewItem::showPopupMenu() +{ + PopupMenu m; + addCreateFileMenuItems (m); + + m.addSeparator(); + + if (isOpen()) + m.addItem (1, "Collapse all Sub-groups"); + else + m.addItem (2, "Expand all Sub-groups"); + + m.addSeparator(); + m.addItem (3, "Enable compiling of all enclosed files"); + m.addItem (4, "Disable compiling of all enclosed files"); + + m.addSeparator(); + m.addItem (5, "Sort Items Alphabetically"); + m.addItem (6, "Sort Items Alphabetically (Groups first)"); + m.addSeparator(); + m.addItem (7, "Rename..."); + + if (! isRoot()) + m.addItem (8, "Delete"); + + launchPopupMenu (m); +} + void GroupTreeViewItem::handlePopupMenuResult (int resultCode) { switch (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; - case 6: setFilesToCompile (item, true); break; - case 7: setFilesToCompile (item, false); break; + case 1: openOrCloseAllSubGroups (*this, false); break; + case 2: openOrCloseAllSubGroups (*this, true); break; + case 3: setFilesToCompile (item, true); break; + case 4: setFilesToCompile (item, false); break; + case 5: item.sortAlphabetically (false); break; + case 6: item.sortAlphabetically (true); break; + case 7: triggerAsyncRename (item); break; + case 8: deleteAllSelectedItems(); break; default: processCreateFileMenuItem (resultCode); break; } }