X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fport_matrix.h;h=2b5e9ce31d1c3a874b015f20e6955f52f1f355ca;hb=e34470b7bdeefa71c081adbd957829a1c6dbf247;hp=15035fa5941e11b29ff89bd1362fc780129a9ecd;hpb=23f86529fd2c4d06285671d55f695438e9cb58ac;p=ardour.git diff --git a/gtk2_ardour/port_matrix.h b/gtk2_ardour/port_matrix.h index 15035fa594..2b5e9ce31d 100644 --- a/gtk2_ardour/port_matrix.h +++ b/gtk2_ardour/port_matrix.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2002-2009 Paul Davis + Copyright (C) 2002-2009 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -26,11 +26,15 @@ #include #include #include +#include #include + #include "ardour/bundle.h" +#include "ardour/types.h" +#include "ardour/session_handle.h" + #include "port_group.h" #include "port_matrix_types.h" -#include "i18n.h" /** The `port matrix' UI. This is a widget which lets the user alter * associations between one set of ports and another. e.g. to connect @@ -45,12 +49,18 @@ namespace ARDOUR { class Bundle; } +namespace Gtk { + namespace Menu_Helpers { + class MenuList; + } +} + class PortMatrixBody; -class PortMatrix : public Gtk::Table +class PortMatrix : public Gtk::Table, public ARDOUR::SessionHandlePtr { public: - PortMatrix (ARDOUR::Session&, ARDOUR::DataType); + PortMatrix (Gtk::Window*, ARDOUR::Session *, ARDOUR::DataType); ~PortMatrix (); void set_type (ARDOUR::DataType); @@ -58,14 +68,10 @@ public: ARDOUR::DataType type () const { return _type; } - + void disassociate_all (); void setup_scrollbars (); - void popup_menu ( - std::pair, ARDOUR::BundleChannel>, - std::pair, ARDOUR::BundleChannel>, - uint32_t - ); + void popup_menu (ARDOUR::BundleChannel, ARDOUR::BundleChannel, uint32_t); int min_height_divisor () const { return _min_height_divisor; @@ -79,6 +85,7 @@ public: LEFT_TO_BOTTOM ///< row labels to the left, column labels on the bottom }; + /** @return Arrangement in use */ Arrangement arrangement () const { return _arrangement; @@ -89,6 +96,7 @@ public: } PortGroupList const * columns () const; + boost::shared_ptr visible_columns () const; /** @return index into the _ports array for the list which is displayed as columns */ int column_index () const { @@ -96,6 +104,7 @@ public: } PortGroupList const * rows () const; + boost::shared_ptr visible_rows () const; /** @return index into the _ports array for the list which is displayed as rows */ int row_index () const { @@ -105,14 +114,24 @@ public: PortGroupList const * ports (int d) const { return &_ports[d]; } - + + boost::shared_ptr visible_ports (int d) const; + + void init (); void setup (); virtual void setup_ports (int) = 0; void setup_all_ports (); std::pair max_size () const; - void setup_max_size (); - sigc::signal MaxSizeChanged; + + bool should_show (ARDOUR::DataType) const; + uint32_t count_of_our_type (ARDOUR::ChanCount) const; + uint32_t count_of_our_type_min_1 (ARDOUR::ChanCount) const; + + PortMatrixNode::State get_association (PortMatrixNode) const; + + void flip (); + bool key_press (GdkEventKey *); /** @param c Channels; where c[0] is from _ports[0] and c[1] is from _ports[1]. * @param s New state. @@ -125,17 +144,18 @@ public: virtual PortMatrixNode::State get_state (ARDOUR::BundleChannel c[2]) const = 0; virtual bool list_is_global (int) const = 0; - virtual bool can_add_channel (boost::shared_ptr) const; - virtual void add_channel (boost::shared_ptr); + virtual bool can_add_channels (boost::shared_ptr) const; + virtual void add_channel (boost::shared_ptr, ARDOUR::DataType); virtual bool can_remove_channels (boost::shared_ptr) const; virtual void remove_channel (ARDOUR::BundleChannel); + virtual void remove_all_channels (boost::weak_ptr); virtual bool can_rename_channels (boost::shared_ptr) const { return false; } virtual void rename_channel (ARDOUR::BundleChannel) {} virtual std::string disassociation_verb () const = 0; - virtual std::string channel_noun () const { return _("channel"); } - + virtual std::string channel_noun () const; + enum Result { Cancelled, Accepted @@ -143,6 +163,8 @@ public: sigc::signal Finished; + static bool bundle_with_channels (boost::shared_ptr); + protected: /** We have two port group lists. One will be presented on the rows of the matrix, @@ -152,8 +174,7 @@ protected: from left to right as you go from list 0 to list 1. Hence subclasses which deal with inputs and outputs should put outputs in list 0 and inputs in list 1. */ PortGroupList _ports[2]; - ARDOUR::Session& _session; - + private: void hscroll_changed (); @@ -161,24 +182,48 @@ private: void routes_changed (); void reconnect_to_routes (); void select_arrangement (); - void add_channel_proxy (boost::weak_ptr); + void add_channel_proxy (boost::weak_ptr, ARDOUR::DataType); void remove_channel_proxy (boost::weak_ptr, uint32_t); void rename_channel_proxy (boost::weak_ptr, uint32_t); void disassociate_all_on_channel (boost::weak_ptr, uint32_t, int); + void disassociate_all_on_bundle (boost::weak_ptr, int); void setup_global_ports (); - void hide_group (boost::weak_ptr); - void show_group (boost::weak_ptr); + void setup_global_ports_proxy (ARDOUR::RouteSortOrderKey); void toggle_show_only_bundles (); bool on_scroll_event (GdkEventScroll *); boost::shared_ptr io_from_bundle (boost::shared_ptr) const; - - /// port type that we are working with + void setup_notebooks (); + void remove_notebook_pages (Gtk::Notebook &); + void notebook_page_selected (GtkNotebookPage *, guint); + void route_processors_changed (ARDOUR::RouteProcessorChange); + void body_dimensions_changed (); + void session_going_away (); + void add_remove_option (Gtk::Menu_Helpers::MenuList &, boost::weak_ptr, int); + void add_disassociate_option (Gtk::Menu_Helpers::MenuList &, boost::weak_ptr, int, int); + void port_connected_or_disconnected (); + void update_tab_highlighting (); + std::pair check_flip () const; + bool can_flip () const; + + Gtk::Window* _parent; + + /** port type that we are working with, or NIL if we are working with all of them */ ARDOUR::DataType _type; - std::vector _route_connections; + PBD::ScopedConnectionList _route_connections; + PBD::ScopedConnectionList _changed_connections; + PBD::ScopedConnectionList _bundle_changed_connections; PortMatrixBody* _body; Gtk::HScrollbar _hscroll; Gtk::VScrollbar _vscroll; + Gtk::Notebook _vnotebook; + Gtk::Notebook _hnotebook; + Gtk::Label _vlabel; + Gtk::Label _hlabel; + Gtk::VBox _vbox; + Gtk::HBox _hbox; + Gtk::Label _hspacer; + Gtk::Label _vspacer; Gtk::Menu* _menu; Arrangement _arrangement; int _row_index; @@ -186,7 +231,7 @@ private: int _min_height_divisor; bool _show_only_bundles; bool _inhibit_toggle_show_only_bundles; - bool _realized; + bool _ignore_notebook_page_selected; }; #endif