@@ -547,18 +547,23 @@ public: | |||
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) | |||
{ | |||
StringArray exporters (ProjectExporter::getExporterNames()); | |||
PopupMenu menu; | |||
const StringArray exporters (ProjectExporter::getExporterNames()); | |||
for (int i = 0; i < exporters.size(); ++i) | |||
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() | |||
@@ -436,18 +436,39 @@ void ProjectTreeViewBase::refreshSubItems() | |||
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; | |||
} | |||
} | |||
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) | |||
{ | |||
invokeShowDocument(); | |||
@@ -65,6 +65,9 @@ public: | |||
virtual void addFiles (const StringArray& files, int insertIndex); | |||
virtual void moveSelectedItemsTo (OwnedArray <Project::Item>& selectedNodes, int insertIndex); | |||
virtual void showMultiSelectionPopupMenu(); | |||
void launchPopupMenu (PopupMenu&); // runs asynchronously, and produces a callback to handlePopupMenuResult(). | |||
virtual void handlePopupMenuResult (int resultCode); | |||
void invokeShowDocument(); | |||
virtual ProjectTreeViewBase* findTreeViewItem (const Project::Item& itemToFind); | |||
@@ -120,13 +120,17 @@ void GroupTreeViewItem::showPopupMenu() | |||
if (! isRoot()) | |||
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 2: deleteAllSelectedItems(); 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) | |||
{ | |||
jassertfalse | |||
return 0; | |||
return nullptr; | |||
} | |||
void SourceFileTreeViewItem::showDocument() | |||
@@ -242,10 +246,9 @@ void SourceFileTreeViewItem::showDocument() | |||
void SourceFileTreeViewItem::showPopupMenu() | |||
{ | |||
GroupTreeViewItem* parentGroup = dynamic_cast <GroupTreeViewItem*> (getParentProjectItem()); | |||
PopupMenu m; | |||
GroupTreeViewItem* parentGroup = dynamic_cast <GroupTreeViewItem*> (getParentProjectItem()); | |||
if (parentGroup != nullptr) | |||
{ | |||
parentGroup->addCreateFileMenuItems (m); | |||
@@ -264,8 +267,14 @@ void SourceFileTreeViewItem::showPopupMenu() | |||
m.addSeparator(); | |||
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 2: revealInFinder(); break; | |||
@@ -274,7 +283,7 @@ void SourceFileTreeViewItem::showPopupMenu() | |||
default: | |||
if (parentGroup != nullptr) | |||
parentGroup->processCreateFileMenuItem (res); | |||
parentGroup->processCreateFileMenuItem (resultCode); | |||
break; | |||
} | |||
@@ -42,6 +42,7 @@ public: | |||
void createLeftEdgeComponents (OwnedArray<Component>& components) {} | |||
void showDocument(); | |||
void showPopupMenu(); | |||
void handlePopupMenuResult (int resultCode); | |||
String getDisplayName() const; | |||
void setName (const String& newName); | |||
}; | |||
@@ -62,6 +63,7 @@ public: | |||
void createLeftEdgeComponents (OwnedArray<Component>& components) {} | |||
void showDocument(); | |||
void showPopupMenu(); | |||
void handlePopupMenuResult (int resultCode); | |||
void addFiles (const StringArray& files, int insertIndex); | |||
void addNewGroup(); | |||