From: Paul Davis Date: Thu, 19 Nov 2009 12:38:15 +0000 (+0000) Subject: some plugin preset handling fixes from 2.X X-Git-Tag: 3.0-alpha5~2773 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=bd064938c4e811a552d9296bfacb03fbdebcf854;p=ardour.git some plugin preset handling fixes from 2.X git-svn-id: svn://localhost/ardour2/branches/3.0@6130 d708f5d6-7413-0410-9779-e7cbd77b26cf --- diff --git a/gtk2_ardour/plugin_ui.cc b/gtk2_ardour/plugin_ui.cc index b6326392e2..a59d2f130f 100644 --- a/gtk2_ardour/plugin_ui.cc +++ b/gtk2_ardour/plugin_ui.cc @@ -386,6 +386,7 @@ PlugUIBase::PlugUIBase (boost::shared_ptr pi) preset_combo.set_size_request (100, -1); preset_combo.set_active_text (""); preset_combo.signal_changed().connect(mem_fun(*this, &PlugUIBase::setting_selected)); + no_load_preset = false; save_button.set_name ("PluginSaveButton"); save_button.signal_clicked().connect(mem_fun(*this, &PlugUIBase::save_plugin_setting)); @@ -474,6 +475,10 @@ PlugUIBase::processor_active_changed (boost::weak_ptr weak_p) void PlugUIBase::setting_selected() { + if (no_load_preset) { + return; + } + if (preset_combo.get_active_text().length() > 0) { const Plugin::PresetRecord* pr = plugin->preset_by_label(preset_combo.get_active_text()); if (pr) { @@ -504,7 +509,9 @@ PlugUIBase::save_plugin_setting () if (name.length()) { if (plugin->save_preset(name)) { update_presets(); + no_load_preset = true; preset_combo.set_active_text (name); + no_load_preset = false; } } break; @@ -589,9 +596,14 @@ PlugUIBase::update_presets () { vector preset_labels; vector presets = plugin->get_presets(); - for (vector::const_iterator i = presets.begin(); - i != presets.end(); ++i) { + + no_load_preset = true; + + for (vector::const_iterator i = presets.begin(); i != presets.end(); ++i) { preset_labels.push_back(i->label); } + set_popdown_strings (preset_combo, preset_labels); + + no_load_preset = false; } diff --git a/gtk2_ardour/plugin_ui.h b/gtk2_ardour/plugin_ui.h index f27e40f3d5..221c1d71f1 100644 --- a/gtk2_ardour/plugin_ui.h +++ b/gtk2_ardour/plugin_ui.h @@ -112,6 +112,7 @@ class PlugUIBase : public virtual sigc::trackable Gtk::Image* focus_out_image; Gtk::Image* focus_in_image; + bool no_load_preset; void setting_selected(); void save_plugin_setting (void); diff --git a/libs/ardour/ardour/plugin.h b/libs/ardour/ardour/plugin.h index d6cdd00c39..5a86b6e005 100644 --- a/libs/ardour/ardour/plugin.h +++ b/libs/ardour/ardour/plugin.h @@ -137,6 +137,7 @@ class Plugin : public PBD::StatefulDestructible, public Latent }; virtual std::vector get_presets(); + virtual std::string current_preset() const { return std::string(); } const PresetRecord* preset_by_label(const std::string& label); const PresetRecord* preset_by_uri(const std::string& uri);