X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fautomation_time_axis.cc;h=4ba09120adb9a60461ee1b6773eb695c55fb4b21;hb=e12432cc632125821d6ed192d129ef385fb25002;hp=8adc1a904e55f14eee1b1307023dc17cd6ece592;hpb=10cb0a7646ae7da18e5e6f49b940a5e921a73b57;p=ardour.git diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc index 8adc1a904e..4ba09120ad 100644 --- a/gtk2_ardour/automation_time_axis.cc +++ b/gtk2_ardour/automation_time_axis.cc @@ -19,6 +19,9 @@ #include #include +#include +#include +#include #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 p; + boost::split (p, c, boost::is_any_of ("/")); + + assert (p.size() == 3); + + parameter = Evoral::Parameter ( + boost::lexical_cast (p[0]), + boost::lexical_cast (p[2]), + boost::lexical_cast (p[1]) + ); + + return true; }