Browse Source

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

tags/2021-05-28
jules 12 years ago
parent
commit
3e95b94a6a
1 changed files with 26 additions and 20 deletions
  1. +26
    -20
      modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp

+ 26
- 20
modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp 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)


Loading…
Cancel
Save