remove SoloBus solo model, add PFL and AFL. basic testing indicates it works, but probably some oddities.

git-svn-id: svn://localhost/ardour2/branches/3.0@5210 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2009-06-17 19:30:54 +00:00
parent daf0e333a9
commit 566ce55736
8 changed files with 71 additions and 5 deletions

View file

@ -1090,7 +1090,8 @@ RCOptionEditor::RCOptionEditor ()
); );
sm->add (SoloInPlace, _("in place")); sm->add (SoloInPlace, _("in place"));
sm->add (SoloBus, _("via bus")); sm->add (SoloAFL, _("post-fader listen via monitor bus"));
sm->add (SoloPFL, _("pre-fader listen via monitor bus"));
add_option (_("Audio"), sm); add_option (_("Audio"), sm);

View file

@ -197,6 +197,7 @@ class Route : public SessionObject, public AutomatableControls
boost::shared_ptr<Send> internal_send_for (boost::shared_ptr<const Route> target) const; boost::shared_ptr<Send> internal_send_for (boost::shared_ptr<const Route> target) const;
BufferSet* get_return_buffer () const; BufferSet* get_return_buffer () const;
void release_return_buffer () const; void release_return_buffer () const;
void put_control_outs_at (Placement);
/** A record of the stream configuration at some point in the processor list. /** A record of the stream configuration at some point in the processor list.
* Used to return where and why an processor list configuration request failed. * Used to return where and why an processor list configuration request failed.

View file

@ -1465,6 +1465,7 @@ class Session : public PBD::StatefulDestructible, public boost::noncopyable
void route_solo_changed (void *src, boost::weak_ptr<Route>); void route_solo_changed (void *src, boost::weak_ptr<Route>);
void catch_up_on_solo (); void catch_up_on_solo ();
void catch_up_on_solo_mute_override (); void catch_up_on_solo_mute_override ();
void solo_model_changed ();
void update_route_solo_state (boost::shared_ptr<RouteList> r = boost::shared_ptr<RouteList>()); void update_route_solo_state (boost::shared_ptr<RouteList> r = boost::shared_ptr<RouteList>());
void modify_solo_mute (bool, bool); void modify_solo_mute (bool, bool);
void strip_portname_for_solo (std::string& portname); void strip_portname_for_solo (std::string& portname);

View file

@ -332,7 +332,8 @@ namespace ARDOUR {
enum SoloModel { enum SoloModel {
SoloInPlace, SoloInPlace,
SoloBus SoloAFL,
SoloPFL
}; };
enum AutoConnectOption { enum AutoConnectOption {

View file

@ -229,7 +229,8 @@ setup_enum_writer ()
REGISTER (_LayerModel); REGISTER (_LayerModel);
REGISTER_ENUM (SoloInPlace); REGISTER_ENUM (SoloInPlace);
REGISTER_ENUM (SoloBus); REGISTER_ENUM (SoloAFL);
REGISTER_ENUM (SoloPFL);
REGISTER (_SoloModel); REGISTER (_SoloModel);
REGISTER_ENUM (AutoConnectPhysical); REGISTER_ENUM (AutoConnectPhysical);

View file

@ -522,7 +522,8 @@ Route::mod_solo_level (int32_t delta)
} }
break; break;
case SoloBus: case SoloAFL:
case SoloPFL:
/* control outs are used for soloing */ /* control outs are used for soloing */
if (_control_outs) { if (_control_outs) {
_control_outs->set_solo_level (_solo_level); _control_outs->set_solo_level (_solo_level);
@ -558,7 +559,8 @@ Route::set_solo_isolated (bool yn, void *src)
_main_outs->set_solo_isolated (false); _main_outs->set_solo_isolated (false);
} }
break; break;
case SoloBus: case SoloAFL:
case SoloPFL:
if (_control_outs) { if (_control_outs) {
_control_outs->set_solo_level (_solo_level); _control_outs->set_solo_level (_solo_level);
_control_outs->set_solo_isolated (_solo_isolated); _control_outs->set_solo_isolated (_solo_isolated);
@ -2287,6 +2289,38 @@ Route::set_meter_point (MeterPoint p, void *src)
_session.set_dirty (); _session.set_dirty ();
} }
} }
void
Route::put_control_outs_at (Placement p)
{
if (!_control_outs) {
return;
}
// Move meter in the processors list
ProcessorList::iterator loc = find(_processors.begin(), _processors.end(), _control_outs);
_processors.erase(loc);
switch (p) {
case PreFader:
loc = find(_processors.begin(), _processors.end(), _amp);
if (loc != _processors.begin()) {
--loc;
}
break;
case PostFader:
loc = find(_processors.begin(), _processors.end(), _amp);
assert (loc != _processors.end());
loc++;
break;
}
_processors.insert(loc, _control_outs);
cerr << _name << " moved control outs to " << enum_2_string (p) << endl;
processors_changed (); /* EMIT SIGNAL */
_session.set_dirty ();
}
nframes_t nframes_t
Route::update_total_latency () Route::update_total_latency ()

View file

@ -4218,3 +4218,28 @@ Session::update_have_rec_enabled_diskstream ()
RecordStateChanged (); /* EMIT SIGNAL */ RecordStateChanged (); /* EMIT SIGNAL */
} }
} }
void
Session::solo_model_changed ()
{
Placement p;
switch (Config->get_solo_model()) {
case SoloInPlace:
return;
case SoloAFL:
p = PostFader;
break;
case SoloPFL:
p = PreFader;
break;
}
boost::shared_ptr<RouteList> r = routes.reader ();
for (RouteList::iterator i = r->begin(); i != r->end(); ++i) {
(*i)->put_control_outs_at (p);
}
}

View file

@ -3211,6 +3211,8 @@ Session::config_changed (std::string p, bool ours)
} }
} else if (p == "solo-mute-override") { } else if (p == "solo-mute-override") {
// catch_up_on_solo_mute_override (); // catch_up_on_solo_mute_override ();
} else if (p == "solo-model") {
solo_model_changed ();
} }
set_dirty (); set_dirty ();