X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fprocessor_box.h;h=9622011654a7eee104812a452a63ff3d9aff795b;hb=603748d68af1009fac47b284bf6f8815745586c7;hp=157cdbf27e30207a31b10fb9769c547b6422c031;hpb=a97376dd808f72e0bc0c1a0f40c1a6244f0b0c3c;p=ardour.git diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h index 157cdbf27e..9622011654 100644 --- a/gtk2_ardour/processor_box.h +++ b/gtk2_ardour/processor_box.h @@ -53,8 +53,8 @@ #include "io_selector.h" #include "send_ui.h" #include "enums.h" -#include "window_proxy.h" #include "ardour_button.h" +#include "window_manager.h" class MotionController; class PluginSelector; @@ -75,28 +75,34 @@ namespace ARDOUR { class ProcessorBox; -/** A WindowProxy for Processor UI windows; it knows how to ask a ProcessorBox - * to create a UI window for a particular processor. - */ -class ProcessorWindowProxy : public WindowProxy +class ProcessorWindowProxy : public WM::ProxyBase { -public: - ProcessorWindowProxy (std::string const &, XMLNode const *, ProcessorBox *, boost::weak_ptr); + public: + ProcessorWindowProxy (std::string const &, ProcessorBox *, boost::weak_ptr); + ~ProcessorWindowProxy(); - void show (); - bool rc_configured () const { - return false; - } + Gtk::Window* get (bool create = false); + + boost::weak_ptr processor () const { + return _processor; + } - boost::weak_ptr processor () const { - return _processor; - } + ARDOUR::SessionHandlePtr* session_handle(); + void toggle(); + void set_custom_ui_mode(bool use_custom) { want_custom = use_custom; } - bool marked; + void set_state (const XMLNode&); + XMLNode& get_state () const; -private: - ProcessorBox* _processor_box; - boost::weak_ptr _processor; + private: + ProcessorBox* _processor_box; + boost::weak_ptr _processor; + bool is_custom; + bool want_custom; + bool _valid; + + void processor_going_away (); + PBD::ScopedConnection going_away_connection; }; class ProcessorEntry : public Gtkmm2ext::DnDVBoxChild, public sigc::trackable @@ -110,13 +116,16 @@ public: std::string drag_text () const; void set_visual_state (Gtkmm2ext::VisualState, bool); + bool is_selectable() const {return _selectable;} + void set_selectable(bool s) { _selectable = s; } + enum Position { PreFader, Fader, PostFader }; - void set_position (Position); + void set_position (Position, uint32_t); boost::shared_ptr processor () const; void set_enum_width (Width); @@ -129,27 +138,31 @@ public: void set_control_state (XMLNode const *); std::string state_id () const; Gtk::Menu* build_controls_menu (); + Gtk::Menu* build_send_options_menu (); protected: ArdourButton _button; Gtk::VBox _vbox; Position _position; + uint32_t _position_num; virtual void setup_visuals (); private: + bool _selectable; void led_clicked(); void processor_active_changed (); void processor_property_changed (const PBD::PropertyChange&); + void processor_configuration_changed (const ARDOUR::ChanCount in, const ARDOUR::ChanCount out); std::string name (Width) const; void setup_tooltip (); ProcessorBox* _parent; boost::shared_ptr _processor; Width _width; - Gtk::StateType _visual_state; PBD::ScopedConnection active_connection; PBD::ScopedConnection name_connection; + PBD::ScopedConnection config_connection; class Control : public sigc::trackable { public: @@ -159,7 +172,6 @@ private: void add_state (XMLNode *) const; void set_state (XMLNode const *); void hide_things (); - void hide_label (); bool visible () const { return _visible; @@ -169,7 +181,7 @@ private: return _name; } - Gtk::VBox box; + Gtk::Alignment box; private: void slider_adjusted (); @@ -182,7 +194,6 @@ private: /* things for a slider */ Gtk::Adjustment _adjustment; Gtkmm2ext::HSliderController _slider; - Gtk::Label _label; Gtkmm2ext::PersistentTooltip _slider_persistant_tooltip; /* things for a button */ ArdourButton _button; @@ -195,12 +206,44 @@ private: std::list _controls; void toggle_control_visibility (Control *); -}; + void toggle_panner_link (); -class BlankProcessorEntry : public ProcessorEntry -{ - public: - BlankProcessorEntry (ProcessorBox *, Width w); + class PortIcon : public Gtk::DrawingArea { + public: + PortIcon(bool input) { + _input = input; + _ports = ARDOUR::ChanCount(ARDOUR::DataType::AUDIO, 1); + set_size_request (-1, 2); + } + void set_ports(ARDOUR::ChanCount const ports) { _ports = ports; } + private: + bool on_expose_event (GdkEventExpose *); + bool _input; + ARDOUR::ChanCount _ports; + }; + + class RoutingIcon : public Gtk::DrawingArea { + public: + RoutingIcon() { + _sources = ARDOUR::ChanCount(ARDOUR::DataType::AUDIO, 1); + _sinks = ARDOUR::ChanCount(ARDOUR::DataType::AUDIO, 1); + _splitting = false; + set_size_request (-1, 4); + } + void set_sources(ARDOUR::ChanCount const sources) { _sources = sources; } + void set_sinks(ARDOUR::ChanCount const sinks) { _sinks = sinks; } + void set_splitting(const bool splitting) { _splitting = splitting; } + private: + bool on_expose_event (GdkEventExpose *); + ARDOUR::ChanCount _sources; // signals available to feed into the processor(s) + ARDOUR::ChanCount _sinks; // combined number of outputs of the processor + bool _splitting; + }; + +protected: + RoutingIcon _routing_icon; + PortIcon _input_icon; + PortIcon _output_icon; }; class PluginInsertProcessorEntry : public ProcessorEntry @@ -211,17 +254,9 @@ public: void hide_things (); private: - void setup_visuals (); void plugin_insert_splitting_changed (); - - /* XXX: this seems a little ridiculous just for a simple scaleable icon */ - class SplittingIcon : public Gtk::DrawingArea { - private: - bool on_expose_event (GdkEventExpose *); - }; - boost::shared_ptr _plugin_insert; - SplittingIcon _splitting_icon; + PBD::ScopedConnection _splitting_connection; }; @@ -234,6 +269,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD ProcessorsPaste, ProcessorsDelete, ProcessorsSelectAll, + ProcessorsSelectNone, ProcessorsToggleActive, ProcessorsAB, }; @@ -245,7 +281,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD void set_route (boost::shared_ptr); void set_width (Width); - void processor_operation (ProcessorOperation); + bool processor_operation (ProcessorOperation); void select_all_processors (); void deselect_all_processors (); @@ -255,9 +291,17 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD void hide_things (); + bool edit_aux_send(boost::shared_ptr); + + /* Everything except a WindowProxy object should use this to get the window */ Gtk::Window* get_processor_ui (boost::shared_ptr) const; - void toggle_edit_processor (boost::shared_ptr); - void toggle_edit_generic_processor (boost::shared_ptr); + + /* a WindowProxy object can use this */ + Gtk::Window* get_editor_window (boost::shared_ptr, bool); + Gtk::Window* get_generic_editor_window (boost::shared_ptr); + + void edit_processor (boost::shared_ptr); + void generic_edit_processor (boost::shared_ptr); void update_gui_object_state (ProcessorEntry *); @@ -292,6 +336,8 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD void route_going_away (); + bool is_editor_mixer_strip() const; + Gtkmm2ext::DnDVBox processor_display; Gtk::ScrolledWindow processor_scroller; @@ -393,7 +439,11 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD void route_property_changed (const PBD::PropertyChange&); std::string generate_processor_title (boost::shared_ptr pi); - std::list _processor_window_proxies; + //typedef std::list ProcessorWindowProxies; + //ProcessorWindowProxies _processor_window_info; + + ProcessorWindowProxy* find_window_proxy (boost::shared_ptr) const; + void set_processor_ui (boost::shared_ptr, Gtk::Window *); void maybe_add_processor_to_ui_list (boost::weak_ptr); @@ -403,6 +453,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD void mixer_strip_delivery_changed (boost::weak_ptr); XMLNode* entry_gui_object_state (ProcessorEntry *); + PBD::ScopedConnection amp_config_connection; }; #endif /* __ardour_gtk_processor_box__ */