summaryrefslogtreecommitdiff
path: root/libs/ardour/panner_shell.cc
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2011-07-14 22:17:43 +0000
committerCarl Hetherington <carl@carlh.net>2011-07-14 22:17:43 +0000
commit48de21b1201fdf828c32ab396ac75dc884a96d90 (patch)
treeac89601041c49a8f572668ede9883fe2ab0ca20e /libs/ardour/panner_shell.cc
parenta5efa9a500d2c1b592656e91e9ea7ef7d535dcb3 (diff)
Move panner bypass state up to the PannerShell so that it is preserved even when new Panners are dropped in (refixes #4185).
git-svn-id: svn://localhost/ardour2/branches/3.0@9877 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/panner_shell.cc')
-rw-r--r--libs/ardour/panner_shell.cc33
1 files changed, 25 insertions, 8 deletions
diff --git a/libs/ardour/panner_shell.cc b/libs/ardour/panner_shell.cc
index e60012d8b4..c3ca2b4694 100644
--- a/libs/ardour/panner_shell.cc
+++ b/libs/ardour/panner_shell.cc
@@ -66,6 +66,7 @@ using namespace PBD;
PannerShell::PannerShell (string name, Session& s, boost::shared_ptr<Pannable> p)
: SessionObject (s, name)
, _pannable (p)
+ , _bypassed (false)
{
set_name (name);
}
@@ -124,18 +125,14 @@ PannerShell::configure_io (ChanCount in, ChanCount out)
}
XMLNode&
-PannerShell::get_state (void)
-{
- return state (true);
-}
-
-XMLNode&
-PannerShell::state (bool full)
+PannerShell::get_state ()
{
XMLNode* node = new XMLNode ("PannerShell");
+ node->add_property (X_("bypassed"), _bypassed ? X_("yes") : X_("no"));
+
if (_panner) {
- node->add_child_nocopy (_panner->state (full));
+ node->add_child_nocopy (_panner->get_state ());
}
return *node;
@@ -149,6 +146,10 @@ PannerShell::set_state (const XMLNode& node, int version)
const XMLProperty *prop;
LocaleGuard lg (X_("POSIX"));
+ if ((prop = node.property (X_("bypassed"))) != 0) {
+ set_bypassed (string_is_affirmative (prop->value ()));
+ }
+
_panner.reset ();
for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
@@ -326,3 +327,19 @@ PannerShell::run (BufferSet& inbufs, BufferSet& outbufs, framepos_t start_frame,
}
}
+void
+PannerShell::set_bypassed (bool yn)
+{
+ if (yn == _bypassed) {
+ return;
+ }
+
+ _bypassed = yn;
+ Changed (); /* EMIT SIGNAL */
+}
+
+bool
+PannerShell::bypassed () const
+{
+ return _bypassed;
+}