summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2010-04-27 19:58:31 +0000
committerCarl Hetherington <carl@carlh.net>2010-04-27 19:58:31 +0000
commit0bc6a319f10f3e7a285af627e5983bd86f6ec847 (patch)
tree97744a177a2474b0c442fed1529504ade6a6193d /gtk2_ardour
parent47de938e998ffceb0d9cfa829b47dad721445dc9 (diff)
Don't close the plugin manager when an incompatible plugin is selected. Fixes #1194.
git-svn-id: svn://localhost/ardour2/branches/3.0@7006 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/plugin_interest.h2
-rw-r--r--gtk2_ardour/plugin_selector.cc45
-rw-r--r--gtk2_ardour/processor_box.cc8
-rw-r--r--gtk2_ardour/processor_box.h2
4 files changed, 34 insertions, 23 deletions
diff --git a/gtk2_ardour/plugin_interest.h b/gtk2_ardour/plugin_interest.h
index 047fe708c0..7661a84d33 100644
--- a/gtk2_ardour/plugin_interest.h
+++ b/gtk2_ardour/plugin_interest.h
@@ -30,7 +30,7 @@ class PluginInterestedObject {
PluginInterestedObject() {}
virtual ~PluginInterestedObject() {}
- virtual void use_plugins (const SelectedPlugins&) = 0;
+ virtual bool use_plugins (const SelectedPlugins&) = 0;
};
#endif /* __gtkardour_plugin_interest_h__ */
diff --git a/gtk2_ardour/plugin_selector.cc b/gtk2_ardour/plugin_selector.cc
index 890c09ede2..7953290b00 100644
--- a/gtk2_ardour/plugin_selector.cc
+++ b/gtk2_ardour/plugin_selector.cc
@@ -63,7 +63,7 @@ static const char* _filter_mode_strings[] = {
};
PluginSelector::PluginSelector (PluginManager *mgr)
- : ArdourDialog (_("ardour: plugins"), true, false),
+ : ArdourDialog (_("Plugin Manager"), true, false),
filter_button (Stock::CLEAR)
{
set_position (Gtk::WIN_POS_MOUSE);
@@ -442,29 +442,36 @@ PluginSelector::run ()
{
ResponseType r;
TreeModel::Children::iterator i;
- SelectedPlugins plugins;
- r = (ResponseType) Dialog::run ();
+ bool finish = false;
+
+ while (!finish) {
- switch (r) {
- case RESPONSE_APPLY:
- for (i = amodel->children().begin(); i != amodel->children().end(); ++i) {
- PluginInfoPtr pp = (*i)[acols.plugin];
- PluginPtr p = load_plugin (pp);
- if (p) {
- plugins.push_back (p);
+ SelectedPlugins plugins;
+ r = (ResponseType) Dialog::run ();
+
+ switch (r) {
+ case RESPONSE_APPLY:
+ for (i = amodel->children().begin(); i != amodel->children().end(); ++i) {
+ PluginInfoPtr pp = (*i)[acols.plugin];
+ PluginPtr p = load_plugin (pp);
+ if (p) {
+ plugins.push_back (p);
+ }
}
+ if (interested_object && !plugins.empty()) {
+ finish = !interested_object->use_plugins (plugins);
+ }
+
+ break;
+
+ default:
+ finish = true;
+ break;
}
- if (interested_object && !plugins.empty()) {
- interested_object->use_plugins (plugins);
- }
-
- break;
-
- default:
- break;
}
-
+
+
hide();
amodel->clear();
interested_object = 0;
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc
index 4b34bd0f68..e5d479b9ab 100644
--- a/gtk2_ardour/processor_box.cc
+++ b/gtk2_ardour/processor_box.cc
@@ -742,7 +742,8 @@ ProcessorBox::choose_plugin ()
_get_plugin_selector()->set_interested_object (*this);
}
-void
+/** @return true if an error occurred, otherwise false */
+bool
ProcessorBox::use_plugins (const SelectedPlugins& plugins)
{
for (SelectedPlugins::const_iterator p = plugins.begin(); p != plugins.end(); ++p) {
@@ -757,6 +758,7 @@ ProcessorBox::use_plugins (const SelectedPlugins& plugins)
if (_route->add_processor (processor, _placement, &err_streams)) {
weird_plugin_dialog (**p, err_streams);
+ return true;
// XXX SHAREDPTR delete plugin here .. do we even need to care?
} else {
@@ -765,12 +767,14 @@ ProcessorBox::use_plugins (const SelectedPlugins& plugins)
}
}
}
+
+ return false;
}
void
ProcessorBox::weird_plugin_dialog (Plugin& p, Route::ProcessorStreams streams)
{
- ArdourDialog dialog (_("ardour: weird plugin dialog"));
+ ArdourDialog dialog (_("Plugin Incompatibility"));
Label label;
string text = string_compose(_("You attempted to add the plugin \"%1\" at index %2.\n"),
diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h
index 5c5035c1d2..1e4257d22b 100644
--- a/gtk2_ardour/processor_box.h
+++ b/gtk2_ardour/processor_box.h
@@ -197,7 +197,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD
void return_io_finished (IOSelector::Result, boost::weak_ptr<ARDOUR::Processor>, IOSelectorWindow*);
void choose_insert ();
void choose_plugin ();
- void use_plugins (const SelectedPlugins&);
+ bool use_plugins (const SelectedPlugins&);
bool no_processor_redisplay;