summaryrefslogtreecommitdiff
path: root/gtk2_ardour/plugin_selector.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2008-05-29 12:32:14 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2008-05-29 12:32:14 +0000
commit79ab09083010806d9dec1650088069c422acd30f (patch)
tree5f32481f8f58c569a01539e2e36ec8eb075c8ff2 /gtk2_ardour/plugin_selector.cc
parentb7f48adb562e7e5a6ba88882f7d97110790aa8b1 (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.cc49
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;
+}