1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-02-07 04:10:08 +00:00

Tweaked algorithm for creating the folder-based plugin tree in KnownPluginList

This commit is contained in:
jules 2013-01-23 14:21:04 +00:00
parent d907508944
commit 3e95b94a6a

View file

@ -323,7 +323,32 @@ struct PluginTreeUtils
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,
@ -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)
{
for (int i = 0; i < tree.subFolders.size(); ++i)