make sure that delivery processors in a soloed route keep working when the route is soloed ; fiddle with sensitivity of mixer strip output button when displaying sends

git-svn-id: svn://localhost/ardour2/branches/3.0@6139 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2009-11-20 21:43:19 +00:00
parent 908b1c9301
commit 78503905d7
3 changed files with 40 additions and 6 deletions

View File

@ -37,6 +37,7 @@
#include "ardour/amp.h"
#include "ardour/session.h"
#include "ardour/audioengine.h"
#include "ardour/internal_send.h"
#include "ardour/route.h"
#include "ardour/route_group.h"
#include "ardour/audio_track.h"
@ -690,7 +691,21 @@ void
MixerStrip::edit_output_configuration ()
{
if (output_selector == 0) {
output_selector = new IOSelectorWindow (_session, _route->output());
boost::shared_ptr<Send> send;
boost::shared_ptr<IO> output;
if ((send = boost::dynamic_pointer_cast<Send>(_current_delivery)) != 0) {
if (!boost::dynamic_pointer_cast<InternalSend>(send)) {
output = send->output();
} else {
output = _route->output ();
}
} else {
output = _route->output ();
}
output_selector = new IOSelectorWindow (_session, output);
}
if (output_selector->is_visible()) {
@ -1669,7 +1684,8 @@ MixerStrip::drop_send ()
}
send_gone_connection.disconnect ();
input_button.set_sensitive (true);
output_button.set_sensitive (true);
}
void
@ -1690,6 +1706,12 @@ MixerStrip::show_send (boost::shared_ptr<Send> send)
panner_ui().set_panner (_current_delivery->panner());
panner_ui().setup_pan ();
input_button.set_sensitive (false);
if (boost::dynamic_pointer_cast<InternalSend>(send)) {
output_button.set_sensitive (false);
}
reset_strip_style ();
}

View File

@ -563,6 +563,7 @@ Delivery::target_gain ()
} else {
desired_gain = _mute_master->mute_gain_at (mp);
}
}
return desired_gain;

View File

@ -552,11 +552,22 @@ Route::mod_solo_level (int32_t delta)
_solo_level += delta;
}
/* tell main outs what the solo situation is
{
/* tell all delivery processors what the solo situation is, so that they keep
delivering even though Session::soloing() is true and they were not
explicitly soloed.
*/
_main_outs->set_solo_level (_solo_level);
_main_outs->set_solo_isolated (_solo_isolated);
Glib::RWLock::ReaderLock rm (_processor_lock);
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {
boost::shared_ptr<Delivery> d;
if ((d = boost::dynamic_pointer_cast<Delivery> (*i)) != 0) {
d->set_solo_level (_solo_level);
d->set_solo_isolated (_solo_isolated);
}
}
}
}
void