diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2014-07-01 14:36:58 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2014-07-01 14:37:05 -0400 |
commit | 0a87bbc37b5cba75853cf923acb66c7520c1b89b (patch) | |
tree | 1524d144e3ac358a8f5f1cbbb5fbb1a705cb1eac /gtk2_ardour | |
parent | e3a6ea02731f35f6011428df0374e44ff16ce616 (diff) |
add partial support for mute automation (playback does not work, data is not recorded in the session)
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/audio_time_axis.cc | 33 | ||||
-rw-r--r-- | gtk2_ardour/audio_time_axis.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/midi_time_axis.cc | 9 | ||||
-rw-r--r-- | gtk2_ardour/route_time_axis.cc | 24 | ||||
-rw-r--r-- | gtk2_ardour/route_time_axis.h | 2 |
5 files changed, 70 insertions, 0 deletions
diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc index 8c022abdb7..cc2686920a 100644 --- a/gtk2_ardour/audio_time_axis.cc +++ b/gtk2_ardour/audio_time_axis.cc @@ -104,6 +104,11 @@ AudioTimeAxisView::set_route (boost::shared_ptr<Route> rt) create_automation_child (GainAutomation, 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); + } + if (_route->panner_shell()) { _route->panner_shell()->Changed.connect (*this, invalidator (*this), boost::bind (&AudioTimeAxisView::ensure_pan_views, this, false), gui_context()); @@ -202,6 +207,11 @@ AudioTimeAxisView::create_automation_child (const Evoral::Parameter& param, bool /* handled elsewhere */ + } else if (param.type() == MuteAutomation) { + + create_mute_automation_child (param, show); + + } else { error << "AudioTimeAxisView: unknown automation child " << EventTypeMap::instance().to_symbol(param) << endmsg; } @@ -284,6 +294,22 @@ AudioTimeAxisView::update_gain_track_visibility () } void +AudioTimeAxisView::update_mute_track_visibility () +{ + bool const showit = mute_automation_item->get_active(); + + if (showit != string_is_affirmative (mute_track->gui_property ("visible"))) { + mute_track->set_marked_for_display (showit); + + /* now trigger a redisplay */ + + if (!no_redraw) { + _route->gui_changed (X_("visible_tracks"), (void *) 0); /* EMIT_SIGNAL */ + } + } +} + +void AudioTimeAxisView::update_pan_track_visibility () { bool const showit = pan_automation_item->get_active(); @@ -404,6 +430,13 @@ AudioTimeAxisView::build_automation_action_menu (bool for_selection) _main_automation_menu_map[Evoral::Parameter(GainAutomation)] = gain_automation_item; + automation_items.push_back (CheckMenuElem (_("Mute"), sigc::mem_fun (*this, &AudioTimeAxisView::update_mute_track_visibility))); + mute_automation_item = dynamic_cast<Gtk::CheckMenuItem*> (&automation_items.back ()); + mute_automation_item->set_active ((!for_selection || _editor.get_selection().tracks.size() == 1) && + (mute_track && string_is_affirmative (mute_track->gui_property ("visible")))); + + _main_automation_menu_map[Evoral::Parameter(MuteAutomation)] = mute_automation_item; + if (!pan_tracks.empty()) { automation_items.push_back (CheckMenuElem (_("Pan"), sigc::mem_fun (*this, &AudioTimeAxisView::update_pan_track_visibility))); pan_automation_item = dynamic_cast<Gtk::CheckMenuItem*> (&automation_items.back ()); diff --git a/gtk2_ardour/audio_time_axis.h b/gtk2_ardour/audio_time_axis.h index 5790080160..7a5afe4f97 100644 --- a/gtk2_ardour/audio_time_axis.h +++ b/gtk2_ardour/audio_time_axis.h @@ -105,9 +105,11 @@ class AudioTimeAxisView : public RouteTimeAxisView void update_control_names (); void update_gain_track_visibility (); + void update_mute_track_visibility (); void update_pan_track_visibility (); Gtk::CheckMenuItem* gain_automation_item; + Gtk::CheckMenuItem* mute_automation_item; std::list<boost::shared_ptr<AutomationTimeAxisView> > pan_tracks; Gtk::CheckMenuItem* pan_automation_item; }; diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc index c37916dbf0..af19c9b037 100644 --- a/gtk2_ardour/midi_time_axis.cc +++ b/gtk2_ardour/midi_time_axis.cc @@ -171,6 +171,11 @@ MidiTimeAxisView::set_route (boost::shared_ptr<Route> rt) create_automation_child (GainAutomation, 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); + } + if (_route->panner_shell()) { _route->panner_shell()->Changed.connect (*this, invalidator (*this), boost::bind (&MidiTimeAxisView::ensure_pan_views, this, false), gui_context()); } @@ -1265,6 +1270,10 @@ MidiTimeAxisView::create_automation_child (const Evoral::Parameter& param, bool create_gain_automation_child (param, show); break; + case MuteAutomation: + create_mute_automation_child (param, show); + break; + case PluginAutomation: /* handled elsewhere */ break; diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index 55dbec5f8b..77fb0815bc 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -2526,6 +2526,30 @@ RouteTimeAxisView::create_gain_automation_child (const Evoral::Parameter& param, add_automation_child (Evoral::Parameter(GainAutomation), gain_track, show); } +void +RouteTimeAxisView::create_mute_automation_child (const Evoral::Parameter& param, bool show) +{ + boost::shared_ptr<AutomationControl> c = _route->mute_control(); + if (!c) { + error << "Route has no mute automation, unable to add automation track view." << endmsg; + return; + } + + mute_track.reset (new AutomationTimeAxisView (_session, + _route, _route, c, param, + _editor, + *this, + false, + parent_canvas, + _route->describe_parameter(param))); + + if (_view) { + _view->foreach_regionview (sigc::mem_fun (*mute_track.get(), &TimeAxisView::add_ghost)); + } + + add_automation_child (Evoral::Parameter(MuteAutomation), mute_track, show); +} + static void add_region_to_list (RegionView* rv, RegionList* l) { diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h index 3a717f0953..f56b747a8f 100644 --- a/gtk2_ardour/route_time_axis.h +++ b/gtk2_ardour/route_time_axis.h @@ -237,11 +237,13 @@ protected: void color_handler (); void region_view_added (RegionView*); void create_gain_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> mute_track; StreamView* _view; ArdourCanvas::Canvas& parent_canvas; |