Browse Source

Projucer: Fix a crash when enumerating modules

- Refactored code to remove repetition and magic numbers
v7.0.9
Anthony Nicholls 2 years ago
parent
commit
72e3e0b697
1 changed files with 28 additions and 74 deletions
  1. +28
    -74
      extras/Projucer/Source/Project/UI/Sidebar/jucer_ModuleTreeItems.h

+ 28
- 74
extras/Projucer/Source/Project/UI/Sidebar/jucer_ModuleTreeItems.h View File

@@ -516,96 +516,50 @@ public:
void showPopupMenu (Point<int> p) override
{
auto& enabledModules = project.getEnabledModules();
PopupMenu allModules;
PopupMenu moduleMenus;
// JUCE path
PopupMenu jucePathModules;
for (const auto [index, mod] : enumerate (ProjucerApplication::getApp().getJUCEPathModulesList().getAllModules(),
100))
{
jucePathModules.addItem (index, mod.first, ! enabledModules.isModuleEnabled (mod.first));
}
jucePathModules.addSeparator();
jucePathModules.addItem (-1, "Re-scan path");
allModules.addSubMenu ("Global JUCE modules path", jucePathModules);
// User path
PopupMenu userPathModules;
for (const auto [index, mod] : enumerate (ProjucerApplication::getApp().getUserPathsModulesList().getAllModules(),
200))
const auto addModulesSubMenu = [&] (const auto& description, const auto& modules, auto rescan)
{
userPathModules.addItem (index, mod.first, ! enabledModules.isModuleEnabled (mod.first));
}
PopupMenu menu;
userPathModules.addSeparator();
userPathModules.addItem (-2, "Re-scan path");
for (const auto& mod : modules)
{
menu.addItem (PopupMenu::Item { mod.first }
.setID (-1)
.setEnabled (! project.getEnabledModules().isModuleEnabled (mod.first))
.setAction ([this, name = mod.first] { project.getEnabledModules().addModuleInteractive (name); }));
}
allModules.addSubMenu ("Global user modules path", userPathModules);
menu.addSeparator();
menu.addItem (PopupMenu::Item { "Re-scan path" }.setID (-1).setAction (rescan));
moduleMenus.addSubMenu (description, menu);
};
// Exporter path
PopupMenu exporterPathModules;
addModulesSubMenu ("Global JUCE modules path",
ProjucerApplication::getApp().getJUCEPathModulesList().getAllModules(),
[] { ProjucerApplication::getApp().rescanJUCEPathModules(); });
for (const auto [index, mod] : enumerate (project.getExporterPathsModulesList().getAllModules(),
300))
{
exporterPathModules.addItem (index, mod.first, ! enabledModules.isModuleEnabled (mod.first));
}
exporterPathModules.addSeparator();
exporterPathModules.addItem (-3, "Re-scan path");
addModulesSubMenu ("Global user modules path",
ProjucerApplication::getApp().getUserPathsModulesList().getAllModules(),
[] { ProjucerApplication::getApp().rescanUserPathModules(); });
allModules.addSubMenu ("Exporter paths", exporterPathModules);
addModulesSubMenu ("Exporter paths",
project.getExporterPathsModulesList().getAllModules(),
[this] { project.rescanExporterPathModules(); });
PopupMenu menu;
menu.addSubMenu ("Add a module", allModules);
menu.addSubMenu ("Add a module", moduleMenus);
menu.addSeparator();
menu.addItem (1001, "Add a module from a specified folder...");
menu.addItem (PopupMenu::Item { "Add a module from a specified folder..." }
.setID (-1)
.setAction ([this] { project.getEnabledModules().addModuleFromUserSelectedFile(); }));
launchPopupMenu (menu, p);
}
void handlePopupMenuResult (int resultCode) override
{
if (resultCode == 1001)
{
project.getEnabledModules().addModuleFromUserSelectedFile();
}
else if (resultCode < 0)
{
if (resultCode == -1) ProjucerApplication::getApp().rescanJUCEPathModules();
else if (resultCode == -2) ProjucerApplication::getApp().rescanUserPathModules();
else if (resultCode == -3) project.rescanExporterPathModules();
}
else if (resultCode > 0)
{
std::vector<AvailableModulesList::ModuleIDAndFolder> list;
int offset = -1;
if (resultCode < 200)
{
list = ProjucerApplication::getApp().getJUCEPathModulesList().getAllModules();
offset = 100;
}
else if (resultCode < 300)
{
list = ProjucerApplication::getApp().getUserPathsModulesList().getAllModules();
offset = 200;
}
else if (resultCode < 400)
{
list = project.getExporterPathsModulesList().getAllModules();
offset = 300;
}
if (offset != -1)
project.getEnabledModules().addModuleInteractive (list[(size_t) (resultCode - offset)].first);
}
jassertquiet (resultCode == -1 || resultCode == 0);
}
//==============================================================================


Loading…
Cancel
Save