using namespace Gtk;
using namespace Editing;
+Pango::FontDescription AutomationTimeAxisView::name_font;
+bool AutomationTimeAxisView::have_name_font = false;
+
AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Route> r, PublicEditor& e, TimeAxisView& rent,
ArdourCanvas::Canvas& canvas, const string & nom,
const string & state_name, const string & nomparent)
clear_button (_("clear")),
auto_button (X_("")) /* force addition of a label */
{
+ if (!have_name_font) {
+ name_font = get_font_for_style (X_("AutomationTrackName"));
+ have_name_font = true;
+ }
+
automation_menu = 0;
in_destructor = false;
auto_off_item = 0;
string shortpname = _name;
bool shortened = false;
-
- if (_name.length()) {
- if (shortpname.length() > 18) {
- shortpname = shortpname.substr (0, 16);
- shortpname += "...";
- shortened = true;
- }
+
+ int ignore_width;
+ shortpname = fit_to_pixels (_name, 60, name_font, ignore_width, true);
+
+ if (shortpname != _name ){
+ shortened = true;
}
+
name_label.set_text (shortpname);
name_label.set_alignment (Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER);
/* limit the plug name string */
- string pname = nomparent;
-
- if (pname.length() > 14) {
- pname = pname.substr (0, 11);
- pname += "...";
+ string pname = fit_to_pixels (nomparent, 60, name_font, ignore_width, true);
+ if (pname != nomparent) {
shortened = true;
}
controls_frame.set_shadow_type (Gtk::SHADOW_ETCHED_OUT);
XMLNode* xml_node = get_parent_with_state()->get_child_xml_node (_state_name);
- set_state (*xml_node);
+
+ if (xml_node) {
+ set_state (*xml_node);
+ }
/* make sure labels etc. are correct */
bind (mem_fun(*this, &AutomationTimeAxisView::set_automation_state), (AutoState) Touch)));
}
- automation_menu->popup (1, 0);
+ automation_menu->popup (1, gtk_get_current_event_time());
}
case Cut:
if ((what_we_got = alist.cut ((*i).start, (*i).end)) != 0) {
editor.get_cut_buffer().add (what_we_got);
- _session.add_command (new MementoCommand<AutomationList>(alist, &before, &alist.get_state()));
+ _session.add_command (new MementoCommand<AutomationList>(alist, new XMLNode (before), &alist.get_state()));
ret = true;
}
break;
case Clear:
if ((what_we_got = alist.cut ((*i).start, (*i).end)) != 0) {
- _session.add_command (new MementoCommand<AutomationList>(alist, &before, &alist.get_state()));
+ _session.add_command (new MementoCommand<AutomationList>(alist, new XMLNode (before), &alist.get_state()));
delete what_we_got;
what_we_got = 0;
ret = true;
break;
}
}
-
+
+ delete &before;
+
if (what_we_got) {
for (AutomationList::iterator x = what_we_got->begin(); x != what_we_got->end(); ++x) {
double foo = (*x)->value;