GenericUI: Show automation UI for dropdowns
[ardour.git] / gtk2_ardour / automation_time_axis.cc
index 1c79593b3444b27441cf80fc21e5a6c6170c2c4c..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)
@@ -173,7 +173,9 @@ 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);
@@ -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);
        }
@@ -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);
@@ -870,7 +875,7 @@ AutomationTimeAxisView::what_has_visible_automation (const boost::shared_ptr<Aut
                        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);
@@ -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());
+}