more solo model work, including a GUI fix for mute button state when the route is self-soloed
git-svn-id: svn://localhost/ardour2/branches/3.0@7048 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
1b9bf21aa4
commit
e33d4553b2
@ -838,7 +838,7 @@ RouteUI::mute_visual_state (Session* s, boost::shared_ptr<Route> r)
|
||||
if (r->self_muted ()) {
|
||||
/* full mute */
|
||||
return 2;
|
||||
} else if (r->muted_by_others() || r->path_muted_by_others()) {
|
||||
} else if (!r->self_soloed() && (r->muted_by_others() || r->path_muted_by_others())) {
|
||||
return 1;
|
||||
} else {
|
||||
/* no mute at all */
|
||||
|
@ -72,6 +72,7 @@ class MuteMaster : public SessionHandleRef, public PBD::Stateful
|
||||
MutePoint mute_points() const { return _mute_point; }
|
||||
|
||||
void set_solo_level (SoloLevel);
|
||||
void set_solo_ignore (bool yn) { _solo_ignore = yn; }
|
||||
|
||||
PBD::Signal0<void> MutePointChanged;
|
||||
|
||||
@ -83,6 +84,7 @@ class MuteMaster : public SessionHandleRef, public PBD::Stateful
|
||||
volatile bool _self_muted;
|
||||
volatile uint32_t _muted_by_others;
|
||||
volatile SoloLevel _solo_level;
|
||||
volatile bool _solo_ignore;
|
||||
};
|
||||
|
||||
} // namespace ARDOUR
|
||||
|
@ -500,7 +500,7 @@ Delivery::target_gain ()
|
||||
break;
|
||||
}
|
||||
|
||||
// cerr << name() << ' ';
|
||||
//cerr << name() << ' ';
|
||||
desired_gain = _mute_master->mute_gain_at (mp);
|
||||
|
||||
if (_role == Listen && _session.monitor_out() && !_session.listening()) {
|
||||
|
@ -40,6 +40,7 @@ MuteMaster::MuteMaster (Session& s, const std::string&)
|
||||
, _mute_point (AllPoints)
|
||||
, _self_muted (false)
|
||||
, _muted_by_others (0)
|
||||
, _solo_ignore (false)
|
||||
{
|
||||
}
|
||||
|
||||
@ -107,7 +108,11 @@ MuteMaster::mute_gain_at (MutePoint mp) const
|
||||
} else if (muted_by_others_at (mp)) { // muted by others
|
||||
gain = Config->get_solo_mute_gain ();
|
||||
} else {
|
||||
gain = 1.0;
|
||||
if (!_solo_ignore && _session.soloing()) {
|
||||
gain = 0.0;
|
||||
} else {
|
||||
gain = 1.0;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (self_muted_at (mp)) { // self-muted
|
||||
@ -119,10 +124,14 @@ MuteMaster::mute_gain_at (MutePoint mp) const
|
||||
} else if (l == UpstreamSoloed) { // soloed by others
|
||||
gain = 1.0;
|
||||
} else {
|
||||
gain = 1.0;
|
||||
if (!_solo_ignore && _session.soloing()) {
|
||||
gain = 0.0;
|
||||
} else {
|
||||
gain = 1.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// cerr << "\tgain = " << gain << endl;
|
||||
|
||||
return gain;
|
||||
|
@ -165,6 +165,10 @@ Route::init ()
|
||||
_main_outs->panner()->set_bypassed (true);
|
||||
}
|
||||
|
||||
if (is_master() || is_monitor() || is_hidden()) {
|
||||
_mute_master->set_solo_ignore (true);
|
||||
}
|
||||
|
||||
/* now that we have _meter, its safe to connect to this */
|
||||
|
||||
Metering::Meter.connect_same_thread (*this, (boost::bind (&Route::meter, this)));
|
||||
@ -1795,6 +1799,10 @@ Route::_set_state (const XMLNode& node, int version, bool /*call_base*/)
|
||||
_flags = Flag (0);
|
||||
}
|
||||
|
||||
if (is_master() || is_monitor() || is_hidden()) {
|
||||
_mute_master->set_solo_ignore (true);
|
||||
}
|
||||
|
||||
/* add all processors (except amp, which is always present) */
|
||||
|
||||
nlist = node.children();
|
||||
|
Loading…
Reference in New Issue
Block a user