mirror of
https://github.com/Ardour/ardour.git
synced 2026-01-03 12:19:33 +01:00
change input/output button context menus for mixer strip to be non-additive: when selecting a new IO bundle, disconnect from any existing connections before connecting to the new one (fixes #5087)
git-svn-id: svn://localhost/ardour2/branches/3.0@13308 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
3e59452fa0
commit
2d9ed69fe2
7 changed files with 20 additions and 26 deletions
|
|
@ -874,7 +874,7 @@ MixerStrip::input_press (GdkEventButton *ev)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MixerStrip::bundle_input_toggled (boost::shared_ptr<ARDOUR::Bundle> c)
|
MixerStrip::bundle_input_chosen (boost::shared_ptr<ARDOUR::Bundle> c)
|
||||||
{
|
{
|
||||||
if (ignore_toggle) {
|
if (ignore_toggle) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -883,14 +883,14 @@ MixerStrip::bundle_input_toggled (boost::shared_ptr<ARDOUR::Bundle> c)
|
||||||
ARDOUR::BundleList current = _route->input()->bundles_connected ();
|
ARDOUR::BundleList current = _route->input()->bundles_connected ();
|
||||||
|
|
||||||
if (std::find (current.begin(), current.end(), c) == current.end()) {
|
if (std::find (current.begin(), current.end(), c) == current.end()) {
|
||||||
_route->input()->connect_ports_to_bundle (c, this);
|
_route->input()->connect_ports_to_bundle (c, true, this);
|
||||||
} else {
|
} else {
|
||||||
_route->input()->disconnect_ports_from_bundle (c, this);
|
_route->input()->disconnect_ports_from_bundle (c, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MixerStrip::bundle_output_toggled (boost::shared_ptr<ARDOUR::Bundle> c)
|
MixerStrip::bundle_output_chosen (boost::shared_ptr<ARDOUR::Bundle> c)
|
||||||
{
|
{
|
||||||
if (ignore_toggle) {
|
if (ignore_toggle) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -899,7 +899,7 @@ MixerStrip::bundle_output_toggled (boost::shared_ptr<ARDOUR::Bundle> c)
|
||||||
ARDOUR::BundleList current = _route->output()->bundles_connected ();
|
ARDOUR::BundleList current = _route->output()->bundles_connected ();
|
||||||
|
|
||||||
if (std::find (current.begin(), current.end(), c) == current.end()) {
|
if (std::find (current.begin(), current.end(), c) == current.end()) {
|
||||||
_route->output()->connect_ports_to_bundle (c, this);
|
_route->output()->connect_ports_to_bundle (c, true, this);
|
||||||
} else {
|
} else {
|
||||||
_route->output()->disconnect_ports_from_bundle (c, this);
|
_route->output()->disconnect_ports_from_bundle (c, this);
|
||||||
}
|
}
|
||||||
|
|
@ -930,13 +930,7 @@ MixerStrip::maybe_add_bundle_to_input_menu (boost::shared_ptr<Bundle> b, ARDOUR:
|
||||||
std::string n = b->name ();
|
std::string n = b->name ();
|
||||||
replace_all (n, "_", " ");
|
replace_all (n, "_", " ");
|
||||||
|
|
||||||
citems.push_back (CheckMenuElem (n, sigc::bind (sigc::mem_fun(*this, &MixerStrip::bundle_input_toggled), b)));
|
citems.push_back (MenuElem (n, sigc::bind (sigc::mem_fun(*this, &MixerStrip::bundle_input_chosen), b)));
|
||||||
|
|
||||||
if (std::find (current.begin(), current.end(), b) != current.end()) {
|
|
||||||
ignore_toggle = true;
|
|
||||||
dynamic_cast<CheckMenuItem *> (&citems.back())->set_active (true);
|
|
||||||
ignore_toggle = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -964,13 +958,7 @@ MixerStrip::maybe_add_bundle_to_output_menu (boost::shared_ptr<Bundle> b, ARDOUR
|
||||||
std::string n = b->name ();
|
std::string n = b->name ();
|
||||||
replace_all (n, "_", " ");
|
replace_all (n, "_", " ");
|
||||||
|
|
||||||
citems.push_back (CheckMenuElem (n, sigc::bind (sigc::mem_fun(*this, &MixerStrip::bundle_output_toggled), b)));
|
citems.push_back (MenuElem (n, sigc::bind (sigc::mem_fun(*this, &MixerStrip::bundle_output_chosen), b)));
|
||||||
|
|
||||||
if (std::find (current.begin(), current.end(), b) != current.end()) {
|
|
||||||
ignore_toggle = true;
|
|
||||||
dynamic_cast<CheckMenuItem *> (&citems.back())->set_active (true);
|
|
||||||
ignore_toggle = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -219,8 +219,8 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
|
||||||
std::list<boost::shared_ptr<ARDOUR::Bundle> > output_menu_bundles;
|
std::list<boost::shared_ptr<ARDOUR::Bundle> > output_menu_bundles;
|
||||||
void maybe_add_bundle_to_output_menu (boost::shared_ptr<ARDOUR::Bundle>, ARDOUR::BundleList const &);
|
void maybe_add_bundle_to_output_menu (boost::shared_ptr<ARDOUR::Bundle>, ARDOUR::BundleList const &);
|
||||||
|
|
||||||
void bundle_input_toggled (boost::shared_ptr<ARDOUR::Bundle>);
|
void bundle_input_chosen (boost::shared_ptr<ARDOUR::Bundle>);
|
||||||
void bundle_output_toggled (boost::shared_ptr<ARDOUR::Bundle>);
|
void bundle_output_chosen (boost::shared_ptr<ARDOUR::Bundle>);
|
||||||
|
|
||||||
void edit_input_configuration ();
|
void edit_input_configuration ();
|
||||||
void edit_output_configuration ();
|
void edit_output_configuration ();
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ class IO : public SessionObject, public Latent
|
||||||
|
|
||||||
int ensure_io (ChanCount cnt, bool clear, void *src);
|
int ensure_io (ChanCount cnt, bool clear, void *src);
|
||||||
|
|
||||||
int connect_ports_to_bundle (boost::shared_ptr<Bundle>, void *);
|
int connect_ports_to_bundle (boost::shared_ptr<Bundle>, bool exclusive, void *);
|
||||||
int disconnect_ports_from_bundle (boost::shared_ptr<Bundle>, void *);
|
int disconnect_ports_from_bundle (boost::shared_ptr<Bundle>, void *);
|
||||||
|
|
||||||
BundleList bundles_connected ();
|
BundleList bundles_connected ();
|
||||||
|
|
|
||||||
|
|
@ -176,7 +176,7 @@ AudioTrack::deprecated_use_diskstream_connections ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_input->connect_ports_to_bundle (c, this);
|
_input->connect_ports_to_bundle (c, true, this);
|
||||||
|
|
||||||
} else if ((prop = node.property ("inputs")) != 0) {
|
} else if ((prop = node.property ("inputs")) != 0) {
|
||||||
if (_input->set_ports (prop->value())) {
|
if (_input->set_ports (prop->value())) {
|
||||||
|
|
|
||||||
|
|
@ -912,7 +912,7 @@ IO::make_connections (const XMLNode& node, int version, bool in)
|
||||||
if (prop) {
|
if (prop) {
|
||||||
boost::shared_ptr<Bundle> b = find_possible_bundle (prop->value());
|
boost::shared_ptr<Bundle> b = find_possible_bundle (prop->value());
|
||||||
if (b) {
|
if (b) {
|
||||||
connect_ports_to_bundle (b, this);
|
connect_ports_to_bundle (b, true, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1241,13 +1241,19 @@ IO::latency () const
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
IO::connect_ports_to_bundle (boost::shared_ptr<Bundle> c, void* src)
|
IO::connect_ports_to_bundle (boost::shared_ptr<Bundle> c, bool exclusive, void* src)
|
||||||
{
|
{
|
||||||
BLOCK_PROCESS_CALLBACK ();
|
BLOCK_PROCESS_CALLBACK ();
|
||||||
|
|
||||||
{
|
{
|
||||||
Glib::Threads::Mutex::Lock lm2 (io_lock);
|
Glib::Threads::Mutex::Lock lm2 (io_lock);
|
||||||
|
|
||||||
|
if (exclusive) {
|
||||||
|
for (PortSet::iterator i = _ports.begin(); i != _ports.end(); ++i) {
|
||||||
|
i->disconnect_all ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
c->connect (_bundle, _session.engine());
|
c->connect (_bundle, _session.engine());
|
||||||
|
|
||||||
/* If this is a UserBundle, make a note of what we've done */
|
/* If this is a UserBundle, make a note of what we've done */
|
||||||
|
|
|
||||||
|
|
@ -502,7 +502,7 @@ RouteGroup::make_subgroup (bool aux, Placement placement)
|
||||||
|
|
||||||
for (RouteList::iterator i = routes->begin(); i != routes->end(); ++i) {
|
for (RouteList::iterator i = routes->begin(); i != routes->end(); ++i) {
|
||||||
(*i)->output()->disconnect (this);
|
(*i)->output()->disconnect (this);
|
||||||
(*i)->output()->connect_ports_to_bundle (bundle, this);
|
(*i)->output()->connect_ports_to_bundle (bundle, false, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -725,7 +725,7 @@ Session::add_monitor_section ()
|
||||||
boost::shared_ptr<Bundle> b = bundle_by_name (Config->get_monitor_bus_preferred_bundle());
|
boost::shared_ptr<Bundle> b = bundle_by_name (Config->get_monitor_bus_preferred_bundle());
|
||||||
|
|
||||||
if (b) {
|
if (b) {
|
||||||
_monitor_out->output()->connect_ports_to_bundle (b, this);
|
_monitor_out->output()->connect_ports_to_bundle (b, true, this);
|
||||||
} else {
|
} else {
|
||||||
warning << string_compose (_("The preferred I/O for the monitor bus (%1) cannot be found"),
|
warning << string_compose (_("The preferred I/O for the monitor bus (%1) cannot be found"),
|
||||||
Config->get_monitor_bus_preferred_bundle())
|
Config->get_monitor_bus_preferred_bundle())
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue