X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fprocessor_box.h;h=a17903c323d65268f8f5ae8afa0a7ebc673c0c87;hb=4770fea0a2b9b71850de9764868b53f85bfd594c;hp=6a9c1312adbbc7782ae73f396c097443cdf8308a;hpb=4a9f3173ee806f5e3955c30c1bacb60cdbcc1f96;p=ardour.git diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h index 6a9c1312ad..a17903c323 100644 --- a/gtk2_ardour/processor_box.h +++ b/gtk2_ardour/processor_box.h @@ -53,6 +53,7 @@ #include "send_ui.h" #include "enums.h" #include "window_proxy.h" +#include "ardour_button.h" class MotionController; class PluginSelector; @@ -106,27 +107,39 @@ public: Gtk::EventBox& action_widget (); Gtk::Widget& widget (); std::string drag_text () const; + void set_visual_state (Gtkmm2ext::VisualState, bool); + + 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) {} + /** Hide any widgets that should be hidden */ + virtual void hide_things () {} + protected: - + ArdourButton _button; Gtk::VBox _vbox; - -private: + Position _position; + + virtual void setup_visuals (); - void active_toggled (); +private: + void led_clicked(); 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; + std::string name (Width) const; + void setup_tooltip (); + boost::shared_ptr _processor; Width _width; + Gtk::StateType _visual_state; PBD::ScopedConnection active_connection; PBD::ScopedConnection name_connection; }; @@ -144,19 +157,53 @@ public: private: void show_gain (); void gain_adjusted (); - + void setup_gain_adjustment (); + boost::shared_ptr _send; Gtk::Adjustment _adjustment; Gtkmm2ext::HSliderController _fader; bool _ignore_gain_change; - PBD::ScopedConnection send_gain_connection; + PBD::ScopedConnectionList _send_connections; + ARDOUR::DataType _data_type; static Glib::RefPtr _slider; }; +class PluginInsertProcessorEntry : public ProcessorEntry +{ +public: + PluginInsertProcessorEntry (boost::shared_ptr, Width); + + 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; +}; + class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARDOUR::SessionHandlePtr { public: + enum ProcessorOperation { + ProcessorsCut, + ProcessorsCopy, + ProcessorsPaste, + ProcessorsDelete, + ProcessorsSelectAll, + ProcessorsToggleActive, + ProcessorsAB, + }; + ProcessorBox (ARDOUR::Session*, boost::function get_plugin_selector, RouteRedirectSelection&, MixerStrip* parent, bool owner_is_mixer = false); ~ProcessorBox (); @@ -166,15 +213,20 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD void update(); + void processor_operation (ProcessorOperation); + void select_all_processors (); void deselect_all_processors (); void select_all_plugins (); void select_all_inserts (); void select_all_sends (); + void hide_things (); + Gtk::Window* get_processor_ui (boost::shared_ptr) const; void toggle_edit_processor (boost::shared_ptr); - + void toggle_processor_controls (boost::shared_ptr); + sigc::signal > ProcessorSelected; sigc::signal > ProcessorUnselected; @@ -184,7 +236,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD /* prevent copy construction */ ProcessorBox (ProcessorBox const &); - + boost::shared_ptr _route; MixerStrip* _parent_strip; // null if in RouteParamsUI bool _owner_is_mixer; @@ -196,16 +248,15 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD boost::shared_ptr _processor_being_created; - ARDOUR::Placement _placement; + /** Index at which to place a new plugin (based on where the menu was opened), or -1 to + * put at the end of the plugin list. + */ + int _placement; RouteRedirectSelection& _rr_selection; void route_going_away (); - void selection_changed (); - - Gtk::EventBox processor_eventbox; - Gtk::HBox processor_hpacker; Gtkmm2ext::DnDVBox processor_display; Gtk::ScrolledWindow processor_scroller; @@ -223,7 +274,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD gint processor_menu_map_handler (GdkEventAny *ev); Gtk::Menu * build_processor_menu (); void build_processor_tooltip (Gtk::EventBox&, std::string); - void show_processor_menu (gint arg); + void show_processor_menu (int); Gtk::Menu* build_possible_aux_menu(); void choose_aux (boost::weak_ptr); @@ -238,8 +289,6 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD 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 *, ProcessorEntry *); bool processor_button_release_event (GdkEventButton *, ProcessorEntry *); void redisplay_processors (); @@ -247,6 +296,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD void reordered (); void report_failed_reorder (); void route_processors_changed (ARDOUR::RouteProcessorChange); + void processor_menu_unmapped (); void processors_reordered (const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&, int*); void compute_processor_sort_keys (); @@ -258,13 +308,12 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD typedef std::vector > ProcSelection; void cut_processors (const ProcSelection&); - void cut_processors (); void copy_processors (const ProcSelection&); - void copy_processors (); void delete_processors (const ProcSelection&); - void delete_processors (); 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 (); @@ -274,12 +323,13 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject, public ARD void for_selected_processors (void (ProcessorBox::*pmf)(boost::shared_ptr)); void get_selected_processors (ProcSelection&) const; - bool can_cut() 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; + static Glib::RefPtr controls_action; void paste_processor_state (const XMLNodeList&, boost::shared_ptr); void activate_processor (boost::shared_ptr); @@ -292,6 +342,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); @@ -312,6 +364,7 @@ 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_controls (); void route_property_changed (const PBD::PropertyChange&); std::string generate_processor_title (boost::shared_ptr pi);