diff --git a/gtk2_ardour/plugin_ui.cc b/gtk2_ardour/plugin_ui.cc index 5d0f260615..60ec17ff66 100644 --- a/gtk2_ardour/plugin_ui.cc +++ b/gtk2_ardour/plugin_ui.cc @@ -466,6 +466,7 @@ PlugUIBase::PlugUIBase (boost::shared_ptr pi) , add_button (_("Add")) , save_button (_("Save")) , delete_button (_("Delete")) + , preset_browser_button (_("Preset Browser")) , reset_button (_("Reset")) , bypass_button (ArdourButton::led_default_elements) , pin_management_button (_("Pinout")) @@ -477,6 +478,7 @@ PlugUIBase::PlugUIBase (boost::shared_ptr pi) , eqgui (0) , stats_gui (0) , preset_gui (0) + , preset_dialog (0) { _preset_modified.set_size_request (16, -1); _preset_combo.set_text("(default)"); @@ -484,6 +486,7 @@ PlugUIBase::PlugUIBase (boost::shared_ptr pi) set_tooltip (add_button, _("Save a new preset")); set_tooltip (save_button, _("Save the current preset")); set_tooltip (delete_button, _("Delete the current preset")); + set_tooltip (preset_browser_button, _("Show Preset Browser Dialog")); set_tooltip (reset_button, _("Reset parameters to default (if no parameters are in automation play mode)")); set_tooltip (pin_management_button, _("Show Plugin Pin Management Dialog")); set_tooltip (bypass_button, _("Disable signal processing by the plugin")); @@ -508,6 +511,10 @@ PlugUIBase::PlugUIBase (boost::shared_ptr pi) delete_button.set_icon (ArdourIcon::PsetDelete); delete_button.signal_clicked.connect (sigc::mem_fun (*this, &PlugUIBase::delete_plugin_setting)); + preset_browser_button.set_name ("generic button"); + preset_browser_button.set_icon (ArdourIcon::PsetBrowse); + preset_browser_button.signal_clicked.connect (sigc::mem_fun (*this, &PlugUIBase::browse_presets)); + reset_button.set_name ("generic button"); reset_button.set_icon (ArdourIcon::PluginReset); reset_button.signal_clicked.connect (sigc::mem_fun (*this, &PlugUIBase::reset_plugin_parameters)); @@ -568,6 +575,7 @@ PlugUIBase::~PlugUIBase() delete preset_gui; delete latency_gui; delete latency_dialog; + delete preset_dialog; } void @@ -697,6 +705,28 @@ PlugUIBase::has_descriptive_presets () const return false; } +void +PlugUIBase::browse_presets () +{ + if (!preset_dialog) { + if (preset_gui) { + /* Do not allow custom window, if preset_gui is used. + * e.g. generic-plugin UI. + */ + return; + } + preset_dialog = new ArdourWindow (_("Select Preset")); + preset_dialog->set_keep_above (true); + Window* win = dynamic_cast (preset_browser_button.get_toplevel ()); + if (win) { + preset_dialog->set_transient_for (*win); + } + preset_gui = new PluginPresetsUI (insert); + preset_dialog->add (*preset_gui); + } + preset_dialog->show_all (); +} + void PlugUIBase::manage_pins () { diff --git a/gtk2_ardour/plugin_ui.h b/gtk2_ardour/plugin_ui.h index 08be65f2d4..e71cffaf3f 100644 --- a/gtk2_ardour/plugin_ui.h +++ b/gtk2_ardour/plugin_ui.h @@ -132,6 +132,8 @@ protected: ArdourWidgets::ArdourButton save_button; /** a button to delete the current preset (if it is a user one) */ ArdourWidgets::ArdourButton delete_button; + /** a button to show a preset browser */ + ArdourWidgets::ArdourButton preset_browser_button; /** a button to delete the reset the plugin params */ ArdourWidgets::ArdourButton reset_button; /** a button to bypass the plugin */ @@ -166,6 +168,7 @@ protected: PluginEqGui* eqgui; PluginLoadStatsGui* stats_gui; PluginPresetsUI* preset_gui; + ArdourWindow* preset_dialog; Gtk::Image* focus_out_image; Gtk::Image* focus_in_image; @@ -176,6 +179,7 @@ protected: void save_plugin_setting (); void delete_plugin_setting (); void reset_plugin_parameters (); + void browse_presets (); void manage_pins (); bool focus_toggled(GdkEventButton*); bool bypass_button_release(GdkEventButton*);