VKeybd: Pass on primary (Ctrl/Cmd) shortcuts
[ardour.git] / gtk2_ardour / plugin_ui.h
index b7c686686778c4a592e0ce3735aab3520dc7a40b..6e7b41afec830a79c39cd0acc381f3c84d685999 100644 (file)
@@ -1,21 +1,26 @@
 /*
-    Copyright (C) 2000-2006 Paul Davis
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
+ * Copyright (C) 2005-2006 Taybin Rutkin <taybin@taybin.com>
+ * Copyright (C) 2005-2015 Paul Davis <paul@linuxaudiosystems.com>
+ * Copyright (C) 2006-2009 Sampo Savolainen <v2@iki.fi>
+ * Copyright (C) 2007-2015 David Robillard <d@drobilla.net>
+ * Copyright (C) 2009-2012 Carl Hetherington <carl@carlh.net>
+ * Copyright (C) 2013-2019 Robin Gareus <robin@gareus.org>
+ * Copyright (C) 2016-2017 Julien "_FrnchFrgg_" RIVAUD <frnchfrgg@free.fr>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
 
 #ifndef __ardour_plugin_ui_h__
 #define __ardour_plugin_ui_h__
 
 #include <sigc++/signal.h>
 
-#include <gtkmm/button.h>
+#include <gtkmm/adjustment.h>
 #include <gtkmm/box.h>
-#include <gtkmm/table.h>
+#include <gtkmm/button.h>
 #include <gtkmm/eventbox.h>
-#include <gtkmm/viewport.h>
-#include <gtkmm/scrolledwindow.h>
+#include <gtkmm/expander.h>
+#include <gtkmm/filechooserbutton.h>
+#include <gtkmm/image.h>
 #include <gtkmm/label.h>
 #include <gtkmm/menu.h>
-#include <gtkmm/image.h>
-#include <gtkmm/adjustment.h>
-#include <gtkmm/togglebutton.h>
-#include <gtkmm/socket.h>
+#include <gtkmm/scrolledwindow.h>
 #include <gtkmm/socket.h>
+#include <gtkmm/table.h>
+#include <gtkmm/togglebutton.h>
+#include <gtkmm/viewport.h>
 
 #include "ardour/types.h"
 #include "ardour/plugin.h"
@@ -54,6 +60,7 @@
 
 #include "ardour_window.h"
 #include "automation_controller.h"
+#include "pianokeyboard.h"
 
 namespace ARDOUR {
        class PluginInsert;
@@ -69,17 +76,15 @@ namespace PBD {
        class Controllable;
 }
 
-namespace Gtkmm2ext {
-       class HSliderController;
-       class BarController;
-       class ClickBox;
+namespace ArdourWidgets {
        class FastMeter;
-       class PixmapButton;
 }
 
 class LatencyGUI;
 class ArdourWindow;
 class PluginEqGui;
+class PluginLoadStatsGui;
+class PluginPresetsUI;
 class VSTPluginUI;
 
 class PlugUIBase : public virtual sigc::trackable, public PBD::ScopedConnectionList
@@ -127,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 */
@@ -139,6 +146,8 @@ protected:
        Gtk::Expander description_expander;
        /** an expander containing the plugin analysis graph */
        Gtk::Expander plugin_analysis_expander;
+       /** an expander containing the plugin cpu profile */
+       Gtk::Expander cpuload_expander;
        /** a button which, when clicked, opens the latency GUI */
        ArdourWidgets::ArdourButton latency_button;
        /** a button which sets all controls' automation setting to Manual */
@@ -149,13 +158,17 @@ protected:
        ArdourWidgets::ArdourButton automation_write_all_button;
        /** a button which sets all controls' automation setting to Touch */
        ArdourWidgets::ArdourButton automation_touch_all_button;
+       /** a button which sets all controls' automation setting to Latch */
+       ArdourWidgets::ArdourButton automation_latch_all_button;
 
        void set_latency_label ();
