A few comments.
[ardour.git] / gtk2_ardour / automation_time_axis.cc
index 8adc1a904e55f14eee1b1307023dc17cd6ece592..4ba09120adb9a60461ee1b6773eb695c55fb4b21 100644 (file)
@@ -19,6 +19,9 @@
 
 #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"
@@ -84,6 +87,7 @@ AutomationTimeAxisView::AutomationTimeAxisView (
        , _view (show_regions ? new AutomationStreamView (*this) : 0)
        , _name (nom)
        , auto_button (X_("")) /* force addition of a label */
+       , _show_regions (show_regions)
 {
        if (!have_name_font) {
                name_font = get_font_for_style (X_("AutomationTrackName"));
@@ -150,21 +154,19 @@ AutomationTimeAxisView::AutomationTimeAxisView (
 
        /* rearrange the name display */
 
+       controls_table.remove (name_hbox);
+       controls_table.attach (name_hbox, 1, 6, 0, 1,  Gtk::FILL|Gtk::EXPAND,  Gtk::FILL|Gtk::EXPAND, 3, 0);
+
        /* we never show these for automation tracks, so make
           life easier and remove them.
        */
 
        hide_name_entry();
 
-       /* keep the parameter name short */
-
-       string shortpname = _name;
-       int ignore_width;
-       shortpname = fit_to_pixels (_name, 60, name_font, ignore_width, true);
-
-       name_label.set_text (shortpname);
+       name_label.set_text (_name);
        name_label.set_alignment (Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER);
         name_label.set_name (X_("TrackParameterName"));
+       name_label.set_ellipsize (Pango::ELLIPSIZE_END);
 
        string tipname = nomparent;
        if (!tipname.empty()) {
@@ -175,8 +177,7 @@ AutomationTimeAxisView::AutomationTimeAxisView (
 
        /* add the buttons */
        controls_table.attach (hide_button, 0, 1, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
-
-       controls_table.attach (auto_button, 5, 8, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
+       controls_table.attach (auto_button, 6, 8, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND);
 
        if (_controller) {
                /* add bar controller */
@@ -229,6 +230,7 @@ AutomationTimeAxisView::AutomationTimeAxisView (
 
 AutomationTimeAxisView::~AutomationTimeAxisView ()
 {
+       delete _view;
 }
 
 void
@@ -943,9 +945,9 @@ AutomationTimeAxisView::set_state_2X (const XMLNode& node, int /*version*/)
                        if (yn) {
                                _canvas_display->show (); /* FIXME: necessary? show_at? */
                        }
-                       set_gui_property ("visible", (yn ? "yes" : "no"));
+                       set_gui_property ("visible", yn);
                } else {
-                       set_gui_property ("visible", "no");
+                       set_gui_property ("visible", false);
                }
        }
 
@@ -953,7 +955,7 @@ AutomationTimeAxisView::set_state_2X (const XMLNode& node, int /*version*/)
 }
 
 int
-AutomationTimeAxisView::set_state (const XMLNode& node, int /*version*/)
+AutomationTimeAxisView::set_state (const XMLNode&, int /*version*/)
 {
        return 0;
 }
@@ -1022,6 +1024,55 @@ AutomationTimeAxisView::state_id() const
                                       _route->id(), 
                                       _parameter.type(),
                                       _parameter.id(),
-                                      _parameter.channel());
+                                      (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;
 }