@@ -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(); | ||||