new hellenic translation, plus new names in about dialog
[ardour.git] / gtk2_ardour / automation_time_axis.cc
index 2efb621b37c9e8c53ac5617938439e4d4d206a81..0da3a38fdc64ffbb9790e750ba38d50239ddfbdb 100644 (file)
@@ -21,6 +21,9 @@ using namespace PBD;
 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)
@@ -34,6 +37,11 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
          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;
@@ -84,14 +92,14 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
 
        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);
 
@@ -99,11 +107,8 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
 
                /* 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;
                }
 
@@ -150,11 +155,15 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
        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 */
 
        automation_state_changed ();
+       ColorChanged.connect (mem_fun (*this, &AutomationTimeAxisView::color_handler));
 }
 
 AutomationTimeAxisView::~AutomationTimeAxisView ()
@@ -186,7 +195,7 @@ AutomationTimeAxisView::auto_clicked ()
                                           bind (mem_fun(*this, &AutomationTimeAxisView::set_automation_state), (AutoState) Touch)));
        }
 
-       automation_menu->popup (1, 0);
+       automation_menu->popup (1, gtk_get_current_event_time());
 }
 
 
@@ -565,7 +574,7 @@ AutomationTimeAxisView::cut_copy_clear_objects_one (AutomationLine& line, PointS
                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;
@@ -577,7 +586,7 @@ AutomationTimeAxisView::cut_copy_clear_objects_one (AutomationLine& line, PointS
                        
                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;
@@ -585,7 +594,9 @@ AutomationTimeAxisView::cut_copy_clear_objects_one (AutomationLine& line, PointS
                        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;
@@ -676,7 +687,7 @@ AutomationTimeAxisView::get_selectables (nframes_t start, nframes_t end, double
                   y_position is the "origin" or "top" of the track.
                */
 
-               double mybot = y_position + height; // XXX need to include Editor::track_spacing; 
+               double mybot = y_position + height;
 
                if (y_position >= top && mybot <= bot) {
 
@@ -777,6 +788,42 @@ AutomationTimeAxisView::exited ()
        hide_all_but_selected_control_points ();
 }
 
+void
+AutomationTimeAxisView::set_colors () {
+
+    for( list<GhostRegion *>::iterator i=ghosts.begin(); i != ghosts.end(); i++ ) {
+       (*i)->set_colors();
+    }
+    
+    for( vector<AutomationLine *>::iterator i=lines.begin(); i != lines.end(); i++ ) {
+       (*i)->set_colors();
+    }
+
+}
+
+void
+AutomationTimeAxisView::color_handler (ColorID id, uint32_t val) {
+    
+       switch (id) {
+       case cGhostTrackWave:
+       case cGhostTrackWaveClip:
+       case cGhostTrackZeroLine:
+
+       case cControlPoint:
+       case cControlPointFill:
+       case cControlPointOutline:
+       case cAutomationLine:
+               set_colors ();
+
+               break;
+
+       default: 
+               break;
+       }
+}
+
+
+
 void
 AutomationTimeAxisView::set_state (const XMLNode& node)
 {