summaryrefslogtreecommitdiff
path: root/gtk2_ardour/plugin_ui.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2015-03-06 19:05:29 -0500
committerDavid Robillard <d@drobilla.net>2015-03-07 14:04:45 -0500
commit0cb096a9782bd13188e7add156af0a4c5e846e86 (patch)
tree6ca3a259d810bd8cd96ec083eaebbb504a511602 /gtk2_ardour/plugin_ui.cc
parent7eb849ad2142cab7291b8d2d79563e32c92a29d1 (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.cc54
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);