diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-06-17 19:30:54 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-06-17 19:30:54 +0000 |
commit | 566ce557368e84ce550f480cb5cf03aae1aa0cfa (patch) | |
tree | 1507ac79e5277ecfa84c427aa3ec671a9bff57e2 /libs/ardour | |
parent | daf0e333a942a19fcfc4c72d1193eb21c294a0a7 (diff) |
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
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/ardour/route.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/session.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/types.h | 3 | ||||
-rw-r--r-- | libs/ardour/enums.cc | 3 | ||||
-rw-r--r-- | libs/ardour/route.cc | 38 | ||||
-rw-r--r-- | libs/ardour/session.cc | 25 | ||||
-rw-r--r-- | libs/ardour/session_state.cc | 2 |
7 files changed, 69 insertions, 4 deletions
diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h index 122927ff7d..f34c4d3d20 100644 --- a/libs/ardour/ardour/route.h +++ b/libs/ardour/ardour/route.h @@ -197,6 +197,7 @@ class Route : public SessionObject, public AutomatableControls boost::shared_ptr<Send> internal_send_for (boost::shared_ptr<const Route> target) const; BufferSet* get_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. * Used to return where and why an processor list configuration request failed. diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index e970d6e9e4..b248698242 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -1465,6 +1465,7 @@ class Session : public PBD::StatefulDestructible, public boost::noncopyable void route_solo_changed (void *src, boost::weak_ptr<Route>); void catch_up_on_solo (); 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 modify_solo_mute (bool, bool); void strip_portname_for_solo (std::string& portname); diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h index 874a3f7ca0..3067928161 100644 --- a/libs/ardour/ardour/types.h +++ b/libs/ardour/ardour/types.h @@ -332,7 +332,8 @@ namespace ARDOUR { enum SoloModel { SoloInPlace, - SoloBus + SoloAFL, + SoloPFL }; enum AutoConnectOption { diff --git a/libs/ardour/enums.cc b/libs/ardour/enums.cc index 94878bc97e..7410d8ef8c 100644 --- a/libs/ardour/enums.cc +++ b/libs/ardour/enums.cc @@ -229,7 +229,8 @@ setup_enum_writer () REGISTER (_LayerModel); REGISTER_ENUM (SoloInPlace); - REGISTER_ENUM (SoloBus); + REGISTER_ENUM (SoloAFL); + REGISTER_ENUM (SoloPFL); REGISTER (_SoloModel); REGISTER_ENUM (AutoConnectPhysical); diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index c3e5862270..b2c3d27766 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -522,7 +522,8 @@ Route::mod_solo_level (int32_t delta) } break; - case SoloBus: + case SoloAFL: + case SoloPFL: /* control outs are used for soloing */ if (_control_outs) { _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); } break; - case SoloBus: + case SoloAFL: + case SoloPFL: if (_control_outs) { _control_outs->set_solo_level (_solo_level); _control_outs->set_solo_isolated (_solo_isolated); @@ -2287,6 +2289,38 @@ Route::set_meter_point (MeterPoint p, void *src) _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 Route::update_total_latency () diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index e87f315a24..23c6ce89c1 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -4218,3 +4218,28 @@ Session::update_have_rec_enabled_diskstream () 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); + } +} diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc index f11342a0fd..3893b0a98c 100644 --- a/libs/ardour/session_state.cc +++ b/libs/ardour/session_state.cc @@ -3211,6 +3211,8 @@ Session::config_changed (std::string p, bool ours) } } else if (p == "solo-mute-override") { // catch_up_on_solo_mute_override (); + } else if (p == "solo-model") { + solo_model_changed (); } set_dirty (); |