| @@ -323,7 +323,32 @@ struct PluginTreeUtils | |||||
| addPlugin (tree, pd, path); | addPlugin (tree, pd, path); | ||||
| } | } | ||||
| optimise (tree); | |||||
| optimiseFolders (tree, false); | |||||
| } | |||||
| static void optimiseFolders (KnownPluginList::PluginTree& tree, bool concatenateName) | |||||
| { | |||||
| for (int i = tree.subFolders.size(); --i >= 0;) | |||||
| { | |||||
| KnownPluginList::PluginTree& sub = *tree.subFolders.getUnchecked(i); | |||||
| optimiseFolders (sub, concatenateName || (tree.subFolders.size() > 1)); | |||||
| if (sub.plugins.size() == 0) | |||||
| { | |||||
| for (int j = 0; j < sub.subFolders.size(); ++j) | |||||
| { | |||||
| KnownPluginList::PluginTree* const s = sub.subFolders.getUnchecked(j); | |||||
| if (concatenateName) | |||||
| s->folder = sub.folder + "/" + s->folder; | |||||
| tree.subFolders.add (s); | |||||
| } | |||||
| sub.subFolders.clear (false); | |||||
| tree.subFolders.remove (i); | |||||
| } | |||||
| } | |||||
| } | } | ||||
| static void buildTreeByCategory (KnownPluginList::PluginTree& tree, | static void buildTreeByCategory (KnownPluginList::PluginTree& tree, | ||||
| @@ -398,25 +423,6 @@ struct PluginTreeUtils | |||||
| } | } | ||||
| } | } | ||||
| // removes any deeply nested folders that don't contain any actual plugins | |||||
| static void optimise (KnownPluginList::PluginTree& tree) | |||||
| { | |||||
| for (int i = tree.subFolders.size(); --i >= 0;) | |||||
| { | |||||
| KnownPluginList::PluginTree& sub = *tree.subFolders.getUnchecked(i); | |||||
| optimise (sub); | |||||
| if (sub.plugins.size() == 0) | |||||
| { | |||||
| for (int j = 0; j < sub.subFolders.size(); ++j) | |||||
| tree.subFolders.add (sub.subFolders.getUnchecked(j)); | |||||
| sub.subFolders.clear (false); | |||||
| tree.subFolders.remove (i); | |||||
| } | |||||
| } | |||||
| } | |||||
| static void addToMenu (const KnownPluginList::PluginTree& tree, PopupMenu& m, const OwnedArray <PluginDescription>& allPlugins) | static void addToMenu (const KnownPluginList::PluginTree& tree, PopupMenu& m, const OwnedArray <PluginDescription>& allPlugins) | ||||
| { | { | ||||
| for (int i = 0; i < tree.subFolders.size(); ++i) | for (int i = 0; i < tree.subFolders.size(); ++i) | ||||