diff --git a/extras/Introjucer/Source/Application/jucer_Application.h b/extras/Introjucer/Source/Application/jucer_Application.h index e2941689b2..e9307aa038 100644 --- a/extras/Introjucer/Source/Application/jucer_Application.h +++ b/extras/Introjucer/Source/Application/jucer_Application.h @@ -277,6 +277,8 @@ public: { menu.addCommandItem (commandManager, CommandIDs::showFilePanel); menu.addCommandItem (commandManager, CommandIDs::showConfigPanel); + menu.addCommandItem (commandManager, CommandIDs::showProjectSettings); + menu.addCommandItem (commandManager, CommandIDs::showProjectModules); menu.addSeparator(); createColourSchemeItems (menu); } diff --git a/extras/Introjucer/Source/Application/jucer_CommandIDs.h b/extras/Introjucer/Source/Application/jucer_CommandIDs.h index 61fd1561de..ec0ebc9b99 100644 --- a/extras/Introjucer/Source/Application/jucer_CommandIDs.h +++ b/extras/Introjucer/Source/Application/jucer_CommandIDs.h @@ -47,6 +47,8 @@ namespace CommandIDs showConfigPanel = 0x200074, showFilePanel = 0x200078, showTranslationTool = 0x200079, + showProjectSettings = 0x20007a, + showProjectModules = 0x20007b, closeWindow = 0x201001, closeAllDocuments = 0x201000, diff --git a/extras/Introjucer/Source/Project/jucer_ConfigPage.cpp b/extras/Introjucer/Source/Project/jucer_ConfigPage.cpp index 91a610f9e3..cee38428c6 100644 --- a/extras/Introjucer/Source/Project/jucer_ConfigPage.cpp +++ b/extras/Introjucer/Source/Project/jucer_ConfigPage.cpp @@ -62,19 +62,19 @@ namespace ProjectSettingsTreeClasses configTree.addListener (this); } - bool isMissing() { return false; } - bool canBeSelected() const { return true; } - bool mightContainSubItems() { return false; } - String getUniqueName() const { return "config_" + config->getName(); } - String getRenamingName() const { return getDisplayName(); } - String getDisplayName() const { return config->getName(); } - void setName (const String&) {} - Icon getIcon() const { return Icon (getIcons().config, getContrastingColour (Colours::green, 0.5f)); } + bool isMissing() override { return false; } + bool canBeSelected() const override { return true; } + bool mightContainSubItems() override { return false; } + String getUniqueName() const override { return "config_" + config->getName(); } + String getRenamingName() const override { return getDisplayName(); } + String getDisplayName() const override { return config->getName(); } + void setName (const String&) override {} + Icon getIcon() const override { return Icon (getIcons().config, getContrastingColour (Colours::green, 0.5f)); } - void showDocument() { showSettingsPage (new SettingsComp (config, exporterName)); } - void itemOpennessChanged (bool) {} + void showDocument() override { showSettingsPage (new SettingsComp (config, exporterName)); } + void itemOpennessChanged (bool) override {} - void deleteItem() + void deleteItem() override { if (AlertWindow::showOkCancelBox (AlertWindow::WarningIcon, "Delete Configuration", "Are you sure you want to delete this configuration?")) @@ -84,7 +84,7 @@ namespace ProjectSettingsTreeClasses } } - void showPopupMenu() + void showPopupMenu() override { PopupMenu menu; menu.addItem (1, "Create a copy of this configuration"); @@ -94,7 +94,7 @@ namespace ProjectSettingsTreeClasses launchPopupMenu (menu); } - void handlePopupMenuResult (int resultCode) + void handlePopupMenuResult (int resultCode) override { if (resultCode == 2) { @@ -140,7 +140,7 @@ namespace ProjectSettingsTreeClasses parentSizeChanged(); } - void parentSizeChanged() { updateSize (*this, group); } + void parentSizeChanged() override { updateSize (*this, group); } private: PropertyGroup group; @@ -163,15 +163,15 @@ namespace ProjectSettingsTreeClasses jassert (exporter != nullptr); } - bool canBeSelected() const { return true; } - bool mightContainSubItems() { return exporter->getNumConfigurations() > 0; } - String getUniqueName() const { return "exporter_" + String (exporterIndex); } - String getRenamingName() const { return getDisplayName(); } - String getDisplayName() const { return exporter->getName(); } - void setName (const String&) {} - bool isMissing() { return false; } - Icon getIcon() const { return Icon (getIcons().exporter, getContrastingColour (0.5f)); } - void showDocument() { showSettingsPage (new SettingsComp (exporter)); } + bool canBeSelected() const override { return true; } + bool mightContainSubItems() override { return exporter->getNumConfigurations() > 0; } + String getUniqueName() const override { return "exporter_" + String (exporterIndex); } + String getRenamingName() const override { return getDisplayName(); } + String getDisplayName() const override { return exporter->getName(); } + void setName (const String&) override {} + bool isMissing() override { return false; } + Icon getIcon() const override { return Icon (getIcons().exporter, getContrastingColour (0.5f)); } + void showDocument() override { showSettingsPage (new SettingsComp (exporter)); } void deleteItem() { @@ -237,9 +237,9 @@ namespace ProjectSettingsTreeClasses } //============================================================================== - void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) { refreshIfNeeded (parentTree); } - void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&) { refreshIfNeeded (parentTree); } - void valueTreeChildOrderChanged (ValueTree& parentTree) { refreshIfNeeded (parentTree); } + void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); } + void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); } + void valueTreeChildOrderChanged (ValueTree& parentTree) override { refreshIfNeeded (parentTree); } void refreshIfNeeded (ValueTree& changedTree) { @@ -268,7 +268,7 @@ namespace ProjectSettingsTreeClasses parentSizeChanged(); } - void parentSizeChanged() { updateSize (*this, group); } + void parentSizeChanged() override { updateSize (*this, group); } private: PropertyGroup group; @@ -285,15 +285,16 @@ namespace ProjectSettingsTreeClasses public: ModulesItem (Project& p) : project (p) {} - bool canBeSelected() const { return true; } - bool mightContainSubItems() { return false; } - String getUniqueName() const { return "modules"; } - String getRenamingName() const { return getDisplayName(); } - String getDisplayName() const { return "Modules"; } - void setName (const String&) {} - bool isMissing() { return false; } - Icon getIcon() const { return Icon (getIcons().graph, getContrastingColour (Colours::red, 0.5f)); } - void showDocument() { showSettingsPage (new SettingsComp (project)); } + bool isModulesList() const override { return true; } + bool canBeSelected() const override { return true; } + bool mightContainSubItems() override { return false; } + String getUniqueName() const override { return "modules"; } + String getRenamingName() const override { return getDisplayName(); } + String getDisplayName() const override { return "Modules"; } + void setName (const String&) override {} + bool isMissing() override { return false; } + Icon getIcon() const override { return Icon (getIcons().graph, getContrastingColour (Colours::red, 0.5f)); } + void showDocument() override { showSettingsPage (new SettingsComp (project)); } private: Project& project; @@ -314,7 +315,7 @@ namespace ProjectSettingsTreeClasses parentSizeChanged(); } - void parentSizeChanged() + void parentSizeChanged() override { updateSize (*this, group); } @@ -340,17 +341,18 @@ namespace ProjectSettingsTreeClasses exportersTree.addListener (this); } - String getRenamingName() const { return getDisplayName(); } - String getDisplayName() const { return project.getTitle(); } - void setName (const String&) {} - bool isMissing() { return false; } - Icon getIcon() const { return project.getMainGroup().getIcon().withContrastingColourTo (getBackgroundColour()); } - void showDocument() { showSettingsPage (new SettingsComp (project)); } - bool canBeSelected() const { return true; } - bool mightContainSubItems() { return project.getNumExporters() > 0; } - String getUniqueName() const { return "config_root"; } + bool isProjectSettings() const override { return true; } + String getRenamingName() const override { return getDisplayName(); } + String getDisplayName() const override { return project.getTitle(); } + void setName (const String&) override {} + bool isMissing() override { return false; } + Icon getIcon() const override { return project.getMainGroup().getIcon().withContrastingColourTo (getBackgroundColour()); } + void showDocument() override { showSettingsPage (new SettingsComp (project)); } + bool canBeSelected() const override { return true; } + bool mightContainSubItems() override { return project.getNumExporters() > 0; } + String getUniqueName() const override { return "config_root"; } - void addSubItems() + void addSubItems() override { addSubItem (new ModulesItem (project)); IntrojucerApp::getApp().addExtraConfigItems (project, *this); @@ -360,7 +362,7 @@ namespace ProjectSettingsTreeClasses addSubItem (new ExporterItem (project, exporter.exporter.release(), i)); } - void showPopupMenu() + void showPopupMenu() override { PopupMenu menu; @@ -372,7 +374,7 @@ namespace ProjectSettingsTreeClasses launchPopupMenu (menu); } - void handlePopupMenuResult (int resultCode) + void handlePopupMenuResult (int resultCode) override { if (resultCode > 0) { @@ -383,21 +385,21 @@ namespace ProjectSettingsTreeClasses } } - bool isInterestedInDragSource (const DragAndDropTarget::SourceDetails& dragSourceDetails) + bool isInterestedInDragSource (const DragAndDropTarget::SourceDetails& dragSourceDetails) override { return dragSourceDetails.description.toString().startsWith (getUniqueName()); } - void itemDropped (const DragAndDropTarget::SourceDetails& dragSourceDetails, int insertIndex) + void itemDropped (const DragAndDropTarget::SourceDetails& dragSourceDetails, int insertIndex) override { int oldIndex = dragSourceDetails.description.toString().getTrailingIntValue(); exportersTree.moveChild (oldIndex, jmax (0, insertIndex - 1), project.getUndoManagerFor (exportersTree)); } //============================================================================== - void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) { refreshIfNeeded (parentTree); } - void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&) { refreshIfNeeded (parentTree); } - void valueTreeChildOrderChanged (ValueTree& parentTree) { refreshIfNeeded (parentTree); } + void valueTreeChildAdded (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); } + void valueTreeChildRemoved (ValueTree& parentTree, ValueTree&) override { refreshIfNeeded (parentTree); } + void valueTreeChildOrderChanged (ValueTree& parentTree) override { refreshIfNeeded (parentTree); } void refreshIfNeeded (ValueTree& changedTree) { @@ -427,7 +429,7 @@ namespace ProjectSettingsTreeClasses project.removeChangeListener (this); } - void parentSizeChanged() + void parentSizeChanged() override { updateSize (*this, group); } @@ -443,7 +445,7 @@ namespace ProjectSettingsTreeClasses parentSizeChanged(); } - void changeListenerCallback (ChangeBroadcaster*) + void changeListenerCallback (ChangeBroadcaster*) override { if (lastProjectType != project.getProjectTypeValue().getValue()) updatePropertyList(); diff --git a/extras/Introjucer/Source/Project/jucer_ConfigPage.h b/extras/Introjucer/Source/Project/jucer_ConfigPage.h index 110b2a9066..8a8f172abf 100644 --- a/extras/Introjucer/Source/Project/jucer_ConfigPage.h +++ b/extras/Introjucer/Source/Project/jucer_ConfigPage.h @@ -142,6 +142,9 @@ public: void valueTreeChildOrderChanged (ValueTree&) override {} void valueTreeParentChanged (ValueTree&) override {} + virtual bool isProjectSettings() const { return false; } + virtual bool isModulesList() const { return false; } + static void updateSize (Component& comp, PropertyGroup& group) { const int width = jmax (550, comp.getParentWidth() - 20); diff --git a/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp b/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp index 3274231a9e..8c4a95a2d0 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp +++ b/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.cpp @@ -493,6 +493,38 @@ void ProjectContentComponent::closeProject() mw->closeCurrentProject(); } +void ProjectContentComponent::showFilesTab() +{ + treeViewTabs.setCurrentTabIndex (0); +} + +void ProjectContentComponent::showConfigTab() +{ + treeViewTabs.setCurrentTabIndex (1); +} + +void ProjectContentComponent::showProjectSettings() +{ + showConfigTab(); + + if (TreePanelBase* const tree = dynamic_cast (treeViewTabs.getCurrentContentComponent())) + if (SettingsTreeViewItemBase* root = dynamic_cast (tree->rootItem.get())) + if (root->isProjectSettings()) + root->setSelected (true, true); +} + +void ProjectContentComponent::showModules() +{ + showConfigTab(); + + if (TreePanelBase* const tree = dynamic_cast (treeViewTabs.getCurrentContentComponent())) + if (SettingsTreeViewItemBase* root = dynamic_cast (tree->rootItem.get())) + if (root->isProjectSettings()) + if (SettingsTreeViewItemBase* mods = dynamic_cast (root->getSubItem (0))) + if (mods->isModulesList()) + mods->setSelected (true, true); +} + StringArray ProjectContentComponent::getExportersWhichCanLaunch() const { StringArray s; @@ -620,6 +652,8 @@ void ProjectContentComponent::getAllCommands (Array & commands) CommandIDs::saveAndOpenInIDE, CommandIDs::showFilePanel, CommandIDs::showConfigPanel, + CommandIDs::showProjectSettings, + CommandIDs::showProjectModules, CommandIDs::goToPreviousDoc, CommandIDs::goToNextDoc, CommandIDs::goToCounterpart, @@ -742,6 +776,22 @@ void ProjectContentComponent::getCommandInfo (const CommandID commandID, Applica result.defaultKeypresses.add (KeyPress ('i', ModifierKeys::commandModifier, 0)); break; + case CommandIDs::showProjectSettings: + result.setInfo ("Show Project Settings", + "Shows the main project options page", + CommandCategories::general, 0); + result.setActive (project != nullptr); + result.defaultKeypresses.add (KeyPress ('i', ModifierKeys::commandModifier | ModifierKeys::shiftModifier, 0)); + break; + + case CommandIDs::showProjectModules: + result.setInfo ("Show Project Modules", + "Shows the project's list of modules", + CommandCategories::general, 0); + result.setActive (project != nullptr); + result.defaultKeypresses.add (KeyPress ('m', ModifierKeys::commandModifier | ModifierKeys::shiftModifier, 0)); + break; + case CommandIDs::deleteSelectedItem: result.setInfo ("Delete Selected File", String::empty, CommandCategories::general, 0); result.defaultKeypresses.add (KeyPress (KeyPress::deleteKey, 0, 0)); @@ -795,8 +845,10 @@ bool ProjectContentComponent::perform (const InvocationInfo& info) case CommandIDs::goToNextDoc: goToNextFile(); break; case CommandIDs::goToCounterpart: goToCounterpart(); break; - case CommandIDs::showFilePanel: treeViewTabs.setCurrentTabIndex (0); break; - case CommandIDs::showConfigPanel: treeViewTabs.setCurrentTabIndex (1); break; + case CommandIDs::showFilePanel: showFilesTab(); break; + case CommandIDs::showConfigPanel: showConfigTab(); break; + case CommandIDs::showProjectSettings: showProjectSettings(); break; + case CommandIDs::showProjectModules: showModules(); break; case CommandIDs::openInIDE: openInIDE(); break; diff --git a/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h b/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h index 6edbf6c2b4..58f9c20165 100644 --- a/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h +++ b/extras/Introjucer/Source/Project/jucer_ProjectContentComponent.h @@ -73,6 +73,11 @@ public: void openInIDE(); void openInIDE (const String& exporterName); + void showFilesTab(); + void showConfigTab(); + void showProjectSettings(); + void showModules(); + void deleteSelectedTreeItems(); void updateMainWindowTitle(); @@ -82,7 +87,7 @@ public: virtual void deleteProjectTabs(); void rebuildProjectTabs(); - void showBubbleMessage (const Rectangle& pos, const String& text); + void showBubbleMessage (const Rectangle&, const String&); StringArray getExportersWhichCanLaunch() const;