+protected:
+
+ /** We have two port group lists. One will be presented on the rows of the matrix,
+ the other on the columns. The PortMatrix chooses the arrangement based on which has
+ more ports in it. Subclasses must fill these two lists with the port groups that they
+ wish to present. The PortMatrix will arrange its layout such that signal flow is vaguely
+ 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 ();
+ void vscroll_changed ();
+ void routes_changed ();
+ void reconnect_to_routes ();
+ void select_arrangement ();
+ void add_channel_proxy (boost::weak_ptr<ARDOUR::Bundle>);
+ void remove_channel_proxy (boost::weak_ptr<ARDOUR::Bundle>, uint32_t);
+ void rename_channel_proxy (boost::weak_ptr<ARDOUR::Bundle>, uint32_t);
+ void disassociate_all_on_channel (boost::weak_ptr<ARDOUR::Bundle>, uint32_t, int);
+ void setup_global_ports ();
+ void hide_group (boost::weak_ptr<PortGroup>);
+ void show_group (boost::weak_ptr<PortGroup>);
+ void toggle_show_only_bundles ();
+ bool on_scroll_event (GdkEventScroll *);
+ boost::shared_ptr<ARDOUR::IO> io_from_bundle (boost::shared_ptr<ARDOUR::Bundle>) const;
+ void bundle_changed (ARDOUR::Bundle::Change);
+
+ Gtk::Window* _parent;
+
+ /// port type that we are working with