summaryrefslogtreecommitdiff
path: root/gtk2_ardour/automation_time_axis.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour/automation_time_axis.cc')
-rw-r--r--gtk2_ardour/automation_time_axis.cc51
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;
+}