+ void setup_scrollbars ();
+ void popup_menu (ARDOUR::BundleChannel, ARDOUR::BundleChannel, uint32_t);
+
+ int min_height_divisor () const {
+ return _min_height_divisor;
+ }
+ void set_min_height_divisor (int f) {
+ _min_height_divisor = f;
+ }
+
+ enum Arrangement {
+ TOP_TO_RIGHT, ///< column labels on top, row labels to the right
+ LEFT_TO_BOTTOM ///< row labels to the left, column labels on the bottom
+ };
+
+
+ /** @return Arrangement in use */
+ Arrangement arrangement () const {
+ return _arrangement;
+ }
+
+ bool show_only_bundles () const {
+ return _show_only_bundles;
+ }
+
+ PortGroupList const * columns () const;
+ boost::shared_ptr<const PortGroup> visible_columns () const;
+
+ /** @return index into the _ports array for the list which is displayed as columns */
+ int column_index () const {
+ return _column_index;
+ }
+
+ PortGroupList const * rows () const;
+ boost::shared_ptr<const PortGroup> visible_rows () const;
+
+ /** @return index into the _ports array for the list which is displayed as rows */
+ int row_index () const {
+ return _row_index;
+ }
+
+ PortGroupList const * ports (int d) const {
+ return &_ports[d];
+ }
+
+ boost::shared_ptr<const PortGroup> visible_ports (int d) const;
+
+ void init ();
+ void setup ();
+ virtual void setup_ports (int) = 0;
+ void setup_all_ports ();
+
+ std::pair<uint32_t, uint32_t> max_size () const;
+
+ 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.
+ */
+ virtual void set_state (ARDOUR::BundleChannel c[2], bool s) = 0;
+
+ /** @param c Channels; where c[0] is from _ports[0] and c[1] is from _ports[1].
+ * @return state
+ */
+ virtual PortMatrixNode::State get_state (ARDOUR::BundleChannel c[2]) const = 0;
+ virtual bool list_is_global (int) const = 0;
+
+ virtual bool can_add_channels (boost::shared_ptr<ARDOUR::Bundle>) const;
+ virtual void add_channel (boost::shared_ptr<ARDOUR::Bundle>, ARDOUR::DataType);
+ virtual bool can_remove_channels (boost::shared_ptr<ARDOUR::Bundle>) const;
+ virtual void remove_channel (ARDOUR::BundleChannel);
+ virtual void remove_all_channels (boost::weak_ptr<ARDOUR::Bundle>);
+ virtual bool can_rename_channels (boost::shared_ptr<ARDOUR::Bundle>) const {
+ return false;
+ }
+ virtual void rename_channel (ARDOUR::BundleChannel) {}
+ virtual std::string disassociation_verb () const = 0;
+ virtual std::string channel_noun () const;