X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fprocessor_box.h;h=1e4257d22b16d207a2299dc8ed100b112ef40f55;hb=69c9e2296c1436e3959b6702110c03738d2a5549;hp=cf5629952416b98f36027783005f35e4eec3fc66;hpb=b99b507be9cb290ff9fc2d6197af045964eb68a2;p=ardour.git diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h index cf56299524..1e4257d22b 100644 --- a/gtk2_ardour/processor_box.h +++ b/gtk2_ardour/processor_box.h @@ -20,9 +20,11 @@ #ifndef __ardour_gtk_processor_box__ #define __ardour_gtk_processor_box__ +#include #include -#include +#include + #include #include #include @@ -30,9 +32,11 @@ #include #include #include -#include +#include +#include #include "pbd/stateful.h" +#include "pbd/signals.h" #include "ardour/types.h" #include "ardour/ardour.h" @@ -40,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" @@ -66,11 +71,67 @@ namespace ARDOUR { class Session; } -class ProcessorBox : public Gtk::HBox, public PluginInterestedObject +class ProcessorEntry : public Gtkmm2ext::DnDVBoxChild, public sigc::trackable +{ +public: + ProcessorEntry (boost::shared_ptr, Width); + + Gtk::EventBox& action_widget (); + Gtk::Widget& widget (); + std::string drag_text () const; + boost::shared_ptr processor () const; + void set_enum_width (Width); + virtual void set_pixel_width (int) {} + +protected: + + Gtk::VBox _vbox; + +private: + + void active_toggled (); + void processor_active_changed (); + void processor_property_changed (const PBD::PropertyChange&); + std::string name () const; + + Gtk::EventBox _event_box; + Gtk::Label _name; + Gtk::HBox _hbox; + Gtk::CheckButton _active; + boost::shared_ptr _processor; + Width _width; + PBD::ScopedConnection active_connection; + PBD::ScopedConnection name_connection; +}; + +class SendProcessorEntry : public ProcessorEntry +{ +public: + SendProcessorEntry (boost::shared_ptr, Width); + + static void setup_slider_pix (); + + void set_enum_width (Width, int); + void set_pixel_width (int); + +private: + void show_gain (); + void gain_adjusted (); + + boost::shared_ptr _send; + 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, 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); @@ -91,13 +152,12 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject private: 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 connections; - sigc::slot _get_plugin_selector; + boost::function _get_plugin_selector; boost::shared_ptr _processor_being_created; @@ -107,33 +167,14 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject void route_going_away (); - struct ModelColumns : public Gtk::TreeModel::ColumnRecord { - ModelColumns () { - add (text); - add (processor); - add (color); - } - Gtk::TreeModelColumn text; - Gtk::TreeModelColumn > processor; - Gtk::TreeModelColumn color; - }; - - ModelColumns columns; - Glib::RefPtr model; - void selection_changed (); - static bool get_colors; - static Gdk::Color* active_processor_color; - static Gdk::Color* inactive_processor_color; - Gtk::EventBox processor_eventbox; Gtk::HBox processor_hpacker; - Gtkmm2ext::DnDTreeView > processor_display; + Gtkmm2ext::DnDVBox processor_display; Gtk::ScrolledWindow processor_scroller; - void object_drop (const std::list >&, Gtk::TreeView*, - int x, int y, Glib::RefPtr& context); + void object_drop (Gtkmm2ext::DnDVBox *, ProcessorEntry *, Glib::RefPtr const &); Width _width; @@ -153,38 +194,29 @@ 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; - bool ignore_delete; bool enter_notify (GdkEventCrossing *ev); bool leave_notify (GdkEventCrossing *ev); bool processor_key_press_event (GdkEventKey *); bool processor_key_release_event (GdkEventKey *); - bool processor_button_press_event (GdkEventButton *); - bool processor_button_release_event (GdkEventButton *); + bool processor_button_press_event (GdkEventButton *, ProcessorEntry *); + bool processor_button_release_event (GdkEventButton *, ProcessorEntry *); void redisplay_processors (); void add_processor_to_display (boost::weak_ptr); - void row_deleted (const Gtk::TreeModel::Path& path); - void show_processor_active (boost::weak_ptr); - void show_processor_name (boost::weak_ptr); - std::string processor_name (boost::weak_ptr); + void reordered (); + 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 (); - std::vector processor_active_connections; - std::vector processor_name_connections; - bool processor_drag_in_progress; - void processor_drag_begin (GdkDragContext*); - void processor_drag_end (GdkDragContext*); void all_processors_active(bool state); void all_plugins_active(bool state); void ab_plugins (); @@ -206,9 +238,13 @@ 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; void paste_processor_state (const XMLNodeList&, boost::shared_ptr); void activate_processor (boost::shared_ptr); @@ -220,6 +256,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject gint idle_delete_processor (boost::weak_ptr); void weird_plugin_dialog (ARDOUR::Plugin& p, ARDOUR::Route::ProcessorStreams streams); + void on_size_allocate (Gtk::Allocation &); static ProcessorBox* _current_processor_box; @@ -227,7 +264,6 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject 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 (); @@ -238,14 +274,12 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject static void rb_rename (); static void rb_select_all (); static void rb_deselect_all (); - static void rb_activate (); - static void rb_deactivate (); static void rb_activate_all (); 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); };