| @@ -547,18 +547,23 @@ public: | |||||
| project.deleteExporter (name.getTrailingIntValue()); | project.deleteExporter (name.getTrailingIntValue()); | ||||
| } | } | ||||
| static void newExporterMenuItemChosen (int resultCode, ProjectSettingsComponent* settingsComp) | |||||
| { | |||||
| if (resultCode > 0 && settingsComp != nullptr) | |||||
| settingsComp->project.addNewExporter (ProjectExporter::getExporterNames() [resultCode - 1]); | |||||
| } | |||||
| void createNewExporter (TextButton& button) | void createNewExporter (TextButton& button) | ||||
| { | { | ||||
| StringArray exporters (ProjectExporter::getExporterNames()); | |||||
| PopupMenu menu; | PopupMenu menu; | ||||
| const StringArray exporters (ProjectExporter::getExporterNames()); | |||||
| for (int i = 0; i < exporters.size(); ++i) | for (int i = 0; i < exporters.size(); ++i) | ||||
| menu.addItem (i + 1, "Create a new " + exporters[i] + " target"); | menu.addItem (i + 1, "Create a new " + exporters[i] + " target"); | ||||
| const int r = menu.showAt (&button); | |||||
| if (r > 0) | |||||
| project.addNewExporter (exporters [r - 1]); | |||||
| menu.showMenuAsync (PopupMenu::Options().withTargetComponent (&button), | |||||
| ModalCallbackFunction::forComponent (newExporterMenuItemChosen, this)); | |||||
| } | } | ||||
| void createNewConfig() | void createNewConfig() | ||||
| @@ -436,18 +436,39 @@ void ProjectTreeViewBase::refreshSubItems() | |||||
| addSubItems(); | addSubItems(); | ||||
| } | } | ||||
| void ProjectTreeViewBase::showMultiSelectionPopupMenu() | |||||
| static void treeViewMultiSelectItemChosen (int resultCode, ProjectTreeViewBase* item) | |||||
| { | { | ||||
| PopupMenu m; | |||||
| m.addItem (6, "Delete"); | |||||
| switch (m.show()) | |||||
| switch (resultCode) | |||||
| { | { | ||||
| case 6: deleteAllSelectedItems(); break; | |||||
| case 1: item->deleteAllSelectedItems(); break; | |||||
| default: break; | default: break; | ||||
| } | } | ||||
| } | } | ||||
| void ProjectTreeViewBase::showMultiSelectionPopupMenu() | |||||
| { | |||||
| PopupMenu m; | |||||
| m.addItem (1, "Delete"); | |||||
| m.showMenuAsync (PopupMenu::Options(), | |||||
| ModalCallbackFunction::create (treeViewMultiSelectItemChosen, this)); | |||||
| } | |||||
| static void treeViewMenuItemChosen (int resultCode, ProjectTreeViewBase* item) | |||||
| { | |||||
| item->handlePopupMenuResult (resultCode); | |||||
| } | |||||
| void ProjectTreeViewBase::launchPopupMenu (PopupMenu& m) | |||||
| { | |||||
| m.showMenuAsync (PopupMenu::Options(), | |||||
| ModalCallbackFunction::create (treeViewMenuItemChosen, this)); | |||||
| } | |||||
| void ProjectTreeViewBase::handlePopupMenuResult (int) | |||||
| { | |||||
| } | |||||
| void ProjectTreeViewBase::itemDoubleClicked (const MouseEvent& e) | void ProjectTreeViewBase::itemDoubleClicked (const MouseEvent& e) | ||||
| { | { | ||||
| invokeShowDocument(); | invokeShowDocument(); | ||||
| @@ -65,6 +65,9 @@ public: | |||||
| virtual void addFiles (const StringArray& files, int insertIndex); | virtual void addFiles (const StringArray& files, int insertIndex); | ||||
| virtual void moveSelectedItemsTo (OwnedArray <Project::Item>& selectedNodes, int insertIndex); | virtual void moveSelectedItemsTo (OwnedArray <Project::Item>& selectedNodes, int insertIndex); | ||||
| virtual void showMultiSelectionPopupMenu(); | virtual void showMultiSelectionPopupMenu(); | ||||
| void launchPopupMenu (PopupMenu&); // runs asynchronously, and produces a callback to handlePopupMenuResult(). | |||||
| virtual void handlePopupMenuResult (int resultCode); | |||||
| void invokeShowDocument(); | void invokeShowDocument(); | ||||
| virtual ProjectTreeViewBase* findTreeViewItem (const Project::Item& itemToFind); | virtual ProjectTreeViewBase* findTreeViewItem (const Project::Item& itemToFind); | ||||
| @@ -120,13 +120,17 @@ void GroupTreeViewItem::showPopupMenu() | |||||
| if (! isRoot()) | if (! isRoot()) | ||||
| m.addItem (2, "Delete"); | m.addItem (2, "Delete"); | ||||
| const int res = m.show(); | |||||
| switch (res) | |||||
| launchPopupMenu (m); | |||||
| } | |||||
| void GroupTreeViewItem::handlePopupMenuResult (int resultCode) | |||||
| { | |||||
| switch (resultCode) | |||||
| { | { | ||||
| case 1: triggerAsyncRename (item); break; | case 1: triggerAsyncRename (item); break; | ||||
| case 2: deleteAllSelectedItems(); break; | case 2: deleteAllSelectedItems(); break; | ||||
| case 3: item.sortAlphabetically (false); break; | case 3: item.sortAlphabetically (false); break; | ||||
| default: processCreateFileMenuItem (res); break; | |||||
| default: processCreateFileMenuItem (resultCode); break; | |||||
| } | } | ||||
| } | } | ||||
| @@ -228,7 +232,7 @@ void SourceFileTreeViewItem::setName (const String& newName) | |||||
| ProjectTreeViewBase* SourceFileTreeViewItem::createSubItem (const Project::Item& child) | ProjectTreeViewBase* SourceFileTreeViewItem::createSubItem (const Project::Item& child) | ||||
| { | { | ||||
| jassertfalse | jassertfalse | ||||
| return 0; | |||||
| return nullptr; | |||||
| } | } | ||||
| void SourceFileTreeViewItem::showDocument() | void SourceFileTreeViewItem::showDocument() | ||||
| @@ -242,10 +246,9 @@ void SourceFileTreeViewItem::showDocument() | |||||
| void SourceFileTreeViewItem::showPopupMenu() | void SourceFileTreeViewItem::showPopupMenu() | ||||
| { | { | ||||
| GroupTreeViewItem* parentGroup = dynamic_cast <GroupTreeViewItem*> (getParentProjectItem()); | |||||
| PopupMenu m; | PopupMenu m; | ||||
| GroupTreeViewItem* parentGroup = dynamic_cast <GroupTreeViewItem*> (getParentProjectItem()); | |||||
| if (parentGroup != nullptr) | if (parentGroup != nullptr) | ||||
| { | { | ||||
| parentGroup->addCreateFileMenuItems (m); | parentGroup->addCreateFileMenuItems (m); | ||||
| @@ -264,8 +267,14 @@ void SourceFileTreeViewItem::showPopupMenu() | |||||
| m.addSeparator(); | m.addSeparator(); | ||||
| m.addItem (3, "Delete"); | m.addItem (3, "Delete"); | ||||
| const int res = m.show(); | |||||
| switch (res) | |||||
| launchPopupMenu (m); | |||||
| } | |||||
| void SourceFileTreeViewItem::handlePopupMenuResult (int resultCode) | |||||
| { | |||||
| GroupTreeViewItem* parentGroup = dynamic_cast <GroupTreeViewItem*> (getParentProjectItem()); | |||||
| switch (resultCode) | |||||
| { | { | ||||
| case 1: getFile().startAsProcess(); break; | case 1: getFile().startAsProcess(); break; | ||||
| case 2: revealInFinder(); break; | case 2: revealInFinder(); break; | ||||
| @@ -274,7 +283,7 @@ void SourceFileTreeViewItem::showPopupMenu() | |||||
| default: | default: | ||||
| if (parentGroup != nullptr) | if (parentGroup != nullptr) | ||||
| parentGroup->processCreateFileMenuItem (res); | |||||
| parentGroup->processCreateFileMenuItem (resultCode); | |||||
| break; | break; | ||||
| } | } | ||||
| @@ -42,6 +42,7 @@ public: | |||||
| void createLeftEdgeComponents (OwnedArray<Component>& components) {} | void createLeftEdgeComponents (OwnedArray<Component>& components) {} | ||||
| void showDocument(); | void showDocument(); | ||||
| void showPopupMenu(); | void showPopupMenu(); | ||||
| void handlePopupMenuResult (int resultCode); | |||||
| String getDisplayName() const; | String getDisplayName() const; | ||||
| void setName (const String& newName); | void setName (const String& newName); | ||||
| }; | }; | ||||
| @@ -62,6 +63,7 @@ public: | |||||
| void createLeftEdgeComponents (OwnedArray<Component>& components) {} | void createLeftEdgeComponents (OwnedArray<Component>& components) {} | ||||
| void showDocument(); | void showDocument(); | ||||
| void showPopupMenu(); | void showPopupMenu(); | ||||
| void handlePopupMenuResult (int resultCode); | |||||
| void addFiles (const StringArray& files, int insertIndex); | void addFiles (const StringArray& files, int insertIndex); | ||||
| void addNewGroup(); | void addNewGroup(); | ||||