X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fprocessor_box.h;h=f348569f71164072eb3e6150fe4a0104f42334d1;hb=314f0d91d39922b6990c28d4f2cbdaef54feee34;hp=74ab5c85bb7753a9c6ccbea0bebbfa0e4a836feb;hpb=6ef5d85ae1f2c500c4163cd1df580b3f26991c1e;p=ardour.git diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h index 74ab5c85bb..f348569f71 100644 --- a/gtk2_ardour/processor_box.h +++ b/gtk2_ardour/processor_box.h @@ -29,11 +29,11 @@ #include #include #include -#include -#include -#include -#include -#include +#include "gtkmm2ext/dndtreeview.h" +#include "gtkmm2ext/auto_spin.h" +#include "gtkmm2ext/click_box.h" +#include "gtkmm2ext/dndvbox.h" +#include "gtkmm2ext/pixfader.h" #include "pbd/stateful.h" #include "pbd/signals.h" @@ -52,6 +52,7 @@ #include "io_selector.h" #include "send_ui.h" #include "enums.h" +#include "window_proxy.h" class MotionController; class PluginSelector; @@ -71,6 +72,32 @@ namespace ARDOUR { class Session; } +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 +{ +public: + ProcessorWindowProxy (std::string const &, XMLNode const *, ProcessorBox *, boost::weak_ptr); + + void show (); + bool rc_configured () const { + return false; + } + + boost::weak_ptr processor () const { + return _processor; + } + + bool marked; + +private: + ProcessorBox* _processor_box; + boost::weak_ptr _processor; +}; + class ProcessorEntry : public Gtkmm2ext::DnDVBoxChild, public sigc::trackable { public: @@ -79,6 +106,15 @@ public: Gtk::EventBox& action_widget (); Gtk::Widget& widget (); std::string drag_text () const; + void set_visual_state (Gtk::StateType); + + enum Position { + PreFader, + Fader, + PostFader + }; + + void set_position (Position); boost::shared_ptr processor () const; void set_enum_width (Width); virtual void set_pixel_width (int) {} @@ -93,13 +129,17 @@ private: void processor_active_changed (); void processor_property_changed (const PBD::PropertyChange&); std::string name () const; - + void setup_visuals (); + + Gtk::Frame _frame; Gtk::EventBox _event_box; Gtk::Label _name; Gtk::HBox _hbox; Gtk::CheckButton _active; boost::shared_ptr _processor; Width _width; + Gtk::StateType _visual_state; + Position _position; PBD::ScopedConnection active_connection; PBD::ScopedConnection name_connection; }; @@ -145,17 +185,25 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD void select_all_inserts (); void select_all_sends (); + Gtk::Window* get_processor_ui (boost::shared_ptr) const; + void toggle_edit_processor (boost::shared_ptr); + sigc::signal > ProcessorSelected; sigc::signal > ProcessorUnselected; static void register_actions(); private: + + /* prevent copy construction */ + ProcessorBox (ProcessorBox const &); + boost::shared_ptr _route; MixerStrip* _parent_strip; // null if in RouteParamsUI bool _owner_is_mixer; bool ab_direction; - PBD::ScopedConnectionList connections; + PBD::ScopedConnectionList _mixer_strip_connections; + PBD::ScopedConnectionList _route_connections; boost::function _get_plugin_selector; @@ -197,7 +245,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD void return_io_finished (IOSelector::Result, boost::weak_ptr, IOSelectorWindow*); void choose_insert (); void choose_plugin (); - void use_plugins (const SelectedPlugins&); + bool use_plugins (const SelectedPlugins&); bool no_processor_redisplay; @@ -210,10 +258,9 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD void redisplay_processors (); void add_processor_to_display (boost::weak_ptr); void reordered (); + void report_failed_reorder (); void route_processors_changed (ARDOUR::RouteProcessorChange); - void remove_processor_gui (boost::shared_ptr); - void processors_reordered (const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&, int*); void compute_processor_sort_keys (); @@ -244,11 +291,12 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD static Glib::RefPtr cut_action; static Glib::RefPtr paste_action; + static Glib::RefPtr rename_action; + static Glib::RefPtr edit_action; void paste_processor_state (const XMLNodeList&, boost::shared_ptr); void activate_processor (boost::shared_ptr); void deactivate_processor (boost::shared_ptr); - void edit_processor (boost::shared_ptr); void hide_processor_editor (boost::shared_ptr); void rename_processor (boost::shared_ptr); @@ -257,6 +305,8 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD void weird_plugin_dialog (ARDOUR::Plugin& p, ARDOUR::Route::ProcessorStreams streams); void on_size_allocate (Gtk::Allocation &); + void setup_entry_positions (); + static ProcessorBox* _current_processor_box; static void rb_choose_aux (boost::weak_ptr); @@ -280,6 +330,15 @@ 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; + void set_processor_ui (boost::shared_ptr, Gtk::Window *); + void maybe_add_processor_to_ui_list (boost::weak_ptr); + + bool one_processor_can_be_edited (); + bool processor_can_be_edited (boost::shared_ptr); + + void mixer_strip_delivery_changed (boost::weak_ptr); }; #endif /* __ardour_gtk_processor_box__ */