From 52d67203a10d3223f9f283fb56803b7979a0c2bd Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sat, 25 Apr 2015 20:17:58 +0200 Subject: [PATCH] Trim Automation UI --- gtk2_ardour/audio_time_axis.cc | 8 ++++++ gtk2_ardour/automation_line.cc | 1 + gtk2_ardour/route_time_axis.cc | 50 ++++++++++++++++++++++++++++++++++ gtk2_ardour/route_time_axis.h | 4 +++ 4 files changed, 63 insertions(+) diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc index 01eda95d15..40c35d7cba 100644 --- a/gtk2_ardour/audio_time_axis.cc +++ b/gtk2_ardour/audio_time_axis.cc @@ -106,6 +106,10 @@ AudioTimeAxisView::set_route (boost::shared_ptr rt) create_automation_child (GainAutomation, false); } + if (automation_child (TrimAutomation) == 0) { + create_automation_child (TrimAutomation, false); + } + /* if set_state above didn't create a mute automation child, we need to make one */ if (automation_child (MuteAutomation) == 0) { create_automation_child (MuteAutomation, false); @@ -199,6 +203,10 @@ AudioTimeAxisView::create_automation_child (const Evoral::Parameter& param, bool create_gain_automation_child (param, show); + } else if (param.type() == TrimAutomation) { + + create_trim_automation_child (param, show); + } else if (param.type() == PanWidthAutomation || param.type() == PanElevationAutomation || param.type() == PanAzimuthAutomation) { diff --git a/gtk2_ardour/automation_line.cc b/gtk2_ardour/automation_line.cc index 43245f58d8..38ac7354b7 100644 --- a/gtk2_ardour/automation_line.cc +++ b/gtk2_ardour/automation_line.cc @@ -119,6 +119,7 @@ AutomationLine::AutomationLine (const string& name, trackview.session()->register_with_memento_command_factory(alist->id(), this); if (alist->parameter().type() == GainAutomation || + alist->parameter().type() == TrimAutomation || alist->parameter().type() == EnvelopeAutomation || desc.unit == ParameterDescriptor::DB) { set_uses_gain_mapping (true); diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index c0dedb895b..d0e116c971 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -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 (&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 (&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 () { @@ -2749,6 +2775,30 @@ 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 c = _route->trim()->gain_control(); + if (!c || ! _route->trim()->active()) { + error << "Route has no trim automation, unable to add automation track view." << endmsg; + 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) { diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h index ea278e4175..57b2bbb960 100644 --- a/gtk2_ardour/route_time_axis.h +++ b/gtk2_ardour/route_time_axis.h @@ -239,12 +239,14 @@ protected: void color_handler (); void region_view_added (RegionView*); void create_gain_automation_child (const Evoral::Parameter &, bool); + void create_trim_automation_child (const Evoral::Parameter &, bool); void create_mute_automation_child (const Evoral::Parameter &, bool); void setup_processor_menu_and_curves (); void route_color_changed (); bool can_edit_name() const; boost::shared_ptr gain_track; + boost::shared_ptr trim_track; boost::shared_ptr mute_track; StreamView* _view; @@ -306,6 +308,7 @@ protected: protected: void update_gain_track_visibility (); + void update_trim_track_visibility (); void update_mute_track_visibility (); void update_pan_track_visibility (); @@ -316,6 +319,7 @@ protected: void ensure_pan_views (bool show = true); Gtk::CheckMenuItem* gain_automation_item; + Gtk::CheckMenuItem* trim_automation_item; Gtk::CheckMenuItem* mute_automation_item; std::list > pan_tracks; Gtk::CheckMenuItem* pan_automation_item; -- 2.30.2