- /* find all the client names and group their ports into a list-by-client */
-
- for (int n = 0; ports[n]; ++n) {
-
- pair<string,vector<pair<string,string> > > newpair;
- pair<string,string> strpair;
- pair<PortMap::iterator,bool> result;
-
- string str = ports[n];
- string::size_type pos;
- string portname;
-
- pos = str.find (':');
-
- newpair.first = str.substr (0, pos);
- portname = str.substr (pos+1);
-
- result = portmap.insert (newpair);
-
- strpair.first = portname;
- strpair.second = str;
-
- result.first->second.push_back (strpair);
- }
-
- PortMap::iterator i;
-
- for (i = portmap.begin(); i != portmap.end(); ++i) {
-
- Box *client_box = manage (new VBox);
- TreeView *display = manage (new TreeView);
- RefPtr<ListStore> model = ListStore::create (port_display_columns);
- ScrolledWindow *scroller = manage (new ScrolledWindow);
-
- display->set_model (model);
- display->append_column (X_("notvisible"), port_display_columns.displayed_name);
- display->set_headers_visible (false);
- display->get_selection()->set_mode (SELECTION_SINGLE);
- display->set_name ("IOSelectorList");
-
- for (vector<pair<string,string> >::iterator s = i->second.begin(); s != i->second.end(); ++s) {
-
- TreeModel::Row row = *(model->append ());
-
- row[port_display_columns.displayed_name] = s->first;
- row[port_display_columns.full_name] = s->second;
- }
-
- display->signal_button_release_event().connect (bind (mem_fun(*this, &IOSelector::port_selection_changed), display));
- Label *tab_label = manage (new Label);
-
- tab_label->set_name ("IOSelectorNotebookTab");
- tab_label->set_text ((*i).first);
-
- scroller->add (*display);
- scroller->set_policy (POLICY_AUTOMATIC, POLICY_AUTOMATIC);
-
- client_box->pack_start (*scroller);
-
- pages.push_back (TabElem (*client_box, *tab_label));
- }
-
- notebook.set_current_page (current_page);
- notebook.signal_show().connect (bind (mem_fun (notebook, &Notebook::set_current_page), current_page));
- selector_box.show_all ();
-}
-
-void
-IOSelector::display_ports ()
-{
- TreeView *firsttview = 0;
- TreeView *selected_port_tview = 0;
- {
- Glib::Mutex::Lock lm (port_display_lock);
- Port *port;
- uint32_t limit;
-
- if (for_input) {
- limit = io->n_inputs();
- } else {
- limit = io->n_outputs();
- }
-
- for (slist<TreeView *>::iterator i = port_displays.begin(); i != port_displays.end(); ) {
-
- slist<TreeView *>::iterator tmp;
-
- tmp = i;
- ++tmp;
-
- port_box.remove (**i);
- delete *i;
- port_displays.erase (i);
-
- i = tmp;
- }
-
- for (uint32_t n = 0; n < limit; ++n) {
-
- TreeView* tview;
- //ScrolledWindow *scroller;
- string really_short_name;
-
- if (for_input) {
- port = io->input (n);
- } else {
- port = io->output (n);
- }
-
- /* we know there is '/' because we put it there */
-
- really_short_name = port->short_name();
- really_short_name = really_short_name.substr (really_short_name.find ('/') + 1);
-
- tview = manage (new TreeView());
- RefPtr<ListStore> port_model = ListStore::create (port_display_columns);
-
- if (!firsttview) {
- firsttview = tview;
- }
-
- tview->set_model (port_model);
- tview->append_column (really_short_name, port_display_columns.displayed_name);
- tview->get_selection()->set_mode (SELECTION_SINGLE);
- tview->set_data ("port", port);
- tview->set_headers_visible (true);
- tview->set_name ("IOSelectorPortList");
-
- port_box.pack_start (*tview);
- port_displays.insert (port_displays.end(), tview);
-
- /* now fill the clist with the current connections */
-
-
- const char **connections = port->get_connections ();
-
- if (connections) {
- for (uint32_t c = 0; connections[c]; ++c) {
- TreeModel::Row row = *(port_model->append());
- row[port_display_columns.displayed_name] = connections[c];
- row[port_display_columns.full_name] = connections[c];
- }
- }
-
- if (for_input) {
-
- if (io->input_maximum() == 1) {
- selected_port = port;
- selected_port_tview = tview;
- } else {
- if (port == selected_port) {
- selected_port_tview = tview;
- }
- }
-
- } else {
-
- if (io->output_maximum() == 1) {
- selected_port = port;
- selected_port_tview = tview;
- } else {
- if (port == selected_port) {
- selected_port_tview = tview;
- }
- }
- }
-
- TreeViewColumn* col = tview->get_column (0);
-
- col->set_clickable (true);
-
- /* handle button events on the column header ... */
- col->signal_clicked().connect (bind (mem_fun(*this, &IOSelector::select_treeview), tview));
-
- /* ... and within the treeview itself */
- tview->signal_button_release_event().connect (bind (mem_fun(*this, &IOSelector::connection_button_release), tview));
- }
-
- port_box.show_all ();
- }
-
- if (!selected_port_tview) {
- selected_port_tview = firsttview;
- }
-
- if (selected_port_tview) {
- select_treeview (selected_port_tview);
- }
-}
-
-bool
-IOSelector::port_selection_changed (GdkEventButton *ev, TreeView* treeview)
-{
- TreeModel::iterator i = treeview->get_selection()->get_selected();
- int status;