summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-06-17 19:30:54 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-06-17 19:30:54 +0000
commit566ce557368e84ce550f480cb5cf03aae1aa0cfa (patch)
tree1507ac79e5277ecfa84c427aa3ec671a9bff57e2 /libs/ardour
parentdaf0e333a942a19fcfc4c72d1193eb21c294a0a7 (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.h1
-rw-r--r--libs/ardour/ardour/session.h1
-rw-r--r--libs/ardour/ardour/types.h3
-rw-r--r--libs/ardour/enums.cc3
-rw-r--r--libs/ardour/route.cc38
-rw-r--r--libs/ardour/session.cc25
-rw-r--r--libs/ardour/session_state.cc2
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 ();