diff options
author | Carl Hetherington <carl@carlh.net> | 2011-07-13 17:13:30 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2011-07-13 17:13:30 +0000 |
commit | 80972784e348aa51522e562b3d6b250745c489f0 (patch) | |
tree | 4d3fd6d92adea6a5e06e5ca9e2e516b960044d3e /gtk2_ardour/automation_time_axis.cc | |
parent | f6a50adf42b40291d7b62d7e08348f5bfb8cc4ac (diff) |
Fix non visibility of previously-visible MIDI automation
tracks on session reload.
git-svn-id: svn://localhost/ardour2/branches/3.0@9863 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/automation_time_axis.cc')
-rw-r--r-- | gtk2_ardour/automation_time_axis.cc | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc index def810f74e..7f70d3cd84 100644 --- a/gtk2_ardour/automation_time_axis.cc +++ b/gtk2_ardour/automation_time_axis.cc @@ -20,6 +20,8 @@ #include <utility> #include <gtkmm2ext/barcontroller.h> #include <gtkmm2ext/utils.h> +#include <boost/algorithm/string.hpp> +#include <boost/lexical_cast.hpp> #include "pbd/memento_command.h" #include "pbd/stacktrace.h" @@ -1024,3 +1026,52 @@ AutomationTimeAxisView::state_id() const (int) _parameter.channel()); } } + +/** Given a state id string, see if it is one generated by + * this class. If so, parse it into its components. + * @param state_id State ID string to parse. + * @param route_id Filled in with the route's ID if the state ID string is parsed. + * @param has_parameter Filled in with true if the state ID has a parameter, otherwise false. + * @param parameter Filled in with the state ID's parameter, if it has one. + * @return true if this is a state ID generated by this class, otherwise false. + */ + +bool +AutomationTimeAxisView::parse_state_id ( + string const & state_id, + PBD::ID & route_id, + bool & has_parameter, + Evoral::Parameter & parameter) +{ + stringstream s; + s << state_id; + + string a, b, c; + s >> a >> b >> c; + + if (a != X_("automation")) { + return false; + } + + route_id = PBD::ID (b); + + if (c.empty ()) { + has_parameter = false; + return true; + } + + has_parameter = true; + + vector<string> p; + boost::split (p, c, boost::is_any_of ("/")); + + assert (p.size() == 3); + + parameter = Evoral::Parameter ( + boost::lexical_cast<int> (p[0]), + boost::lexical_cast<int> (p[2]), + boost::lexical_cast<int> (p[1]) + ); + + return true; +} |