diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2008-05-29 12:32:14 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2008-05-29 12:32:14 +0000 |
commit | 79ab09083010806d9dec1650088069c422acd30f (patch) | |
tree | 5f32481f8f58c569a01539e2e36ec8eb075c8ff2 /gtk2_ardour/plugin_selector.cc | |
parent | b7f48adb562e7e5a6ba88882f7d97110790aa8b1 (diff) |
redesign plugin selection process to fix multiple-addition problem
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3420 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/plugin_selector.cc')
-rw-r--r-- | gtk2_ardour/plugin_selector.cc | 49 |
1 files changed, 31 insertions, 18 deletions
diff --git a/gtk2_ardour/plugin_selector.cc b/gtk2_ardour/plugin_selector.cc index b17d9c6079..09b3a32408 100644 --- a/gtk2_ardour/plugin_selector.cc +++ b/gtk2_ardour/plugin_selector.cc @@ -327,18 +327,14 @@ PluginSelector::au_refiller (const std::string& filterstr) #endif } -void -PluginSelector::use_plugin (PluginInfoPtr pi) +PluginPtr +PluginSelector::load_plugin (PluginInfoPtr pi) { if (session == 0) { - return; + return PluginPtr(); } - PluginPtr plugin = pi->load (*session); - - if (plugin) { - PluginCreated (plugin); - } + return pi->load (*session); } void @@ -404,6 +400,7 @@ PluginSelector::run () { ResponseType r; TreeModel::Children::iterator i; + SelectedPlugins plugins; r = (ResponseType) Dialog::run (); @@ -411,24 +408,26 @@ PluginSelector::run () case RESPONSE_APPLY: for (i = amodel->children().begin(); i != amodel->children().end(); ++i) { PluginInfoPtr pp = (*i)[acols.plugin]; - use_plugin (pp); + PluginPtr p = load_plugin (pp); + if (p) { + plugins.push_back (p); + } + } + if (interested_object && !plugins.empty()) { + interested_object->use_plugins (plugins); } + break; default: break; } - cleanup (); - - return (int) r; -} - -void -PluginSelector::cleanup () -{ hide(); amodel->clear(); + interested_object = 0; + + return (int) r; } void @@ -551,7 +550,15 @@ PluginSelector::plugin_menu() void PluginSelector::plugin_chosen_from_menu (const PluginInfoPtr& pi) { - use_plugin (pi); + PluginPtr p = load_plugin (pi); + + if (p && interested_object) { + SelectedPlugins plugins; + plugins.push_back (p); + interested_object->use_plugins (plugins); + } + + interested_object = 0; } void @@ -596,3 +603,9 @@ PluginSelector::show_manager () show_all(); run (); } + +void +PluginSelector::set_interested_object (PluginInterestedObject& obj) +{ + interested_object = &obj; +} |