From 209d967b1bb80a9735d690d8f4f0455ecb9970ca Mon Sep 17 00:00:00 2001 From: Taybin Rutkin Date: Sun, 25 Sep 2005 18:42:24 +0000 Subject: Initial import of gtk2_ardour. git-svn-id: svn://localhost/trunk/ardour2@24 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/plugin_ui.h | 230 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100644 gtk2_ardour/plugin_ui.h (limited to 'gtk2_ardour/plugin_ui.h') diff --git a/gtk2_ardour/plugin_ui.h b/gtk2_ardour/plugin_ui.h new file mode 100644 index 0000000000..e46d7be9c0 --- /dev/null +++ b/gtk2_ardour/plugin_ui.h @@ -0,0 +1,230 @@ +/* + Copyright (C) 2000 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. + + $Id$ +*/ + +#ifndef __ardour_plugin_ui_h__ +#define __ardour_plugin_ui_h__ + +#include +#include +#include + +#include + +#include +#include + +#include +#include + +namespace ARDOUR { + class AudioEngine; + class PluginInsert; + class Plugin; + class VSTPlugin; + class Redirect; +} + +namespace MIDI { + class Controllable; +} + +namespace Gtkmmext { + class HSliderController; + class BarController; + class ClickBox; + class FastMeter; + class PixmapButton; +} + +class PlugUIBase : public SigC::Object +{ + public: + PlugUIBase (ARDOUR::PluginInsert&); + virtual ~PlugUIBase() {} + + virtual gint get_preferred_height () = 0; + virtual gint start_updating(GdkEventAny*) = 0; + virtual gint stop_updating(GdkEventAny*) = 0; + + protected: + ARDOUR::PluginInsert& insert; + ARDOUR::Plugin& plugin; + Gtk::Combo combo; + Gtk::Button save_button; + Gtk::ToggleButton bypass_button; + + gint setting_selected(GdkEventAny* ignored); + void save_plugin_setting (void); + void bypass_toggled(); +}; + +class PluginUI : public PlugUIBase, public Gtk::VBox +{ + public: + PluginUI (ARDOUR::AudioEngine &, ARDOUR::PluginInsert& plug, bool scrollable=false); + ~PluginUI (); + + gint get_preferred_height () { return prefheight; } + + gint start_updating(GdkEventAny*); + gint stop_updating(GdkEventAny*); + + private: + ARDOUR::AudioEngine &engine; + Gtk::HBox settings_box; + Gtk::HBox hpacker; + Gtk::VBox info_vbox; + Gtk::EventBox name_ebox; + + Gtk::Table button_table; + Gtk::Table output_table; + + Gtk::ScrolledWindow scroller; + Gtk::Viewport scroller_view; + Gtk::Label nameinfo_label; + Gtk::Label paraminfo_label; + Gtk::Label makerinfo_label; + Gtk::Menu* automation_menu; + + bool setting_name_status; + + gint prefheight; + bool is_scrollable; + + struct MeterInfo { + Gtkmmext::FastMeter *meter; + + float min; + float max; + bool min_unbound; + bool max_unbound; + bool packed; + + MeterInfo(int i) { + meter = 0; + packed = false; + min = 1.0e10; + max = -1.0e10; + min_unbound = false; + max_unbound = false; + } + }; + + static const int32_t initial_button_rows = 6; + static const int32_t initial_button_cols = 1; + static const int32_t initial_output_rows = 8; + static const int32_t initial_output_cols = 1; + + struct ControlUI : public Gtk::HBox { + + uint32_t port_index; + + /* input */ + + Gtk::Adjustment* adjustment; + Gtk::Combo* combo; + std::map* combo_map; + Gtk::ToggleButton* button; + Gtkmmext::BarController* control; + Gtkmmext::ClickBox* clickbox; + Gtk::Label label; + bool logarithmic; + bool update_pending; + char ignore_change; + Gtk::Button automate_button; + + /* output */ + + Gtk::EventBox *display; + Gtk::Label* display_label; + + Gtk::VBox * vbox; + MeterInfo * meterinfo; + + ControlUI (); + ~ControlUI(); + }; + + std::vector output_controls; + SigC::Connection screen_update_connection; + void output_update(); + + void build (ARDOUR::AudioEngine &); + ControlUI* build_control_ui (ARDOUR::AudioEngine &, guint32 port_index, MIDI::Controllable *); + std::list setup_scale_values(guint32 port_index, ControlUI* cui); + void control_adjustment_changed (ControlUI* cui); + void parameter_changed (uint32_t, float, ControlUI* cui); + void update_control_display (ControlUI* cui); + void control_port_toggled (ControlUI* cui); + gint control_combo_changed (GdkEventAny* ignored, ControlUI* cui); + gint entry_focus_event (GdkEventFocus* ev); + + 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); + void start_touch (ControlUI*); + void stop_touch (ControlUI*); + + void print_parameter (char *buf, uint32_t len, uint32_t param); +}; + +class PluginUIWindow : public ArdourDialog +{ + public: + PluginUIWindow (ARDOUR::AudioEngine &, ARDOUR::PluginInsert& insert, bool scrollable=false); + ~PluginUIWindow (); + + PlugUIBase& pluginui() { return *_pluginui; } + + void resize_preferred(); + + private: + PlugUIBase* _pluginui; + void plugin_going_away (ARDOUR::Redirect*); +}; + + +#ifdef VST_SUPPORT +class VSTPluginUI : public PlugUIBase, public Gtk::VBox +{ + public: + VSTPluginUI (ARDOUR::PluginInsert&, ARDOUR::VSTPlugin&); + ~VSTPluginUI (); + + gint get_preferred_height (); + gint start_updating(GdkEventAny*) { return 0; } + gint stop_updating(GdkEventAny*) { return 0; } + + int package (Gtk::Window&); + + private: + ARDOUR::VSTPlugin& vst; + Gtk::Socket socket; + Gtk::HBox preset_box; + Gtk::VBox vpacker; + + gboolean configure_handler (GdkEventConfigure*, GtkSocket*); + void save_plugin_setting (); +}; +#endif + +#endif /* __ardour_plugin_ui_h__ */ -- cgit v1.2.3