Use a C++ bool constant
[ardour.git] / gtk2_ardour / automation_time_axis.cc
index c9deae95dfa529485cf39b08e7e432600ca23884..e2b74dae97898c93cb92184a76e5e2dbb2657b9a 100644 (file)
@@ -52,7 +52,7 @@
 #include "item_counts.h"
 #include "ui_config.h"
 
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace std;
 using namespace ARDOUR;
@@ -84,7 +84,7 @@ AutomationTimeAxisView::AutomationTimeAxisView (
        const string & nom,
        const string & nomparent
        )
-       : AxisView (s)
+       : SessionHandlePtr (s)
        , TimeAxisView (s, e, &parent, canvas)
        , _route (r)
        , _control (c)
@@ -110,7 +110,7 @@ AutomationTimeAxisView::AutomationTimeAxisView (
        }
        tipname += nom;
        _name = tipname;
-       
+
        CANVAS_DEBUG_NAME (_canvas_display, string_compose ("main for auto %2/%1", _name, r->name()));
        CANVAS_DEBUG_NAME (selection_group, string_compose ("selections for auto %2/%1", _name, r->name()));
        CANVAS_DEBUG_NAME (_ghost_group, string_compose ("ghosts for auto %2/%1", _name, r->name()));
@@ -173,12 +173,14 @@ AutomationTimeAxisView::AutomationTimeAxisView (
        //name label isn't editable on an automation track; remove the tooltip
        set_tooltip (name_label, X_(""));
 
-       /* repack the name label */
+       /* repack the name label, which TimeAxisView has already attached to
+        * the controls_table
+        */
 
        if (name_label.get_parent()) {
                name_label.get_parent()->remove (name_label);
        }
-       
+
        name_label.set_text (_name);
        name_label.set_alignment (Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER);
        name_label.set_name (X_("TrackParameterName"));
@@ -186,7 +188,6 @@ AutomationTimeAxisView::AutomationTimeAxisView (
 
        /* add the buttons */
        controls_table.set_border_width (1);
-       controls_table.remove (name_hbox);
        controls_table.attach (hide_button, 1, 2, 0, 1, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
        controls_table.attach (name_label,  2, 3, 1, 3, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND, 2, 0);
        controls_table.attach (auto_button, 3, 4, 2, 3, Gtk::SHRINK, Gtk::SHRINK, 0, 0);
@@ -199,12 +200,12 @@ AutomationTimeAxisView::AutomationTimeAxisView (
        // subscribe to route_active_changed, ...
        if (rtv && rtv->is_audio_track()) {
                blank0->set_name ("AudioTrackControlsBaseUnselected");
-       }
-       else if (rtv && rtv->is_midi_track()) {
+       } else if (rtv && rtv->is_midi_track()) {
                blank0->set_name ("MidiTrackControlsBaseUnselected");
-       }
-       else {
+       } else if (rtv) {
                blank0->set_name ("AudioBusControlsBaseUnselected");
+       } else {
+               blank0->set_name ("UnknownControlsBaseUnselected");
        }
        blank0->set_size_request (-1, -1);
        blank1->set_size_request (1, 0);
@@ -269,6 +270,7 @@ AutomationTimeAxisView::AutomationTimeAxisView (
                        );
 
                line->set_line_color (UIConfiguration::instance().color ("processor automation line"));
+               line->set_fill (true);
                line->queue_reset ();
                add_line (line);
        }
@@ -618,7 +620,7 @@ AutomationTimeAxisView::add_automation_event (GdkEvent* event, framepos_t when,
        }
 
        boost::shared_ptr<AutomationList> list = _line->the_list ();
-       
+
        if (list->in_write_pass()) {
                /* do not allow the GUI to add automation events during an
                   automation write pass.
@@ -628,32 +630,35 @@ AutomationTimeAxisView::add_automation_event (GdkEvent* event, framepos_t when,
 
        double x = 0;
 
-       _canvas_display->canvas_to_item (x, y);
+       _line->grab_item().canvas_to_item (x, y);
 
        /* compute vertical fractional position */
 
-       y = 1.0 - (y / height);
+       y = 1.0 - (y / _line->height());
 
        /* map using line */
 
        _line->view_to_model_coord (x, y);
 
-
        _editor.snap_to_with_modifier (when, event);
 
-       _editor.begin_reversible_command (_("add automation event"));
        XMLNode& before = list->get_state();
+       std::list<Selectable*> results;
+       if (list->editor_add (when, y, with_guard_points)) {
+               XMLNode& after = list->get_state();
+               _editor.begin_reversible_command (_("add automation event"));
+               _session->add_command (new MementoCommand<ARDOUR::AutomationList> (*list.get (), &before, &after));
 
-       list->editor_add (when, y, with_guard_points);
+               _line->get_selectables (when, when, 0.0, 1.0, results);
+               _editor.get_selection ().set (results);
 
-       XMLNode& after = list->get_state();
-       _session->add_command (new MementoCommand<ARDOUR::AutomationList> (*list.get (), &before, &after));
-       _editor.commit_reversible_command ();
-       _session->set_dirty ();
+               _editor.commit_reversible_command ();
+               _session->set_dirty ();
+       }
 }
 
 bool
-AutomationTimeAxisView::paste (framepos_t pos, const Selection& selection, PasteContext& ctx)
+AutomationTimeAxisView::paste (framepos_t pos, const Selection& selection, PasteContext& ctx, const int32_t sub_num)
 {
        if (_line) {
                return paste_one (pos, ctx.count, ctx.times, selection, ctx.counts, ctx.greedy);
@@ -781,11 +786,11 @@ AutomationTimeAxisView::add_line (boost::shared_ptr<AutomationLine> line)
 {
        if (_control && line) {
                assert(line->the_list() == _control->list());
-               
+
                _control->alist()->automation_state_changed.connect (
                        _list_connections, invalidator (*this), boost::bind (&AutomationTimeAxisView::automation_state_changed, this), gui_context()
                        );
-               
+
                _control->alist()->InterpolationChanged.connect (
                        _list_connections, invalidator (*this), boost::bind (&AutomationTimeAxisView::interpolation_changed, this, _1), gui_context()
                        );
@@ -860,17 +865,17 @@ AutomationTimeAxisView::what_has_visible_automation (const boost::shared_ptr<Aut
        assert (automatable);
 
        Automatable::Controls& controls (automatable->controls());
-       
+
        for (Automatable::Controls::iterator i = controls.begin(); i != controls.end(); ++i) {
-               
+
                boost::shared_ptr<AutomationControl> ac = boost::dynamic_pointer_cast<AutomationControl> (i->second);
 
                if (ac && ac->alist()) {
-                       
+
                        const XMLNode* gui_node = ac->extra_xml ("GUI");
-                       
+
                        if (gui_node) {
-                               const XMLProperty* prop = gui_node->property ("shown");
+                               XMLProperty const * prop = gui_node->property ("shown");
                                if (prop) {
                                        if (string_is_affirmative (prop->value())) {
                                                visible.insert (i->first);
@@ -909,8 +914,8 @@ AutomationTimeAxisView::state_id() const
        if (_automatable != _route && _control) {
                return string_compose ("automation %1", _control->id().to_s());
        } else if (_parameter) {
-               return string_compose ("automation %1 %2/%3/%4", 
-                                      _route->id(), 
+               return string_compose ("automation %1 %2/%3/%4",
+                                      _route->id(),
                                       _parameter.type(),
                                       _parameter.id(),
                                       (int) _parameter.channel());
@@ -1034,3 +1039,21 @@ AutomationTimeAxisView::cut_copy_clear_one (AutomationLine& line, Selection& sel
                }
        }
 }
+
+PresentationInfo const &
+AutomationTimeAxisView::presentation_info () const
+{
+       return _route->presentation_info();
+}
+
+boost::shared_ptr<Stripable>
+AutomationTimeAxisView::stripable () const
+{
+       return _route;
+}
+
+Gdk::Color
+AutomationTimeAxisView::color () const
+{
+       return gdk_color_from_rgb (_route->presentation_info().color());
+}