-
        LatencyGUI* latency_gui;
        ArdourWindow* latency_dialog;
 
        PluginEqGui* eqgui;
+       PluginLoadStatsGui* stats_gui;
+       PluginPresetsUI* preset_gui;
+       ArdourWindow* preset_dialog;
 
        Gtk::Image* focus_out_image;
        Gtk::Image* focus_in_image;
@@ -166,17 +179,21 @@ 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*);
        void toggle_description ();
        void toggle_plugin_analysis ();
+       void toggle_cpuload_display ();
        void processor_active_changed (boost::weak_ptr<ARDOUR::Processor> p);
        void plugin_going_away ();
        void automation_state_changed ();
        void preset_added_or_removed ();
        void update_preset_modified ();
 
+       bool has_descriptive_presets () const;
+
        PBD::ScopedConnection death_connection;
        PBD::ScopedConnection active_connection;
        PBD::ScopedConnection preset_added_connection;
@@ -206,7 +223,7 @@ private:
        bool is_scrollable;
 
        struct MeterInfo {
-               Gtkmm2ext::FastMeter *meter;
+               ArdourWidgets::FastMeter* meter;
                bool packed;
 
                MeterInfo () {
@@ -231,7 +248,6 @@ private:
                ArdourWidgets::ArdourButton             automate_button;
                Gtk::Label                              label;
                ArdourWidgets::ArdourDropdown*          combo;
-               Gtkmm2ext::ClickBox*                    clickbox;
                Gtk::FileChooserButton*                 file_button;
                ArdourWidgets::ArdourSpinner*           spin_box;
 
@@ -239,6 +255,7 @@ private:
                bool                                    update_pending;
                bool                                    ignore_change;
 
+
                /* output */
 
                Gtk::EventBox* display;
@@ -254,8 +271,12 @@ private:
                /* layout */
                Gtk::Table* knobtable;
                int x0, x1, y0, y1;
+
+               bool short_autostate; // modify with set_short_autostate below
        };
 
+       void set_short_autostate(ControlUI* cui, bool value);
+
        std::vector<ControlUI*>   input_controls; // workaround for preset load
        std::vector<ControlUI*>   input_controls_with_automation;
        std::vector<ControlUI*>   output_controls;
@@ -287,17 +308,32 @@ private:
 
        void knob_size_request(Gtk::Requisition* req, ControlUI* cui);
 
-       /* XXX: remove */
-       void print_parameter (char *buf, uint32_t len, uint32_t param);
-       bool integer_printer (char* buf, Gtk::Adjustment &, ControlUI *);
-       bool midinote_printer(char* buf, Gtk::Adjustment &, ControlUI *);
-
        typedef std::map<uint32_t, Gtk::FileChooserButton*> FilePathControls;
        FilePathControls _filepath_controls;
        void set_path_property (const ARDOUR::ParameterDescriptor& desc,
                                Gtk::FileChooserButton*            widget);
        void path_property_changed (uint32_t key, const ARDOUR::Variant& value);
 
+       void scroller_size_request (Gtk::Requisition*);
+       Gtk::ScrolledWindow scroller;
+
+       Gtk::Expander   _plugin_pianokeyboard_expander;
+       APianoKeyboard* _piano;
+       Gtk::VBox       _pianobox;
+       Gtk::SpinButton _piano_velocity;
+       Gtk::SpinButton _piano_channel;
+
+       void note_on_event_handler (int, int);
+       void note_off_event_handler (int);
+
+       void toggle_pianokeyboard ();
+       void build_midi_table ();
+       void midi_refill_patches ();
+       void midi_bank_patch_change (uint8_t chn);
+       void midi_bank_patch_select (uint8_t chn, uint32_t bankpgm);
+       std::vector<ArdourWidgets::ArdourDropdown*> midi_pgmsel;
+       PBD::ScopedConnectionList midi_connections;
+       std::map<uint32_t, std::string> pgm_names;
 };
 
 class PluginUIWindow : public ArdourWindow