summaryrefslogtreecommitdiff
path: root/libs/ardour/io.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 /libs/ardour/io.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 'libs/ardour/io.cc')
-rw-r--r--libs/ardour/io.cc70
1 files changed, 43 insertions, 27 deletions
diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc
index 00281d510f..1b130097e7 100644
--- a/libs/ardour/io.cc
+++ b/libs/ardour/io.cc
@@ -396,8 +396,7 @@ IO::check_bundles (std::vector<UserBundleInfo>& list, const PortSet& ports)
if (ok) {
new_list.push_back (*i);
} else {
- i->configuration_changed.disconnect ();
- i->ports_changed.disconnect ();
+ i->changed.disconnect ();
}
}
@@ -604,7 +603,7 @@ IO::remove_output_port (Port* port, void* src)
}
if (change == ConfigurationChanged) {
- setup_bundles_for_inputs_and_outputs ();
+ setup_bundle_for_outputs ();
}
if (change != NoChange) {
@@ -666,7 +665,7 @@ IO::add_output_port (string destination, void* src, DataType type)
// pan_changed (src); /* EMIT SIGNAL */
output_changed (ConfigurationChanged, src); /* EMIT SIGNAL */
- setup_bundles_for_inputs_and_outputs ();
+ setup_bundle_for_outputs ();
_session.set_dirty ();
return 0;
@@ -708,7 +707,7 @@ IO::remove_input_port (Port* port, void* src)
}
if (change == ConfigurationChanged) {
- setup_bundles_for_inputs_and_outputs ();
+ setup_bundle_for_inputs ();
}
if (change != NoChange) {
@@ -771,7 +770,7 @@ IO::add_input_port (string source, void* src, DataType type)
// pan_changed (src); /* EMIT SIGNAL */
input_changed (ConfigurationChanged, src); /* EMIT SIGNAL */
- setup_bundles_for_inputs_and_outputs ();
+ setup_bundle_for_inputs ();
_session.set_dirty ();
return 0;
@@ -1013,16 +1012,17 @@ IO::ensure_io (ChanCount in, ChanCount out, bool clear, void* src)
if (out_changed) {
check_bundles_connected_to_outputs ();
output_changed (ConfigurationChanged, src); /* EMIT SIGNAL */
+ setup_bundle_for_outputs ();
}
if (in_changed) {
check_bundles_connected_to_inputs ();
input_changed (ConfigurationChanged, src); /* EMIT SIGNAL */
+ setup_bundle_for_inputs ();
}
if (in_changed || out_changed) {
PortCountChanged (max (n_outputs(), n_inputs())); /* EMIT SIGNAL */
- setup_bundles_for_inputs_and_outputs ();
_session.set_dirty ();
}
@@ -1050,7 +1050,7 @@ IO::ensure_inputs (ChanCount count, bool clear, bool lockit, void* src)
if (changed) {
input_changed (ConfigurationChanged, src); /* EMIT SIGNAL */
- setup_bundles_for_inputs_and_outputs ();
+ setup_bundle_for_inputs ();
_session.set_dirty ();
}
return 0;
@@ -1142,7 +1142,7 @@ IO::ensure_outputs (ChanCount count, bool clear, bool lockit, void* src)
if (changed) {
output_changed (ConfigurationChanged, src); /* EMIT SIGNAL */
- setup_bundles_for_inputs_and_outputs ();
+ setup_bundle_for_outputs ();
}
return 0;
@@ -2220,20 +2220,13 @@ IO::reset_panners ()
}
void
-IO::bundle_configuration_changed ()
+IO::bundle_changed (Bundle::Change c)
{
//XXX
// connect_input_ports_to_bundle (_input_bundle, this);
}
void
-IO::bundle_ports_changed (int ignored)
-{
- //XXX
-// connect_output_ports_to_bundle (_output_bundle, this);
-}
-
-void
IO::GainControl::set_value (float val)
{
// max gain at about +6dB (10.0 ^ ( 6 dB * 0.05))
@@ -2615,18 +2608,24 @@ IO::update_port_total_latencies ()
void
IO::setup_bundles_for_inputs_and_outputs ()
{
+ setup_bundle_for_inputs ();
+ setup_bundle_for_outputs ();
+}
+
+
+void
+IO::setup_bundle_for_inputs ()
+{
char buf[32];
if (!_bundle_for_inputs) {
_bundle_for_inputs.reset (new Bundle (true));
}
- if (!_bundle_for_outputs) {
- _bundle_for_outputs.reset (new Bundle (false));
- }
+ _bundle_for_inputs->suspend_signals ();
+
_bundle_for_inputs->remove_channels ();
- _bundle_for_outputs->remove_channels ();
-
+
snprintf(buf, sizeof (buf), _("%s in"), _name.c_str());
_bundle_for_inputs->set_name (buf);
uint32_t const ni = inputs().num_ports();
@@ -2635,6 +2634,23 @@ IO::setup_bundles_for_inputs_and_outputs ()
_bundle_for_inputs->set_port (i, _session.engine().make_port_name_non_relative (inputs().port(i)->name()));
}
+ _bundle_for_inputs->resume_signals ();
+}
+
+
+void
+IO::setup_bundle_for_outputs ()
+{
+ char buf[32];
+
+ if (!_bundle_for_outputs) {
+ _bundle_for_outputs.reset (new Bundle (false));
+ }
+
+ _bundle_for_outputs->suspend_signals ();
+
+ _bundle_for_outputs->remove_channels ();
+
snprintf(buf, sizeof (buf), _("%s out"), _name.c_str());
_bundle_for_outputs->set_name (buf);
uint32_t const no = outputs().num_ports();
@@ -2642,8 +2658,11 @@ IO::setup_bundles_for_inputs_and_outputs ()
_bundle_for_outputs->add_channel (bundle_channel_name (i, no));
_bundle_for_outputs->set_port (i, _session.engine().make_port_name_non_relative (outputs().port(i)->name()));
}
+
+ _bundle_for_outputs->resume_signals ();
}
+
/** @return Bundles connected to our inputs */
BundleList
IO::bundles_connected_to_inputs ()
@@ -2711,11 +2730,8 @@ IO::bundles_connected_to_outputs ()
IO::UserBundleInfo::UserBundleInfo (IO* io, boost::shared_ptr<UserBundle> b)
{
bundle = b;
- configuration_changed = b->ConfigurationChanged.connect (
- sigc::mem_fun (*io, &IO::bundle_configuration_changed)
- );
- ports_changed = b->PortsChanged.connect (
- sigc::mem_fun (*io, &IO::bundle_ports_changed)
+ changed = b->Changed.connect (
+ sigc::mem_fun (*io, &IO::bundle_changed)
);
}