+ for (int i = 0; i < N; ++i) {
+ n.remove_page ();
+ }
+}
+
+void
+PortMatrix::notebook_page_selected (GtkNotebookPage *, guint)
+{
+ if (_ignore_notebook_page_selected) {
+ return;
+ }
+
+ _body->setup ();
+ setup_scrollbars ();
+ queue_draw ();
+}
+
+void
+PortMatrix::session_going_away ()
+{
+ _session = 0;
+}
+
+void
+PortMatrix::body_dimensions_changed ()
+{
+ _hspacer.set_size_request (_body->column_labels_border_x (), -1);
+ if (_arrangement == TOP_TO_RIGHT) {
+ _vspacer.set_size_request (-1, _body->column_labels_height ());
+ _vspacer.show ();
+ } else {
+ _vspacer.hide ();
+ }
+
+}
+
+
+boost::shared_ptr<const PortGroup>
+PortMatrix::visible_ports (int d) const
+{
+ PortGroupList const & p = _ports[d];
+ PortGroupList::List::const_iterator j = p.begin ();
+
+ int n = 0;
+ if (d == _row_index) {
+ n = p.size() - _vnotebook.get_current_page () - 1;
+ } else {
+ n = _hnotebook.get_current_page ();
+ }
+
+ int i = 0;
+ while (i != int (n) && j != p.end ()) {
+ ++i;
+ ++j;
+ }
+
+ if (j == p.end()) {
+ return boost::shared_ptr<const PortGroup> ();
+ }
+
+ return *j;
+}
+
+void
+PortMatrix::add_remove_option (Menu_Helpers::MenuList& m, boost::weak_ptr<Bundle> w, int c)
+{
+ using namespace Menu_Helpers;
+
+ boost::shared_ptr<Bundle> b = w.lock ();
+ if (!b) {
+ return;
+ }
+
+ char buf [64];
+ snprintf (buf, sizeof (buf), _("Remove '%s'"), escape_underscores (b->channel_name (c)).c_str());
+ m.push_back (MenuElem (buf, sigc::bind (sigc::mem_fun (*this, &PortMatrix::remove_channel_proxy), w, c)));
+}
+
+void
+PortMatrix::add_disassociate_option (Menu_Helpers::MenuList& m, boost::weak_ptr<Bundle> w, int d, int c)
+{
+ using namespace Menu_Helpers;
+
+ boost::shared_ptr<Bundle> b = w.lock ();
+ if (!b) {
+ return;
+ }
+
+ char buf [64];
+ snprintf (buf, sizeof (buf), _("%s all from '%s'"), disassociation_verb().c_str(), escape_underscores (b->channel_name (c)).c_str());
+ m.push_back (MenuElem (buf, sigc::bind (sigc::mem_fun (*this, &PortMatrix::disassociate_all_on_channel), w, c, d)));
+}
+
+void
+PortMatrix::port_connected_or_disconnected ()
+{
+ _body->rebuild_and_draw_grid ();
+}
+
+string
+PortMatrix::channel_noun () const
+{
+ return _("channel");