summaryrefslogtreecommitdiff
path: root/gtk2_ardour/io_selector.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2009-02-09 03:18:10 +0000
committerCarl Hetherington <carl@carlh.net>2009-02-09 03:18:10 +0000
commitee42a6dd97045253d1a9bb32fc2e571d235f9967 (patch)
tree1d4994d28477b659474075fdf82f7dbc9069bf7d /gtk2_ardour/io_selector.cc
parent91032b311ee44d7bcca65feb06aca077cc3671b5 (diff)
Fixes to bundle manager to make it vaguely usable.
Rework signal handling for bundles so that all changes should now be noticed by port matrices. git-svn-id: svn://localhost/ardour2/branches/3.0@4501 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/io_selector.cc')
-rw-r--r--gtk2_ardour/io_selector.cc73
1 files changed, 28 insertions, 45 deletions
diff --git a/gtk2_ardour/io_selector.cc b/gtk2_ardour/io_selector.cc
index 1f529cf3c5..76892dcd3d 100644
--- a/gtk2_ardour/io_selector.cc
+++ b/gtk2_ardour/io_selector.cc
@@ -46,9 +46,6 @@ IOSelector::IOSelector (ARDOUR::Session& session, boost::shared_ptr<ARDOUR::IO>
, _io (io)
, _find_inputs_for_io_outputs (in)
{
- /* Listen for ports changing on the IO */
- _io->PortCountChanged.connect (sigc::hide (mem_fun (*this, &IOSelector::ports_changed)));
-
/* signal flow from 0 to 1 */
if (_find_inputs_for_io_outputs) {
_other = 1;
@@ -61,54 +58,27 @@ IOSelector::IOSelector (ARDOUR::Session& session, boost::shared_ptr<ARDOUR::IO>
_port_group = boost::shared_ptr<PortGroup> (new PortGroup (""));
_ports[_ours].add_group (_port_group);
- setup ();
+ setup_all_ports ();
}
void
-IOSelector::setup ()
+IOSelector::setup_ports (int dim)
{
- _ports[_other].gather (_session, _find_inputs_for_io_outputs);
-
- _port_group->clear ();
- _port_group->add_bundle (boost::shared_ptr<ARDOUR::Bundle> (new ARDOUR::Bundle));
- _port_group->only_bundle()->set_name (_io->name());
+ _ports[dim].suspend_signals ();
- if (_find_inputs_for_io_outputs) {
- const PortSet& ps (_io->outputs());
-
- int j = 0;
- for (PortSet::const_iterator i = ps.begin(); i != ps.end(); ++i) {
- char buf[32];
- snprintf (buf, sizeof(buf), _("out %d"), j + 1);
- _port_group->only_bundle()->add_channel (buf);
- _port_group->only_bundle()->add_port_to_channel (j, _session.engine().make_port_name_non_relative (i->name()));
- ++j;
- }
+ if (dim == _other) {
+
+ _ports[_other].gather (_session, _find_inputs_for_io_outputs);
} else {
-
- const PortSet& ps (_io->inputs());
-
- int j = 0;
- for (PortSet::const_iterator i = ps.begin(); i != ps.end(); ++i) {
- char buf[32];
- snprintf (buf, sizeof(buf), _("in %d"), j + 1);
- _port_group->only_bundle()->add_channel (buf);
- _port_group->only_bundle()->add_port_to_channel (j, _session.engine().make_port_name_non_relative (i->name()));
- ++j;
- }
+ _port_group->clear ();
+ _port_group->add_bundle (
+ _find_inputs_for_io_outputs ? _io->bundle_for_outputs() : _io->bundle_for_inputs()
+ );
}
- PortMatrix::setup ();
-}
-
-void
-IOSelector::ports_changed ()
-{
- ENSURE_GUI_THREAD (mem_fun (*this, &IOSelector::ports_changed));
-
- setup ();
+ _ports[dim].resume_signals ();
}
void
@@ -245,6 +215,12 @@ IOSelector::remove_channel (ARDOUR::BundleChannel bc)
}
}
+bool
+IOSelector::list_is_global (int dim) const
+{
+ return (dim == _other);
+}
+
IOSelectorWindow::IOSelectorWindow (ARDOUR::Session& session, boost::shared_ptr<ARDOUR::IO> io, bool for_input, bool can_cancel)
: ArdourDialog ("I/O selector")
, _selector (session, io, !for_input)
@@ -277,7 +253,7 @@ IOSelectorWindow::IOSelectorWindow (ARDOUR::Session& session, boost::shared_ptr<
/* Rescan button */
rescan_button.set_name ("IOSelectorButton");
rescan_button.set_image (*Gtk::manage (new Gtk::Image (Gtk::Stock::REFRESH, Gtk::ICON_SIZE_BUTTON)));
- rescan_button.signal_clicked().connect (sigc::mem_fun (_selector, &IOSelector::setup));
+ rescan_button.signal_clicked().connect (sigc::mem_fun (*this, &IOSelectorWindow::rescan));
get_action_area()->pack_start (rescan_button, false, false);
io->PortCountChanged.connect (sigc::hide (mem_fun (*this, &IOSelectorWindow::ports_changed)));
@@ -325,6 +301,12 @@ IOSelectorWindow::ports_changed ()
}
void
+IOSelectorWindow::rescan ()
+{
+ _selector.setup_ports (_selector.other());
+}
+
+void
IOSelectorWindow::cancel ()
{
_selector.Finished (IOSelector::Cancelled);
@@ -341,7 +323,7 @@ IOSelectorWindow::accept ()
void
IOSelectorWindow::on_map ()
{
- _selector.setup ();
+ _selector.setup_all_ports ();
Window::on_map ();
}
@@ -372,8 +354,8 @@ PortInsertUI::PortInsertUI (ARDOUR::Session& sess, boost::shared_ptr<ARDOUR::Por
void
PortInsertUI::redisplay ()
{
- input_selector.setup ();
- output_selector.setup ();
+ input_selector.setup_ports (input_selector.other());
+ output_selector.setup_ports (output_selector.other());
}
void
@@ -454,3 +436,4 @@ PortInsertWindow::accept ()
_portinsertui.finished (IOSelector::Accepted);
hide ();
}
+