X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fprocessor_box.h;h=a72eb3223dff0e76b09e2cbe97d0febc9b8c9ed2;hb=d176cbc80476cdc8ca082631efc171ea39116d63;hp=364ab7b1165919675953f1d715beb85eb275dd78;hpb=a8bb49e5d89f2689d6aeb61381e3c4bd3560d859;p=ardour.git diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h index 364ab7b116..a72eb3223d 100644 --- a/gtk2_ardour/processor_box.h +++ b/gtk2_ardour/processor_box.h @@ -34,6 +34,7 @@ #include "gtkmm2ext/click_box.h" #include "gtkmm2ext/dndvbox.h" #include "gtkmm2ext/pixfader.h" +#include "gtkmm2ext/persistent_tooltip.h" #include "pbd/stateful.h" #include "pbd/signals.h" @@ -52,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; @@ -74,34 +75,37 @@ 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); - 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; + bool marked; -private: - ProcessorBox* _processor_box; - boost::weak_ptr _processor; + void set_state (const XMLNode&); + XMLNode& get_state () const; + + private: + ProcessorBox* _processor_box; + boost::weak_ptr _processor; + bool is_custom; + bool want_custom; }; class ProcessorEntry : public Gtkmm2ext::DnDVBoxChild, public sigc::trackable { public: - ProcessorEntry (boost::shared_ptr, Width); + ProcessorEntry (ProcessorBox *, boost::shared_ptr, Width); ~ProcessorEntry (); Gtk::EventBox& action_widget (); @@ -118,7 +122,6 @@ public: void set_position (Position); boost::shared_ptr processor () const; void set_enum_width (Width); - virtual void set_pixel_width (int); /** Hide any widgets that should be hidden */ virtual void hide_things (); @@ -128,8 +131,7 @@ public: void add_control_state (XMLNode *) const; void set_control_state (XMLNode const *); std::string state_id () const; - - static void setup_slider_pix (); + Gtk::Menu* build_controls_menu (); protected: ArdourButton _button; @@ -138,8 +140,6 @@ protected: virtual void setup_visuals (); - static Glib::RefPtr _slider_pixbuf; - private: void led_clicked(); void processor_active_changed (); @@ -147,52 +147,69 @@ private: 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; - class Control { + class Control : public sigc::trackable { public: - Control (Glib::RefPtr, boost::shared_ptr, std::string const &); + Control (boost::shared_ptr, std::string const &); - void set_pixel_width (int); - void show (); - void hide (); + void set_visible (bool); void add_state (XMLNode *) const; void set_state (XMLNode const *); void hide_things (); + void hide_label (); + + bool visible () const { + return _visible; + } + + std::string name () const { + return _name; + } Gtk::VBox box; private: void slider_adjusted (); + void button_clicked (); void control_changed (); std::string state_id () const; + void set_tooltip (); boost::weak_ptr _control; + /* things for a slider */ Gtk::Adjustment _adjustment; Gtkmm2ext::HSliderController _slider; Gtk::Label _label; - bool _ignore_slider_adjustment; + Gtkmm2ext::PersistentTooltip _slider_persistant_tooltip; + /* things for a button */ + ArdourButton _button; + bool _ignore_ui_adjustment; PBD::ScopedConnection _connection; bool _visible; + std::string _name; }; std::list _controls; + + void toggle_control_visibility (Control *); }; class BlankProcessorEntry : public ProcessorEntry { public: - BlankProcessorEntry (Width w); + BlankProcessorEntry (ProcessorBox *, Width w); }; class PluginInsertProcessorEntry : public ProcessorEntry { public: - PluginInsertProcessorEntry (boost::shared_ptr, Width); + PluginInsertProcessorEntry (ProcessorBox *, boost::shared_ptr, Width); void hide_things (); @@ -231,8 +248,6 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD void set_route (boost::shared_ptr); void set_width (Width); - void update(); - void processor_operation (ProcessorOperation); void select_all_processors (); @@ -243,9 +258,20 @@ 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); + /* 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 *); + sigc::signal > ProcessorSelected; sigc::signal > ProcessorUnselected; @@ -283,15 +309,13 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD void object_drop (Gtkmm2ext::DnDVBox *, ProcessorEntry *, Glib::RefPtr const &); Width _width; + bool _redisplay_pending; Gtk::Menu *processor_menu; gint processor_menu_map_handler (GdkEventAny *ev); Gtk::Menu * build_processor_menu (); void show_processor_menu (int); Gtk::Menu* build_possible_aux_menu(); - Gtk::Menu* build_controls_menu (boost::shared_ptr); - - void show_or_hide_all_controls (boost::weak_ptr, bool); void choose_aux (boost::weak_ptr); void choose_send (); @@ -328,8 +352,6 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD void delete_processors (const ProcSelection&); void paste_processors (); void paste_processors (boost::shared_ptr before); - void processors_up (); - void processors_down (); void delete_dragged_processors (const std::list >&); void clear_processors (); @@ -345,18 +367,15 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD static Glib::RefPtr paste_action; static Glib::RefPtr rename_action; static Glib::RefPtr edit_action; - static Glib::RefPtr controls_action; + static Glib::RefPtr edit_generic_action; void paste_processor_state (const XMLNodeList&, boost::shared_ptr); - void activate_processor (boost::shared_ptr); - void deactivate_processor (boost::shared_ptr); void hide_processor_editor (boost::shared_ptr); void rename_processor (boost::shared_ptr); gint idle_delete_processor (boost::weak_ptr); void weird_plugin_dialog (ARDOUR::Plugin& p, ARDOUR::Route::ProcessorStreams streams); - void on_size_allocate (Gtk::Allocation &); void setup_entry_positions (); @@ -380,11 +399,14 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD static void rb_deactivate_all (); static void rb_ab_plugins (); static void rb_edit (); + static void rb_edit_generic (); void route_property_changed (const PBD::PropertyChange&); std::string generate_processor_title (boost::shared_ptr pi); - std::list _processor_window_proxies; + std::list _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); @@ -393,7 +415,6 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD void mixer_strip_delivery_changed (boost::weak_ptr); - void update_gui_object_state (ProcessorEntry *); XMLNode* entry_gui_object_state (ProcessorEntry *); };