X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fio_selector.cc;h=0f877206f7025eb62725ba3c8cb747b9aec9cb83;hb=c55f3dcb3c901db64c45bd8f8dce880b4c2cd047;hp=3a744ea7271b07a3d9cd16079c21264b51d63483;hpb=52600a05e7658f79864b765560f8c11b39700199;p=ardour.git diff --git a/gtk2_ardour/io_selector.cc b/gtk2_ardour/io_selector.cc index 3a744ea727..0f877206f7 100644 --- a/gtk2_ardour/io_selector.cc +++ b/gtk2_ardour/io_selector.cc @@ -15,7 +15,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #include @@ -184,40 +183,7 @@ IOSelector::IOSelector (Session& sess, boost::shared_ptr ior, bool input) port_button_box.set_border_width (5); port_button_box.pack_start (add_port_button, false, false); - - if (for_input) { - if (io->input_maximum() < 0 || io->input_maximum() > (int) io->n_inputs()) { - add_port_button.set_sensitive (true); - } else { - add_port_button.set_sensitive (false); - } - - } else { - if (io->output_maximum() < 0 || io->output_maximum() > (int) io->n_outputs()) { - add_port_button.set_sensitive (true); - } else { - add_port_button.set_sensitive (false); - } - - } - port_button_box.pack_start (remove_port_button, false, false); - - if (for_input) { - if (io->input_minimum() < 0 || io->input_minimum() < (int) io->n_inputs()) { - remove_port_button.set_sensitive (true); - } else { - remove_port_button.set_sensitive (false); - } - - } else { - if (io->output_minimum() < 0 || io->output_minimum() < (int) io->n_outputs()) { - remove_port_button.set_sensitive (true); - } else { - remove_port_button.set_sensitive (false); - } - } - port_button_box.pack_start (clear_connections_button, false, false); port_and_button_box.set_border_width (5); @@ -248,6 +214,8 @@ IOSelector::IOSelector (Session& sess, boost::shared_ptr ior, bool input) io->output_changed.connect (mem_fun(*this, &IOSelector::ports_changed)); } + set_button_sensitivity (); + io->name_changed.connect (mem_fun(*this, &IOSelector::name_changed)); } @@ -255,6 +223,44 @@ IOSelector::~IOSelector () { } +void +IOSelector::set_button_sensitivity () +{ + if (for_input) { + + if (io->input_maximum() < 0 || io->input_maximum() > (int) io->n_inputs()) { + add_port_button.set_sensitive (true); + } else { + add_port_button.set_sensitive (false); + } + + } else { + + if (io->output_maximum() < 0 || io->output_maximum() > (int) io->n_outputs()) { + add_port_button.set_sensitive (true); + } else { + add_port_button.set_sensitive (false); + } + + } + + if (for_input) { + if (io->n_inputs() && (io->input_minimum() < 0 || io->input_minimum() < (int) io->n_inputs())) { + remove_port_button.set_sensitive (true); + } else { + remove_port_button.set_sensitive (false); + } + + } else { + if (io->n_outputs() && (io->output_minimum() < 0 || io->output_minimum() < (int) io->n_outputs())) { + remove_port_button.set_sensitive (true); + } else { + remove_port_button.set_sensitive (false); + } + } +} + + void IOSelector::name_changed (void* src) { @@ -289,8 +295,6 @@ IOSelector::rescan () current_page = notebook.get_current_page (); - cerr << "clear notebook\n"; - pages.clear (); /* get relevant current JACK ports */ @@ -298,7 +302,6 @@ IOSelector::rescan () ports = session.engine().get_ports ("", JACK_DEFAULT_AUDIO_TYPE, for_input ? JackPortIsOutput : JackPortIsInput); if (ports == 0) { - cerr << "no ports\n"; return; } @@ -364,8 +367,6 @@ IOSelector::rescan () pages.push_back (TabElem (*client_box, *tab_label)); } - cerr << "notebook should have " << portmap.size() << " pages\n"; - notebook.set_current_page (current_page); page_selection_connection = notebook.signal_show().connect (bind (mem_fun (notebook, &Notebook::set_current_page), current_page)); selector_box.show_all (); @@ -417,7 +418,7 @@ IOSelector::display_ports () really_short_name = port->short_name(); really_short_name = really_short_name.substr (really_short_name.find ('/') + 1); - + tview = manage (new TreeView()); RefPtr port_model = ListStore::create (port_display_columns); @@ -428,16 +429,15 @@ IOSelector::display_ports () 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_data (X_("port"), port); tview->set_headers_visible (true); - tview->set_name ("IOSelectorPortList"); + tview->set_name (X_("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) { @@ -446,7 +446,7 @@ IOSelector::display_ports () row[port_display_columns.displayed_name] = connections[c]; row[port_display_columns.full_name] = connections[c]; } - } + } if (for_input) { @@ -547,18 +547,10 @@ IOSelector::add_port () } catch (AudioEngine::PortRegistrationFailure& err) { - MessageDialog msg (0, _("There are no more JACK ports available.")); + MessageDialog msg (_("There are no more JACK ports available.")); msg.run (); } - if (io->input_maximum() >= 0 && io->input_maximum() <= (int) io->n_inputs()) { - add_port_button.set_sensitive (false); - } - - if (io->input_minimum() < (int) io->n_inputs()) { - remove_port_button.set_sensitive (true); - } - } else { try { @@ -566,14 +558,12 @@ IOSelector::add_port () } catch (AudioEngine::PortRegistrationFailure& err) { - MessageDialog msg (0, _("There are no more JACK ports available.")); + MessageDialog msg (_("There are no more JACK ports available.")); msg.run (); } - - if (io->output_maximum() >= 0 && io->output_maximum() <= (int) io->n_outputs()) { - add_port_button.set_sensitive (false); - } } + + set_button_sensitivity (); } void @@ -587,26 +577,14 @@ IOSelector::remove_port () if ((nports = io->n_inputs()) > 0) { io->remove_input_port (io->input(nports-1), this); } - if (io->input_minimum() == (int) io->n_inputs()) { - remove_port_button.set_sensitive (false); - } + } else { if ((nports = io->n_outputs()) > 0) { io->remove_output_port (io->output(nports-1), this); } } -} - -gint -IOSelector::remove_port_when_idle (Port *port) -{ - if (for_input) { - io->remove_input_port (port, this); - } else { - io->remove_output_port (port, this); - } - - return FALSE; + + set_button_sensitivity (); } gint @@ -636,7 +614,7 @@ IOSelector::connection_button_release (GdkEventButton *ev, TreeView *treeview) /* path is valid */ ustring connected_port_name = (*iter)[port_display_columns.full_name]; - Port *port = reinterpret_cast (treeview->get_data (_("port"))); + Port *port = reinterpret_cast (treeview->get_data (X_("port"))); if (for_input) { Port *p = session.engine().get_port_by_name (connected_port_name); @@ -685,7 +663,7 @@ IOSelector::select_treeview (TreeView* tview) */ Glib::Mutex::Lock lm (port_display_lock); - Port* port = reinterpret_cast (tview->get_data (_("port"))); + Port* port = reinterpret_cast (tview->get_data (X_("port"))); selected_port = port; @@ -802,14 +780,15 @@ PortInsertWindow::PortInsertWindow (Session& sess, boost::shared_ptr rescan_button.signal_clicked().connect (mem_fun(*this, &PortInsertWindow::rescan)); signal_delete_event().connect (bind (sigc::ptr_fun (just_hide_it), reinterpret_cast (this))); - pi->GoingAway.connect (mem_fun(*this, &PortInsertWindow::plugin_going_away)); + + going_away_connection = pi->GoingAway.connect (mem_fun(*this, &PortInsertWindow::plugin_going_away)); } void PortInsertWindow::plugin_going_away () { ENSURE_GUI_THREAD(mem_fun(*this, &PortInsertWindow::plugin_going_away)); - + going_away_connection.disconnect (); delete_when_idle (this); }