X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fprocessor_box.h;h=f348569f71164072eb3e6150fe4a0104f42334d1;hb=314f0d91d39922b6990c28d4f2cbdaef54feee34;hp=8509d4282535eaeae4e3f3541fdfb2a8142f9050;hpb=dfe46da1698b32984eb56d33e9de0dbd84de5179;p=ardour.git diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h index 8509d42825..f348569f71 100644 --- a/gtk2_ardour/processor_box.h +++ b/gtk2_ardour/processor_box.h @@ -20,20 +20,23 @@ #ifndef __ardour_gtk_processor_box__ #define __ardour_gtk_processor_box__ +#include #include -#include +#include + #include #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" #include "ardour/types.h" #include "ardour/ardour.h" @@ -41,6 +44,7 @@ #include "ardour/port_insert.h" #include "ardour/processor.h" #include "ardour/route.h" +#include "ardour/session_handle.h" #include "pbd/fastlog.h" @@ -48,6 +52,7 @@ #include "io_selector.h" #include "send_ui.h" #include "enums.h" +#include "window_proxy.h" class MotionController; class PluginSelector; @@ -67,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: @@ -75,8 +106,18 @@ 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_width (Width); + void set_enum_width (Width); + virtual void set_pixel_width (int) {} protected: @@ -86,15 +127,21 @@ private: void active_toggled (); void processor_active_changed (); - void processor_name_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; }; class SendProcessorEntry : public ProcessorEntry @@ -104,6 +151,9 @@ public: static void setup_slider_pix (); + void set_enum_width (Width, int); + void set_pixel_width (int); + private: void show_gain (); void gain_adjusted (); @@ -112,15 +162,16 @@ private: Gtk::Adjustment _adjustment; Gtkmm2ext::HSliderController _fader; bool _ignore_gain_change; - + PBD::ScopedConnection send_gain_connection; + static Glib::RefPtr _slider; }; -class ProcessorBox : public Gtk::HBox, public PluginInterestedObject +class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARDOUR::SessionHandlePtr { public: - ProcessorBox (ARDOUR::Session&, sigc::slot get_plugin_selector, - RouteRedirectSelection&, MixerStrip* parent, bool owner_is_mixer = false); + ProcessorBox (ARDOUR::Session*, boost::function get_plugin_selector, + RouteRedirectSelection&, MixerStrip* parent, bool owner_is_mixer = false); ~ProcessorBox (); void set_route (boost::shared_ptr); @@ -134,20 +185,27 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject 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; - ARDOUR::Session & _session; MixerStrip* _parent_strip; // null if in RouteParamsUI bool _owner_is_mixer; bool ab_direction; - std::vector connections; + PBD::ScopedConnectionList _mixer_strip_connections; + PBD::ScopedConnectionList _route_connections; - sigc::slot _get_plugin_selector; + boost::function _get_plugin_selector; boost::shared_ptr _processor_being_created; @@ -184,11 +242,10 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject void choose_aux (boost::weak_ptr); void choose_send (); void send_io_finished (IOSelector::Result, boost::weak_ptr, IOSelectorWindow*); - void choose_return (); 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; @@ -201,8 +258,8 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject void redisplay_processors (); void add_processor_to_display (boost::weak_ptr); void reordered (); - - void remove_processor_gui (boost::shared_ptr); + void report_failed_reorder (); + void route_processors_changed (ARDOUR::RouteProcessorChange); void processors_reordered (const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&, int*); void compute_processor_sort_keys (); @@ -228,28 +285,34 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject void rename_processors (); void for_selected_processors (void (ProcessorBox::*pmf)(boost::shared_ptr)); - void get_selected_processors (ProcSelection&); + void get_selected_processors (ProcSelection&) const; + bool can_cut() const; + + 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); 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 (); + static ProcessorBox* _current_processor_box; static void rb_choose_aux (boost::weak_ptr); static void rb_choose_plugin (); static void rb_choose_insert (); static void rb_choose_send (); - static void rb_choose_return (); static void rb_clear (); static void rb_clear_pre (); static void rb_clear_post (); @@ -261,14 +324,21 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject static void rb_select_all (); static void rb_deselect_all (); static void rb_activate_all (); - static void rb_deactivate (); - static void rb_activate (); static void rb_deactivate_all (); static void rb_ab_plugins (); static void rb_edit (); - void route_name_changed (); + 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__ */