diff options
author | David Robillard <d@drobilla.net> | 2015-03-06 19:05:29 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2015-03-07 14:04:45 -0500 |
commit | 0cb096a9782bd13188e7add156af0a4c5e846e86 (patch) | |
tree | 6ca3a259d810bd8cd96ec083eaebbb504a511602 /gtk2_ardour/plugin_ui.cc | |
parent | 7eb849ad2142cab7291b8d2d79563e32c92a29d1 (diff) |
Use Ardour widgets consistently in plugin UI.
Several reasons:
* This previously looked horribly inconsistent.
* The Gtk selector was broken for plugins with many presets,
making it impossible to select presets. For whatever reason,
the use of a menu fixes this bug.
* Towards a hierarchical menu for banked presets.
Diffstat (limited to 'gtk2_ardour/plugin_ui.cc')
-rw-r--r-- | gtk2_ardour/plugin_ui.cc | 54 |
1 files changed, 28 insertions, 26 deletions
diff --git a/gtk2_ardour/plugin_ui.cc b/gtk2_ardour/plugin_ui.cc index b4e8e0001e..76efb71f1f 100644 --- a/gtk2_ardour/plugin_ui.cc +++ b/gtk2_ardour/plugin_ui.cc @@ -426,7 +426,7 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi) , eqgui (0) { _preset_modified.set_size_request (16, -1); - _preset_combo.signal_changed().connect(sigc::mem_fun(*this, &PlugUIBase::preset_selected)); + _preset_combo.set_text("(default)"); ARDOUR_UI::instance()->set_tip (_preset_combo, _("Presets (if any) for this plugin\n(Both factory and user-created)")); ARDOUR_UI::instance()->set_tip (add_button, _("Save a new preset")); ARDOUR_UI::instance()->set_tip (save_button, _("Save the current preset")); @@ -437,14 +437,14 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> pi) update_preset_list (); update_preset (); - add_button.set_name ("PluginAddButton"); - add_button.signal_clicked().connect (sigc::mem_fun (*this, &PlugUIBase::add_plugin_setting)); + add_button.set_name ("generic button"); + add_button.signal_clicked.connect (sigc::mem_fun (*this, &PlugUIBase::add_plugin_setting)); - save_button.set_name ("PluginSaveButton"); - save_button.signal_clicked().connect(sigc::mem_fun(*this, &PlugUIBase::save_plugin_setting)); + save_button.set_name ("generic button"); + save_button.signal_clicked.connect(sigc::mem_fun(*this, &PlugUIBase::save_plugin_setting)); - delete_button.set_name ("PluginDeleteButton"); - delete_button.signal_clicked().connect (sigc::mem_fun (*this, &PlugUIBase::delete_plugin_setting)); + delete_button.set_name ("generic button"); + delete_button.signal_clicked.connect (sigc::mem_fun (*this, &PlugUIBase::delete_plugin_setting)); insert->ActiveChanged.connect (active_connection, invalidator (*this), boost::bind (&PlugUIBase::processor_active_changed, this, boost::weak_ptr<Processor>(insert)), gui_context()); @@ -509,7 +509,7 @@ PlugUIBase::set_latency_label () t = string_compose (_("latency (%1 ms)"), (float) l / ((float) sr / 1000.0f)); } - latency_label.set_text (t); + latency_button.set_text (t); } void @@ -545,20 +545,13 @@ PlugUIBase::processor_active_changed (boost::weak_ptr<Processor> weak_p) } void -PlugUIBase::preset_selected () +PlugUIBase::preset_selected (Plugin::PresetRecord preset) { 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) { - plugin->load_preset (*pr); - } else { - warning << string_compose(_("Plugin preset %1 not found"), - _preset_combo.get_active_text()) << endmsg; - } + if (!preset.label.empty()) { + plugin->load_preset (preset); } else { // blank selected = no preset plugin->clear_preset(); @@ -605,7 +598,7 @@ void PlugUIBase::save_plugin_setting () { #ifndef NO_PLUGIN_STATE - string const name = _preset_combo.get_active_text (); + string const name = _preset_combo.get_text (); plugin->remove_preset (name); Plugin::PresetRecord const r = plugin->save_preset (name); if (!r.uri.empty ()) { @@ -625,7 +618,7 @@ void PlugUIBase::delete_plugin_setting () { #ifndef NO_PLUGIN_STATE - plugin->remove_preset (_preset_combo.get_active_text ()); + plugin->remove_preset (_preset_combo.get_text ()); #else if (!seen_saving_message) { info << string_compose (_("Plugin presets are not supported in this build of %1. Consider paying for a newer version"), @@ -736,18 +729,23 @@ PlugUIBase::toggle_plugin_analysis() void PlugUIBase::update_preset_list () { - vector<string> preset_labels; + using namespace Menu_Helpers; + vector<ARDOUR::Plugin::PresetRecord> presets = plugin->get_presets(); ++_no_load_preset; + // Add a menu entry for each preset + _preset_combo.clear_items(); for (vector<ARDOUR::Plugin::PresetRecord>::const_iterator i = presets.begin(); i != presets.end(); ++i) { - preset_labels.push_back (i->label); + _preset_combo.AddMenuElem( + MenuElem(i->label, sigc::bind(sigc::mem_fun(*this, &PlugUIBase::preset_selected), *i))); } - preset_labels.push_back(""); - - set_popdown_strings (_preset_combo, preset_labels); + // Add an empty entry for un-setting current preset (see preset_selected) + Plugin::PresetRecord no_preset; + _preset_combo.AddMenuElem( + MenuElem("", sigc::bind(sigc::mem_fun(*this, &PlugUIBase::preset_selected), no_preset))); --_no_load_preset; } @@ -758,7 +756,11 @@ PlugUIBase::update_preset () Plugin::PresetRecord p = plugin->last_preset(); ++_no_load_preset; - _preset_combo.set_active_text (p.label); + if (p.uri.empty()) { + _preset_combo.set_text ("(none)"); + } else { + _preset_combo.set_text (p.label); + } --_no_load_preset; save_button.set_sensitive (!p.uri.empty() && p.user); |