more pre-commit testing
[ardour.git] / gtk2_ardour / route_time_axis.cc
index c0dedb895bfbcd10b3fef558940b439ea6e47757..ebbaf8833840fae01a478c2da5e567d06f91b044 100644 (file)
@@ -112,6 +112,7 @@ RouteTimeAxisView::RouteTimeAxisView (PublicEditor& ed, Session* sess, ArdourCan
        , gm (sess, true, 75, 14)
        , _ignore_set_layer_display (false)
        , gain_automation_item(NULL)
+       , trim_automation_item(NULL)
        , mute_automation_item(NULL)
        , pan_automation_item(NULL)
 {
@@ -522,6 +523,15 @@ RouteTimeAxisView::build_automation_action_menu (bool for_selection)
                _main_automation_menu_map[Evoral::Parameter(GainAutomation)] = gain_automation_item;
        }
 
+       if (trim_track) {
+               items.push_back (CheckMenuElem (_("Trim"), sigc::mem_fun (*this, &RouteTimeAxisView::update_trim_track_visibility)));
+               trim_automation_item = dynamic_cast<Gtk::CheckMenuItem*> (&items.back ());
+               trim_automation_item->set_active ((!for_selection || _editor.get_selection().tracks.size() == 1) &&
+                                                 (trim_track && string_is_affirmative (trim_track->gui_property ("visible"))));
+
+               _main_automation_menu_map[Evoral::Parameter(TrimAutomation)] = trim_automation_item;
+       }
+
        if (mute_track) {
                items.push_back (CheckMenuElem (_("Mute"), sigc::mem_fun (*this, &RouteTimeAxisView::update_mute_track_visibility)));
                mute_automation_item = dynamic_cast<Gtk::CheckMenuItem*> (&items.back ());
@@ -1896,6 +1906,22 @@ RouteTimeAxisView::update_gain_track_visibility ()
        }
 }
 
+void
+RouteTimeAxisView::update_trim_track_visibility ()
+{
+       bool const showit = trim_automation_item->get_active();
+
+       if (showit != string_is_affirmative (trim_track->gui_property ("visible"))) {
+               trim_track->set_marked_for_display (showit);
+
+               /* now trigger a redisplay */
+
+               if (!no_redraw) {
+                        _route->gui_changed (X_("visible_tracks"), (void *) 0); /* EMIT_SIGNAL */
+               }
+       }
+}
+
 void
 RouteTimeAxisView::update_mute_track_visibility ()
 {
@@ -2551,7 +2577,7 @@ RouteTimeAxisView::meter_changed ()
 {
        ENSURE_GUI_THREAD (*this, &RouteTimeAxisView::meter_changed)
        reset_meter();
-       if (_route && !no_redraw) {
+       if (_route && !no_redraw && ARDOUR_UI::config()->get_show_track_meters()) {
                request_redraw ();
        }
        // reset peak when meter point changes
@@ -2749,6 +2775,29 @@ RouteTimeAxisView::create_gain_automation_child (const Evoral::Parameter& param,
        add_automation_child (Evoral::Parameter(GainAutomation), gain_track, show);
 }
 
+void
+RouteTimeAxisView::create_trim_automation_child (const Evoral::Parameter& param, bool show)
+{
+       boost::shared_ptr<AutomationControl> c = _route->trim()->gain_control();
+       if (!c || ! _route->trim()->active()) {
+               return;
+       }
+
+       trim_track.reset (new AutomationTimeAxisView (_session,
+                                                     _route, _route->trim(), c, param,
+                                                     _editor,
+                                                     *this,
+                                                     false,
+                                                     parent_canvas,
+                                                     _route->trim()->describe_parameter(param)));
+
+       if (_view) {
+               _view->foreach_regionview (sigc::mem_fun (*trim_track.get(), &TimeAxisView::add_ghost));
+       }
+
+       add_automation_child (Evoral::Parameter(TrimAutomation), trim_track, show);
+}
+
 void
 RouteTimeAxisView::create_mute_automation_child (const Evoral::Parameter& param, bool show)
 {