summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2015-04-25 20:17:58 +0200
committerRobin Gareus <robin@gareus.org>2015-04-25 21:25:19 +0200
commit52d67203a10d3223f9f283fb56803b7979a0c2bd (patch)
treeb869dbd39cb87f14846dbfd6c11903e73b422997
parent517467f29747acde8baa6f42ed064e2ed58f5ea5 (diff)
Trim Automation UI
-rw-r--r--gtk2_ardour/audio_time_axis.cc8
-rw-r--r--gtk2_ardour/automation_line.cc1
-rw-r--r--gtk2_ardour/route_time_axis.cc50
-rw-r--r--gtk2_ardour/route_time_axis.h4
4 files changed, 63 insertions, 0 deletions
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<Route> 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<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 ());
@@ -1897,6 +1907,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 ()
{
bool const showit = mute_automation_item->get_active();
@@ -2750,6 +2776,30 @@ RouteTimeAxisView::create_gain_automation_child (const Evoral::Parameter& param,
}
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()) {
+ 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)
{
boost::shared_ptr<AutomationControl> c = _route->mute_control();
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<AutomationTimeAxisView> gain_track;
+ boost::shared_ptr<AutomationTimeAxisView> trim_track;
boost::shared_ptr<AutomationTimeAxisView> 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<boost::shared_ptr<AutomationTimeAxisView> > pan_tracks;
Gtk::CheckMenuItem* pan_automation_item;