make GTKOSX button2 emulation actually work when clicking on redirect names
[ardour.git] / gtk2_ardour / plugin_ui.h
index 4f0d92c21ca26280fb8f774426cc60b9879698ec..7bd7ffc91008080206b59def01a06f84f8860e82 100644 (file)
 #include <gtkmm/scrolledwindow.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/combobox.h>
+#include <gtkmm/liststore.h>
 #include <gtkmm/comboboxtext.h>
 #include <gtkmm/socket.h>
 
@@ -85,9 +88,15 @@ class PlugUIBase : public virtual sigc::trackable
        Gtk::ComboBoxText preset_combo;
        Gtk::Button save_button;
        Gtk::ToggleButton bypass_button;
+       Gtk::EventBox focus_button;
+       
+       Gtk::Image* focus_out_image;
+       Gtk::Image* focus_in_image;
+       bool no_load_preset;
 
        void setting_selected();
        void save_plugin_setting (void);
+       bool focus_toggled(GdkEventButton*);
        void bypass_toggled();
        void redirect_active_changed (ARDOUR::Redirect* r, void* src);
 };
@@ -184,12 +193,11 @@ class GenericPluginUI : public PlugUIBase, public Gtk::VBox
        std::vector<string> setup_scale_values(guint32 port_index, ControlUI* cui);
        void control_adjustment_changed (ControlUI* cui);
        void parameter_changed (uint32_t, float, ControlUI* cui);
+       void toggle_parameter_changed (uint32_t, float, ControlUI* cui);
        void update_control_display (ControlUI* cui);
        void control_port_toggled (ControlUI* cui);
        void control_combo_changed (ControlUI* cui);
 
-       void redirect_active_changed (ARDOUR::Redirect*, void*);
-
        void astate_clicked (ControlUI*, uint32_t parameter);
        void automation_state_changed (ControlUI*);
        void set_automation_state (ARDOUR::AutoState state, ControlUI* cui);
@@ -212,6 +220,8 @@ class PluginUIWindow : public Gtk::Window
 
        bool on_enter_notify_event (GdkEventCrossing*);
        bool on_leave_notify_event (GdkEventCrossing*);
+       bool on_focus_in_event (GdkEventFocus*);
+       bool on_focus_out_event (GdkEventFocus*);
        bool on_key_press_event (GdkEventKey*);
        bool on_key_release_event (GdkEventKey*);
        void on_show ();
@@ -256,6 +266,22 @@ class VSTPluginUI : public PlugUIBase, public Gtk::VBox
        
        bool configure_handler (GdkEventConfigure*, Gtk::Socket*);
        void save_plugin_setting ();
+
+       struct PresetModelColumns : public Gtk::TreeModel::ColumnRecord {
+           PresetModelColumns() { 
+                   add (name);
+                   add (number);
+           }
+           Gtk::TreeModelColumn<Glib::ustring> name;
+           Gtk::TreeModelColumn<int> number;
+       };
+
+       PresetModelColumns preset_columns;
+       Glib::RefPtr<Gtk::ListStore> preset_model;
+       Gtk::ComboBox vst_preset_combo;
+
+       void create_preset_store ();
+       void preset_chosen ();
 };
 #endif // VST_SUPPORT