From 3e95b94a6a1f6f7f38a01e8e66eef1981f40d9f2 Mon Sep 17 00:00:00 2001 From: jules Date: Wed, 23 Jan 2013 14:21:04 +0000 Subject: [PATCH] Tweaked algorithm for creating the folder-based plugin tree in KnownPluginList --- .../scanning/juce_KnownPluginList.cpp | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp b/modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp index a9209e7ff6..39d0775794 100644 --- a/modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp +++ b/modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp @@ -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 & allPlugins) { for (int i = 0; i < tree.subFolders.size(); ++i)