Add a plugin-preset browser window
authorRobin Gareus <robin@gareus.org>
Thu, 10 Oct 2019 22:03:41 +0000 (00:03 +0200)
committerRobin Gareus <robin@gareus.org>
Thu, 10 Oct 2019 22:03:41 +0000 (00:03 +0200)
Previously preset-browser was only used instead of "generic control"
display if a plugin does not have any controls (but presets).

This allows for showing a dedicated window..

gtk2_ardour/plugin_ui.cc
gtk2_ardour/plugin_ui.h

index 5d0f2606152452fd70a28878e4c23441c545f3b9..60ec17ff660915de6801652dc3c06cbd5a71e0d0 100644 (file)
@@ -466,6 +466,7 @@ PlugUIBase::PlugUIBase (boost::shared_ptr<PluginInsert> 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<PluginInsert> 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<PluginInsert> 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<PluginInsert> 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<Window*> (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 ()
 {
index 08be65f2d4defbf2d550e081b7fcd98168ec4407..e71cffaf3f0db88f55fc37a1c949614d4cbc48ba 100644 (file)
@@ -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*);