diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2016-04-08 16:49:47 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2016-05-31 15:30:40 -0400 |
commit | 653ae4acd639fef149314fe6f8c7a0d862afae40 (patch) | |
tree | ba32ff0efd9b105c207ad7e3b2e89d73e76b4355 /gtk2_ardour | |
parent | c107f1ab56270f4485ca2a787d575c2b5b53cfcf (diff) |
universal change in the design of the way Route/Track controls are designed and used. The controls now own their own state, rather than proxy for state in their owners.
Massive changes all over the code to accomodate this. Many things are not finished. Consider this a backup safety commit
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/add_route_dialog.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 16 | ||||
-rw-r--r-- | gtk2_ardour/audio_streamview.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 12 | ||||
-rw-r--r-- | gtk2_ardour/editor_routes.cc | 60 | ||||
-rw-r--r-- | gtk2_ardour/gain_meter.cc | 10 | ||||
-rw-r--r-- | gtk2_ardour/group_tabs.cc | 3 | ||||
-rw-r--r-- | gtk2_ardour/meter_strip.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/midi_streamview.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/mixer_actor.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/mixer_strip.cc | 12 | ||||
-rw-r--r-- | gtk2_ardour/monitor_section.cc | 3 | ||||
-rw-r--r-- | gtk2_ardour/route_time_axis.cc | 8 | ||||
-rw-r--r-- | gtk2_ardour/route_ui.cc | 193 | ||||
-rw-r--r-- | gtk2_ardour/route_ui.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/streamview.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/time_axis_view.cc | 4 |
17 files changed, 167 insertions, 172 deletions
diff --git a/gtk2_ardour/add_route_dialog.h b/gtk2_ardour/add_route_dialog.h index 51fccce4c9..f10fc11292 100644 --- a/gtk2_ardour/add_route_dialog.h +++ b/gtk2_ardour/add_route_dialog.h @@ -54,7 +54,7 @@ class AddRouteDialog : public ArdourDialog MidiTrack, MixedTrack, AudioBus, - MidiBus + MidiBus, VCAMaster, }; TypeWanted type_wanted() const; diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 1a5e131d3c..65b882fe6d 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -92,7 +92,9 @@ #include "ardour/source_factory.h" #include "ardour/slave.h" #include "ardour/system_exec.h" +#include "ardour/track.h" #include "ardour/vca_manager.h" +#include "ardour/utils.h" #include "LuaBridge/LuaBridge.h" @@ -1570,7 +1572,7 @@ void ARDOUR_UI::count_recenabled_streams (Route& route) { Track* track = dynamic_cast<Track*>(&route); - if (track && track->record_enabled()) { + if (track && track->rec_enable_control()->get_value()) { rec_enabled_streams += track->n_inputs().n_total(); } } @@ -2083,14 +2085,14 @@ ARDOUR_UI::trx_record_enable_all_tracks () boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track> (*r); assert (t); - if (t->record_enabled()) { + if (t->rec_enable_control()->get_value()) { none_record_enabled = false; break; } } if (none_record_enabled) { - _session->set_record_enabled (rl, true, Session::rt_cleanup); + _session->set_controls (route_list_to_control_list (rl, &Track::rec_enable_control), 1.0, Controllable::NoGroup); } return none_record_enabled; @@ -2388,7 +2390,7 @@ ARDOUR_UI::toggle_record_enable (uint32_t rid) boost::shared_ptr<Track> t; if ((t = boost::dynamic_pointer_cast<Track>(r)) != 0) { - t->set_record_enabled (!t->record_enabled(), Controllable::UseGroup); + t->rec_enable_control()->set_value (!t->rec_enable_control()->get_value(), Controllable::UseGroup); } } } @@ -5587,12 +5589,6 @@ void ARDOUR_UI::cancel_solo () { if (_session) { - if (_session->soloing()) { - _session->set_solo (_session->get_routes(), false); - } else if (_session->listening()) { - _session->set_listen (_session->get_routes(), false); - } - _session->clear_all_solo_state (_session->get_routes()); // safeguard, ideally this won't do anything, check the log-window } } diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc index 2b0aea34cb..9351a5da1f 100644 --- a/gtk2_ardour/audio_streamview.cc +++ b/gtk2_ardour/audio_streamview.cc @@ -186,7 +186,7 @@ AudioStreamView::setup_rec_box () if (!rec_active && _trackview.session()->record_status() == Session::Recording && - _trackview.track()->record_enabled()) { + _trackview.track()->rec_enable_control()->get_value()) { if (_trackview.audio_track()->mode() == Normal && UIConfiguration::instance().get_show_waveforms_while_recording() && rec_regions.size() == rec_rects.size()) { /* add a new region, but don't bother if they set show-waveforms-while-recording mid-record */ @@ -240,7 +240,7 @@ AudioStreamView::setup_rec_box () } else if (rec_active && (_trackview.session()->record_status() != Session::Recording || - !_trackview.track()->record_enabled())) { + !_trackview.track()->rec_enable_control()->get_value())) { screen_update_connection.disconnect(); rec_active = false; rec_updating = false; diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index f7617e4793..eb84428f92 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -5699,11 +5699,11 @@ Editor::toggle_record_enable () continue; if (first) { - new_state = !rtav->track()->record_enabled(); + new_state = !rtav->track()->rec_enable_control()->get_value(); first = false; } - rtav->track()->set_record_enabled (new_state, Controllable::UseGroup); + rtav->track()->rec_enable_control()->set_value (new_state, Controllable::UseGroup); } } @@ -5712,7 +5712,7 @@ Editor::toggle_solo () { bool new_state = false; bool first = true; - boost::shared_ptr<RouteList> rl (new RouteList); + boost::shared_ptr<ControlList> cl (new ControlList); for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) { RouteTimeAxisView *rtav = dynamic_cast<RouteTimeAxisView *>(*i); @@ -5726,10 +5726,10 @@ Editor::toggle_solo () first = false; } - rl->push_back (rtav->route()); + cl->push_back (rtav->route()->solo_control()); } - _session->set_solo (rl, new_state, Session::rt_cleanup, Controllable::UseGroup); + _session->set_controls (cl, new_state ? 1.0 : 0.0, Controllable::UseGroup); } void @@ -5754,7 +5754,7 @@ Editor::toggle_mute () rl->push_back (rtav->route()); } - _session->set_mute (rl, new_state, Session::rt_cleanup, Controllable::UseGroup); + _session->set_controls (route_list_to_control_list (rl, &Route::mute_control), new_state, Controllable::UseGroup); } void diff --git a/gtk2_ardour/editor_routes.cc b/gtk2_ardour/editor_routes.cc index 6197e03629..9a2153f99f 100644 --- a/gtk2_ardour/editor_routes.cc +++ b/gtk2_ardour/editor_routes.cc @@ -31,6 +31,8 @@ #include "ardour/midi_track.h" #include "ardour/route.h" #include "ardour/session.h" +#include "ardour/solo_isolate_control.h" +#include "ardour/utils.h" #include "gtkmm2ext/cell_renderer_pixbuf_multi.h" #include "gtkmm2ext/cell_renderer_pixbuf_toggle.h" @@ -422,11 +424,8 @@ EditorRoutes::on_tv_rec_enable_changed (std::string const & path_string) RouteTimeAxisView *rtv = dynamic_cast<RouteTimeAxisView*> (tv); if (rtv && rtv->track()) { - DisplaySuspender ds; - boost::shared_ptr<RouteList> rl (new RouteList); // TODO check rec-safe and ... - rl->push_back (rtv->route()); - _session->set_record_enabled (rl, !rtv->track()->record_enabled(), Session::rt_cleanup); + _session->set_control (rtv->track()->rec_enable_control(), !rtv->track()->rec_enable_control()->get_value(), Controllable::UseGroup); } } @@ -455,9 +454,7 @@ EditorRoutes::on_tv_mute_enable_toggled (std::string const & path_string) RouteTimeAxisView *rtv = dynamic_cast<RouteTimeAxisView*> (tv); if (rtv != 0) { - boost::shared_ptr<RouteList> rl (new RouteList); - rl->push_back (rtv->route()); - _session->set_mute (rl, !rtv->route()->muted(), Session::rt_cleanup); + _session->set_control (rtv->route()->mute_control(), rtv->route()->mute_control()->get_value() ? 0.0 : 1.0, Controllable::UseGroup); } } @@ -471,13 +468,15 @@ EditorRoutes::on_tv_solo_enable_toggled (std::string const & path_string) RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (tv); if (rtv != 0) { - boost::shared_ptr<RouteList> rl (new RouteList); - rl->push_back (rtv->route()); + bool newval; + if (Config->get_solo_control_is_listen_control()) { - _session->set_listen (rl, !rtv->route()->listening_via_monitor(), Session::rt_cleanup); + newval = !rtv->route()->listening_via_monitor(); } else { - _session->set_solo (rl, !rtv->route()->self_soloed(), Session::rt_cleanup); + newval = !rtv->route()->self_soloed(); } + + rtv->route()->solo_control()->set_value (newval ? 1.0 : 0.0, Controllable::UseGroup); } } @@ -491,7 +490,7 @@ EditorRoutes::on_tv_solo_isolate_toggled (std::string const & path_string) RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (tv); if (rtv) { - rtv->route()->set_solo_isolated (!rtv->route()->solo_isolated(), Controllable::UseGroup); + rtv->route()->solo_isolate_control()->set_value (rtv->route()->solo_isolate_control()->get_value() ? 0.0 : 1.0, Controllable::UseGroup); } } @@ -505,7 +504,7 @@ EditorRoutes::on_tv_solo_safe_toggled (std::string const & path_string) RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (tv); if (rtv) { - rtv->route()->set_solo_safe (!rtv->route()->solo_safe(), Controllable::UseGroup); + rtv->route()->solo_safe_control()->set_value (rtv->route()->solo_safe_control()->get_value() ? 0.0 : 1.0, Controllable::UseGroup); } } @@ -734,8 +733,8 @@ EditorRoutes::routes_added (list<RouteTimeAxisView*> routes) row[_columns.mute_state] = (*x)->route()->muted() ? Gtkmm2ext::ExplicitActive : Gtkmm2ext::Off; row[_columns.solo_state] = RouteUI::solo_active_state ((*x)->route()); row[_columns.solo_visible] = !(*x)->route()->is_master (); - row[_columns.solo_isolate_state] = (*x)->route()->solo_isolated(); - row[_columns.solo_safe_state] = (*x)->route()->solo_safe(); + row[_columns.solo_isolate_state] = (*x)->route()->solo_isolate_control()->solo_isolated(); + row[_columns.solo_safe_state] = (*x)->route()->solo_safe_control()->solo_safe(); row[_columns.name_editable] = true; boost::weak_ptr<Route> wr ((*x)->route()); @@ -745,8 +744,8 @@ EditorRoutes::routes_added (list<RouteTimeAxisView*> routes) if ((*x)->is_track()) { boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track> ((*x)->route()); - t->RecordEnableChanged.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::update_rec_display, this), gui_context()); - t->RecordSafeChanged.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::update_rec_display, this), gui_context()); + t->rec_enable_control()->Changed.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::update_rec_display, this), gui_context()); + t->rec_safe_control()->Changed.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::update_rec_display, this), gui_context()); } if ((*x)->is_midi_track()) { @@ -1280,25 +1279,27 @@ EditorRoutes::key_press (GdkEventKey* ev) case 'm': if (get_relevant_routes (rl)) { - _session->set_mute (rl, !rl->front()->muted(), Session::rt_cleanup); + _session->set_controls (route_list_to_control_list (rl, &Route::mute_control), rl->front()->muted() ? 0.0 : 1.0, Controllable::NoGroup); } return true; break; case 's': if (get_relevant_routes (rl)) { - if (Config->get_solo_control_is_listen_control()) { - _session->set_listen (rl, !rl->front()->listening_via_monitor(), Session::rt_cleanup); - } else { - _session->set_solo (rl, !rl->front()->self_soloed(), Session::rt_cleanup); - } + _session->set_controls (route_list_to_control_list (rl, &Route::solo_control), rl->front()->self_soloed() ? 0.0 : 1.0, Controllable::NoGroup); } return true; break; case 'r': if (get_relevant_routes (rl)) { - _session->set_record_enabled (rl, !rl->front()->record_enabled(), Session::rt_cleanup); + for (RouteList::const_iterator r = rl->begin(); r != rl->end(); ++r) { + boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track> (*r); + if (t) { + _session->set_controls (route_list_to_control_list (rl, &Track::rec_enable_control), !t->rec_enable_control()->get_value(), Controllable::NoGroup); + break; + } + } } break; @@ -1645,10 +1646,13 @@ EditorRoutes::idle_update_mute_rec_solo_etc() (*i)[_columns.solo_isolate_state] = RouteUI::solo_isolate_active_state (route) ? 1 : 0; (*i)[_columns.solo_safe_state] = RouteUI::solo_safe_active_state (route) ? 1 : 0; (*i)[_columns.active] = route->active (); - if (boost::dynamic_pointer_cast<Track> (route)) { + + boost::shared_ptr<Track> trk (boost::dynamic_pointer_cast<Track>(route)); + + if (trk) { boost::shared_ptr<MidiTrack> mt = boost::dynamic_pointer_cast<MidiTrack> (route); - if (route->record_enabled()) { + if (trk->rec_enable_control()->get_value()) { if (_session->record_status() == Session::Recording) { (*i)[_columns.rec_state] = 1; } else { @@ -1660,8 +1664,8 @@ EditorRoutes::idle_update_mute_rec_solo_etc() (*i)[_columns.rec_state] = 0; } - (*i)[_columns.rec_safe] = route->record_safe () ? 1 : 0; - (*i)[_columns.name_editable] = !route->record_enabled (); + (*i)[_columns.rec_safe] = !trk->rec_safe_control()->get_value(); + (*i)[_columns.name_editable] = !trk->rec_enable_control()->get_value(); } } diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc index b38e653bac..baf4193d27 100644 --- a/gtk2_ardour/gain_meter.cc +++ b/gtk2_ardour/gain_meter.cc @@ -479,10 +479,10 @@ GainMeterBase::gain_activated () /* clamp to displayable values */ if (_data_type == DataType::AUDIO) { f = min (f, 6.0f); - _control->set_value (dB_to_coefficient(f), Controllable::NoGroup); + _control->set_value (dB_to_coefficient(f), Controllable::UseGroup); } else { f = min (fabs (f), 2.0f); - _control->set_value (f, Controllable::NoGroup); + _control->set_value (f, Controllable::UseGroup); } if (gain_display.has_focus()) { @@ -541,11 +541,7 @@ GainMeterBase::fader_moved () value = gain_adjustment.get_value(); } - if (_route && _control == _route->gain_control()) { - _route->set_gain (value, Controllable::UseGroup); - } else { - _control->set_value (value, Controllable::NoGroup); - } + _control->set_value (value, Controllable::UseGroup); } show_gain (); diff --git a/gtk2_ardour/group_tabs.cc b/gtk2_ardour/group_tabs.cc index 0e429e562a..a930fbbce4 100644 --- a/gtk2_ardour/group_tabs.cc +++ b/gtk2_ardour/group_tabs.cc @@ -366,7 +366,8 @@ GroupTabs::new_from_rec_enabled () RouteList rec_enabled; for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) { - if ((*i)->record_enabled()) { + boost::shared_ptr<Track> trk (boost::dynamic_pointer_cast<Track> (*i)); + if (trk && trk->rec_enable_control()->get_value()) { rec_enabled.push_back (*i); } } diff --git a/gtk2_ardour/meter_strip.cc b/gtk2_ardour/meter_strip.cc index 82acd1dad5..b324a846ff 100644 --- a/gtk2_ardour/meter_strip.cc +++ b/gtk2_ardour/meter_strip.cc @@ -366,7 +366,7 @@ MeterStrip::set_button_names() { mute_button->set_text (S_("Mute|M")); - if (_route && _route->solo_safe()) { + if (_route && _route->solo_safe_control()->solo_safe()) { solo_button->set_visual_state (Gtkmm2ext::VisualState (solo_button->visual_state() | Gtkmm2ext::Insensitive)); } else { solo_button->set_visual_state (Gtkmm2ext::VisualState (solo_button->visual_state() & ~Gtkmm2ext::Insensitive)); diff --git a/gtk2_ardour/midi_streamview.cc b/gtk2_ardour/midi_streamview.cc index 9258cf027d..e369c5842d 100644 --- a/gtk2_ardour/midi_streamview.cc +++ b/gtk2_ardour/midi_streamview.cc @@ -440,7 +440,7 @@ MidiStreamView::setup_rec_box () if (!rec_active && _trackview.session()->record_status() == Session::Recording && - _trackview.track()->record_enabled()) { + _trackview.track()->rec_enable_control()->get_value()) { if (UIConfiguration::instance().get_show_waveforms_while_recording() && rec_regions.size() == rec_rects.size()) { @@ -512,7 +512,7 @@ MidiStreamView::setup_rec_box () } else if (rec_active && (_trackview.session()->record_status() != Session::Recording || - !_trackview.track()->record_enabled())) { + !_trackview.track()->rec_enable_control()->get_value())) { screen_update_connection.disconnect(); rec_active = false; rec_updating = false; diff --git a/gtk2_ardour/mixer_actor.cc b/gtk2_ardour/mixer_actor.cc index 7ffcc6f3a8..403f198d4f 100644 --- a/gtk2_ardour/mixer_actor.cc +++ b/gtk2_ardour/mixer_actor.cc @@ -172,7 +172,7 @@ printf("setting gain to unity (?)"); BOOST_FOREACH(RouteUI* r, _route_targets) { boost::shared_ptr<Route> rp = r->route(); if (rp) { - rp->set_gain (1.0, Controllable::NoGroup); + rp->gain_control()->set_value (1.0, Controllable::NoGroup); } } } diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index 4b4b5f1110..5c13030127 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -950,7 +950,7 @@ MixerStrip::input_press (GdkEventButton *ev) return true; } - if (_session->actively_recording() && _route->record_enabled()) + if (_session->actively_recording() && is_track() && track()->rec_enable_control()->get_value()) return true; switch (ev->button) { @@ -1665,7 +1665,7 @@ MixerStrip::name_button_button_press (GdkEventButton* ev) list_route_operations (); /* do not allow rename if the track is record-enabled */ - rename_menu_item->set_sensitive (!_route->record_enabled()); + rename_menu_item->set_sensitive (!is_track() || !track()->rec_enable_control()->get_value()); route_ops_menu->popup (1, ev->time); return true; @@ -1681,7 +1681,7 @@ MixerStrip::name_button_button_release (GdkEventButton* ev) list_route_operations (); /* do not allow rename if the track is record-enabled */ - rename_menu_item->set_sensitive (!_route->record_enabled()); + rename_menu_item->set_sensitive (!is_track() || !track()->rec_enable_control()->get_value()); route_ops_menu->popup (1, ev->time); } @@ -1695,7 +1695,7 @@ MixerStrip::number_button_button_press (GdkEventButton* ev) list_route_operations (); /* do not allow rename if the track is record-enabled */ - rename_menu_item->set_sensitive (!_route->record_enabled()); + rename_menu_item->set_sensitive (!is_track() || !track()->rec_enable_control()->get_value()); route_ops_menu->popup (1, ev->time); return true; @@ -2141,7 +2141,7 @@ MixerStrip::set_button_names () monitor_section_button->set_text (_("Mon")); } - if (_route && _route->solo_safe()) { + if (_route && _route->solo_safe_control()->solo_safe()) { solo_button->set_visual_state (Gtkmm2ext::VisualState (solo_button->visual_state() | Gtkmm2ext::Insensitive)); } else { solo_button->set_visual_state (Gtkmm2ext::VisualState (solo_button->visual_state() & ~Gtkmm2ext::Insensitive)); @@ -2170,7 +2170,7 @@ MixerStrip::set_button_names () monitor_section_button->set_text (S_("Mon|O")); } - if (_route && _route->solo_safe()) { + if (_route && _route->solo_safe_control()->solo_safe()) { solo_button->set_visual_state (Gtkmm2ext::VisualState (solo_button->visual_state() | Gtkmm2ext::Insensitive)); } else { solo_button->set_visual_state (Gtkmm2ext::VisualState (solo_button->visual_state() & ~Gtkmm2ext::Insensitive)); diff --git a/gtk2_ardour/monitor_section.cc b/gtk2_ardour/monitor_section.cc index f24cab7c3e..e14b571723 100644 --- a/gtk2_ardour/monitor_section.cc +++ b/gtk2_ardour/monitor_section.cc @@ -36,6 +36,7 @@ #include "ardour/monitor_processor.h" #include "ardour/port.h" #include "ardour/route.h" +#include "ardour/solo_isolate_control.h" #include "ardour/user_bundle.h" #include "ardour/plugin_manager.h" @@ -1246,7 +1247,7 @@ MonitorSection::cancel_isolate (GdkEventButton*) { if (_session) { boost::shared_ptr<RouteList> rl (_session->get_routes ()); - _session->set_solo_isolated (rl, false, Session::rt_cleanup, Controllable::NoGroup); + _session->set_controls (route_list_to_control_list (rl, &Route::solo_isolate_control), 0.0, Controllable::NoGroup); } return true; diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc index 8c475f5acc..f291af5dc5 100644 --- a/gtk2_ardour/route_time_axis.cc +++ b/gtk2_ardour/route_time_axis.cc @@ -2493,7 +2493,11 @@ RouteTimeAxisView::can_edit_name () const { /* we do not allow track name changes if it is record enabled */ - return !_route->record_enabled(); + boost::shared_ptr<Track> trk (boost::dynamic_pointer_cast<Track> (_route)); + if (!trk) { + return true; + } + return !trk->rec_enable_control()->get_value(); } void @@ -2724,7 +2728,7 @@ RouteTimeAxisView::remove_underlay (StreamView* v) void RouteTimeAxisView::set_button_names () { - if (_route && _route->solo_safe()) { + if (_route && _route->solo_safe_control()->solo_safe()) { solo_button->set_visual_state (Gtkmm2ext::VisualState (solo_button->visual_state() | Gtkmm2ext::Insensitive)); } else { solo_button->set_visual_state (Gtkmm2ext::VisualState (solo_button->visual_state() & ~Gtkmm2ext::Insensitive)); diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index afaf4561c8..09a9dc8972 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -34,8 +34,21 @@ #include "ardour/dB.h" #include "ardour/route_group.h" +#include "ardour/solo_isolate_control.h" #include "ardour/vca.h" #include "ardour/vca_manager.h" +#include "ardour/audio_track.h" +#include "ardour/audioengine.h" +#include "ardour/filename_extensions.h" +#include "ardour/midi_track.h" +#include "ardour/monitor_control.h" +#include "ardour/internal_send.h" +#include "ardour/profile.h" +#include "ardour/phase_control.h" +#include "ardour/send.h" +#include "ardour/route.h" +#include "ardour/session.h" +#include "ardour/template_utils.h" #include "ardour_ui.h" #include "editor.h" @@ -55,16 +68,6 @@ #include "timers.h" #include "ui_config.h" -#include "ardour/audio_track.h" -#include "ardour/audioengine.h" -#include "ardour/filename_extensions.h" -#include "ardour/midi_track.h" -#include "ardour/internal_send.h" -#include "ardour/profile.h" -#include "ardour/send.h" -#include "ardour/route.h" -#include "ardour/session.h" -#include "ardour/template_utils.h" #include "i18n.h" using namespace Gtk; @@ -270,10 +273,7 @@ RouteUI::set_route (boost::shared_ptr<Route> rp) _route->solo_control()->Changed.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::update_solo_display, this), gui_context()); _route->solo_safe_control()->Changed.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::update_solo_display, this), gui_context()); _route->solo_isolate_control()->Changed.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::update_solo_display, this), gui_context()); - - if (_route->phase_control()) { - _route->phase_control()->Changed.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::polarity_changed, this), gui_context()); - } + _route->phase_control()->Changed.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::polarity_changed, this), gui_context()); if (is_track()) { track()->FreezeChange.connect (*this, invalidator (*this), boost::bind (&RouteUI::map_frozen, this), gui_context()); @@ -290,8 +290,8 @@ RouteUI::set_route (boost::shared_ptr<Route> rp) if (_session->writable() && is_track()) { boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track>(_route); - t->RecordEnableChanged.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::route_rec_enable_changed, this), gui_context()); - t->RecordSafeChanged.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::route_rec_enable_changed, this), gui_context()); + t->rec_enable_control()->Changed.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::route_rec_enable_changed, this), gui_context()); + t->rec_safe_control()->Changed.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::route_rec_enable_changed, this), gui_context()); rec_enable_button->show(); rec_enable_button->set_controllable (t->rec_enable_control()); @@ -309,7 +309,7 @@ RouteUI::set_route (boost::shared_ptr<Route> rp) if (is_track()) { boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track>(_route); - t->MonitoringChanged.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::monitoring_changed, this), gui_context()); + t->monitoring_control()->Changed.connect (route_connections, invalidator (*this), boost::bind (&RouteUI::monitoring_changed, this, _1, _2), gui_context()); update_monitoring_display (); } @@ -383,7 +383,7 @@ RouteUI::mute_press (GdkEventButton* ev) if (Keyboard::is_button2_event (ev)) { // button2-click is "momentary" - _mute_release = new SoloMuteRelease (_route->muted ()); + _mute_release = new SoloMuteRelease (_route->mute_control()->muted ()); } if (ev->button == 1 || Keyboard::is_button2_event (ev)) { @@ -415,7 +415,7 @@ RouteUI::mute_press (GdkEventButton* ev) } DisplaySuspender ds; - _session->set_mute (copy, !_route->muted()); + _session->set_controls (route_list_to_control_list (copy, &Route::mute_control), _route->muted() ? 0.0 : 1.0, Controllable::UseGroup); } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) { @@ -444,7 +444,7 @@ RouteUI::mute_press (GdkEventButton* ev) } DisplaySuspender ds; - _session->set_mute (rl, !_route->muted(), Session::rt_cleanup, Controllable::InverseGroup); + _session->set_controls (route_list_to_control_list (rl, &Route::mute_control), _route->muted() ? 0.0 : 1.0, Controllable::InverseGroup); } } else { @@ -458,7 +458,7 @@ RouteUI::mute_press (GdkEventButton* ev) _mute_release->routes = rl; } - _session->set_mute (rl, !_route->muted()); + _session->set_control (_route->mute_control(), _route->muted() ? 0.0 : 1.0, Controllable::UseGroup); } } @@ -472,7 +472,7 @@ RouteUI::mute_release (GdkEventButton* /*ev*/) { if (_mute_release){ DisplaySuspender ds; - _session->set_mute (_mute_release->routes, _mute_release->active, Session::rt_cleanup, Controllable::UseGroup); + _session->set_controls (route_list_to_control_list (_mute_release->routes, &Route::mute_control), _mute_release->active, Controllable::UseGroup); delete _mute_release; _mute_release = 0; } @@ -572,11 +572,7 @@ RouteUI::solo_press(GdkEventButton* ev) } DisplaySuspender ds; - if (Config->get_solo_control_is_listen_control()) { - _session->set_listen (_session->get_routes(), !_route->listening_via_monitor(), Session::rt_cleanup, Controllable::UseGroup); - } else { - _session->set_solo (_session->get_routes(), !_route->self_soloed(), Session::rt_cleanup, Controllable::UseGroup); - } + _session->set_controls (route_list_to_control_list (_session->get_routes(), &Route::solo_control), !_route->solo_control()->get_value(), Controllable::UseGroup); } else if (Keyboard::modifier_state_contains (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) { @@ -600,14 +596,16 @@ RouteUI::solo_press(GdkEventButton* ev) /* ??? we need a just_one_listen() method */ } else { DisplaySuspender ds; - _session->set_just_one_solo (_route, true); + boost::shared_ptr<ControlList> cl (new ControlList); + cl->push_back (_route->solo_control()); + _session->set_controls (cl, 1.0, Controllable::NoGroup); } } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) { // shift-click: toggle solo isolated status - _route->set_solo_isolated (!_route->solo_isolated(), Controllable::UseGroup); + _route->solo_isolate_control()->set_value (_route->solo_isolate_control()->get_value() ? 0.0 : 1.0, Controllable::UseGroup); delete _solo_release; _solo_release = 0; @@ -647,11 +645,7 @@ RouteUI::solo_press(GdkEventButton* ev) DisplaySuspender ds; - if (Config->get_solo_control_is_listen_control()) { - _session->set_listen (rl, !_route->listening_via_monitor(), Session::rt_cleanup, Controllable::InverseGroup); - } else { - _session->set_solo (rl, !_route->self_soloed(), Session::rt_cleanup, Controllable::InverseGroup); - } + _session->set_controls (route_list_to_control_list (rl, &Route::solo_control), !_route->self_soloed(), Controllable::InverseGroup); } delete _solo_release; @@ -669,11 +663,7 @@ RouteUI::solo_press(GdkEventButton* ev) } DisplaySuspender ds; - if (Config->get_solo_control_is_listen_control()) { - _session->set_listen (rl, !_route->listening_via_monitor()); - } else { - _session->set_solo (rl, !_route->self_soloed()); - } + _session->set_controls (route_list_to_control_list (rl, &Route::solo_control), !_route->self_soloed(), Controllable::UseGroup); } } } @@ -690,11 +680,7 @@ RouteUI::solo_release (GdkEventButton* /*ev*/) } else { DisplaySuspender ds; - if (Config->get_solo_control_is_listen_control()) { - _session->set_listen (_solo_release->routes, _solo_release->active, Session::rt_cleanup, Controllable::UseGroup); - } else { - _session->set_solo (_solo_release->routes, _solo_release->active, Session::rt_cleanup, Controllable::UseGroup); - } + _session->set_controls (route_list_to_control_list (_solo_release->routes, &Route::solo_control), _solo_release->active ? 1.0 : 0.0, Controllable::UseGroup); } delete _solo_release; @@ -741,7 +727,7 @@ RouteUI::rec_enable_press(GdkEventButton* ev) } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) { DisplaySuspender ds; - _session->set_record_enabled (_session->get_routes(), !_route->record_enabled()); + _session->set_controls (route_list_to_control_list (_session->get_routes(), &Track::rec_enable_control), !track()->rec_enable_control()->get_value(), Controllable::NoGroup); } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) { @@ -757,7 +743,7 @@ RouteUI::rec_enable_press(GdkEventButton* ev) rl->push_back (_route); DisplaySuspender ds; - _session->set_record_enabled (rl, !_route->record_enabled(), Session::rt_cleanup, Controllable::InverseGroup); + _session->set_controls (route_list_to_control_list (rl, &Track::rec_enable_control), !track()->rec_enable_control()->get_value(), Controllable::InverseGroup); } } else if (Keyboard::is_context_menu_event (ev)) { @@ -766,10 +752,8 @@ RouteUI::rec_enable_press(GdkEventButton* ev) } else { - boost::shared_ptr<RouteList> rl (new RouteList); - rl->push_back (route()); - DisplaySuspender ds; - _session->set_record_enabled (rl, !_route->record_enabled()); + boost::shared_ptr<Track> trk = track(); + _session->set_control (trk->rec_enable_control(), !trk->rec_enable_control()->get_value(), Controllable::UseGroup); } } @@ -777,7 +761,7 @@ RouteUI::rec_enable_press(GdkEventButton* ev) } void -RouteUI::monitoring_changed () +RouteUI::monitoring_changed (bool, Controllable::GroupControlDisposition) { update_monitoring_display (); } @@ -797,7 +781,7 @@ RouteUI::update_monitoring_display () MonitorState ms = t->monitoring_state(); - if (t->monitoring_choice() & MonitorInput) { + if (t->monitoring_control()->monitoring_choice() & MonitorInput) { monitor_input_button->set_active_state (Gtkmm2ext::ExplicitActive); } else { if (ms & MonitoringInput) { @@ -807,7 +791,7 @@ RouteUI::update_monitoring_display () } } - if (t->monitoring_choice() & MonitorDisk) { + if (t->monitoring_control()->monitoring_choice() & MonitorDisk) { monitor_disk_button->set_active_state (Gtkmm2ext::ExplicitActive); } else { if (ms & MonitoringDisk) { @@ -863,8 +847,8 @@ RouteUI::monitor_release (GdkEventButton* ev, MonitorChoice monitor_choice) signal together, which requires yet more buffers. */ - if (t->monitoring_choice() & monitor_choice) { - mc = MonitorChoice (t->monitoring_choice() & ~monitor_choice); + if (t->monitoring_control()->monitoring_choice() & monitor_choice) { + mc = MonitorChoice (t->monitoring_control()->monitoring_choice() & ~monitor_choice); } else { /* this line will change when the options are non-orthogonal */ // mc = MonitorChoice (t->monitoring_choice() | monitor_choice); @@ -887,7 +871,7 @@ RouteUI::monitor_release (GdkEventButton* ev, MonitorChoice monitor_choice) } DisplaySuspender ds; - _session->set_monitoring (rl, mc, Session::rt_cleanup, Controllable::UseGroup); + _session->set_controls (route_list_to_control_list (rl, &Route::monitoring_control), (double) mc, Controllable::UseGroup); return false; } @@ -912,7 +896,9 @@ RouteUI::build_record_menu () } if (step_edit_item) { - step_edit_item->set_sensitive (!_route->record_enabled()); + if (track()->rec_enable_control()->get_value()) { + step_edit_item->set_sensitive (false); + } step_edit_item->set_active (midi_track()->step_editing()); } if (rec_safe_item) { @@ -924,7 +910,7 @@ RouteUI::build_record_menu () void RouteUI::toggle_step_edit () { - if (!is_midi_track() || _route->record_enabled()) { + if (!is_midi_track() || track()->rec_enable_control()->get_value()) { return; } @@ -1168,7 +1154,7 @@ RouteUI::solo_isolate_active_state (boost::shared_ptr<Route> r) return Gtkmm2ext::Off; } - if (r->solo_isolated()) { + if (r->solo_isolate_control()->solo_isolated()) { return Gtkmm2ext::ExplicitActive; } else { return Gtkmm2ext::Off; @@ -1182,7 +1168,7 @@ RouteUI::solo_safe_active_state (boost::shared_ptr<Route> r) return Gtkmm2ext::Off; } - if (r->solo_safe()) { + if (r->solo_safe_control()->solo_safe()) { return Gtkmm2ext::ExplicitActive; } else { return Gtkmm2ext::Off; @@ -1192,13 +1178,13 @@ RouteUI::solo_safe_active_state (boost::shared_ptr<Route> r) void RouteUI::update_solo_display () { - bool yn = _route->solo_safe (); + bool yn = _route->solo_safe_control()->solo_safe (); if (solo_safe_check && solo_safe_check->get_active() != yn) { solo_safe_check->set_active (yn); } - yn = _route->solo_isolated (); + yn = _route->solo_isolate_control()->solo_isolated (); if (solo_isolated_check && solo_isolated_check->get_active() != yn) { solo_isolated_check->set_active (yn); @@ -1207,7 +1193,7 @@ RouteUI::update_solo_display () set_button_names (); if (solo_isolated_led) { - if (_route->solo_isolated()) { + if (_route->solo_isolate_control()->solo_isolated()) { solo_isolated_led->set_active_state (Gtkmm2ext::ExplicitActive); } else { solo_isolated_led->unset_active_state (); @@ -1215,7 +1201,7 @@ RouteUI::update_solo_display () } if (solo_safe_led) { - if (_route->solo_safe()) { + if (_route->solo_safe_control()->solo_safe()) { solo_safe_led->set_active_state (Gtkmm2ext::ExplicitActive); } else { solo_safe_led->unset_active_state (); @@ -1248,7 +1234,7 @@ RouteUI::mute_active_state (Session* s, boost::shared_ptr<Route> r) if (r->muted ()) { /* full mute */ return Gtkmm2ext::ExplicitActive; - } else if (r->muted_by_others ()) { + } else if (r->muted_by_others_soloing ()) { /* this will reflect both solo mutes AND master mutes */ return Gtkmm2ext::ImplicitActive; } else { @@ -1261,10 +1247,11 @@ RouteUI::mute_active_state (Session* s, boost::shared_ptr<Route> r) if (r->muted()) { /* full mute */ return Gtkmm2ext::ExplicitActive; - } else if (r->mute_master()->muted_by_others()) { + } else if (r->muted_by_others()) { /* note the direct use of MuteMaster API here. We are not interested in showing - others-soloed-so-this-muted status in this branch. + others-soloed-so-this-muted status in this + conditional branch. */ return Gtkmm2ext::ImplicitActive; } else { @@ -1335,11 +1322,16 @@ RouteUI::blink_rec_display (bool blinkOn) if (!rec_enable_button || !_route) { return; } + if (boost::dynamic_pointer_cast<Send>(_current_delivery)) { return; } - if (_route->record_enabled()) { + if (!is_track()) { + return; + } + + if (track()->rec_enable_control()->get_value()) { switch (_session->record_status ()) { case Session::Recording: rec_enable_button->set_active_state (Gtkmm2ext::ExplicitActive); @@ -1347,12 +1339,12 @@ RouteUI::blink_rec_display (bool blinkOn) case Session::Disabled: case Session::Enabled: - if ( UIConfiguration::instance().get_blink_rec_arm() ) - rec_enable_button->set_active_state ( blinkOn ? Gtkmm2ext::ExplicitActive : Gtkmm2ext::Off ); - else - rec_enable_button->set_active_state ( ImplicitActive ); + if (UIConfiguration::instance().get_blink_rec_arm()) { + rec_enable_button->set_active_state ( blinkOn ? Gtkmm2ext::ExplicitActive : Gtkmm2ext::Off ); + } else { + rec_enable_button->set_active_state ( ImplicitActive ); + } break; - } if (step_edit_item) { @@ -1381,14 +1373,14 @@ RouteUI::build_solo_menu (void) Gtk::CheckMenuItem* check; check = new Gtk::CheckMenuItem(_("Solo Isolate")); - check->set_active (_route->solo_isolated()); + check->set_active (_route->solo_isolate_control()->solo_isolated()); check->signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &RouteUI::toggle_solo_isolated), check)); items.push_back (CheckMenuElem(*check)); solo_isolated_check = dynamic_cast<Gtk::CheckMenuItem*>(&items.back()); check->show_all(); check = new Gtk::CheckMenuItem(_("Solo Safe")); - check->set_active (_route->solo_safe()); + check->set_active (_route->solo_safe_control()->solo_safe()); check->signal_toggled().connect (sigc::bind (sigc::mem_fun (*this, &RouteUI::toggle_solo_safe), check)); items.push_back (CheckMenuElem(*check)); solo_safe_check = dynamic_cast<Gtk::CheckMenuItem*>(&items.back()); @@ -1442,16 +1434,16 @@ RouteUI::build_mute_menu(void) void RouteUI::init_mute_menu(MuteMaster::MutePoint mp, Gtk::CheckMenuItem* check) { - check->set_active (_route->mute_points() & mp); + check->set_active (_route->mute_control()->mute_points() & mp); } void RouteUI::toggle_mute_menu(MuteMaster::MutePoint mp, Gtk::CheckMenuItem* check) { if (check->get_active()) { - _route->set_mute_points (MuteMaster::MutePoint (_route->mute_points() | mp)); + _route->mute_control()->set_mute_points (MuteMaster::MutePoint (_route->mute_control()->mute_points() | mp)); } else { - _route->set_mute_points (MuteMaster::MutePoint (_route->mute_points() & ~mp)); + _route->mute_control()->set_mute_points (MuteMaster::MutePoint (_route->mute_control()->mute_points() & ~mp)); } } @@ -1461,7 +1453,7 @@ RouteUI::muting_change () ENSURE_GUI_THREAD (*this, &RouteUI::muting_change) bool yn; - MuteMaster::MutePoint current = _route->mute_points (); + MuteMaster::MutePoint current = _route->mute_control()->mute_points (); yn = (current & MuteMaster::PreFader); @@ -1496,7 +1488,7 @@ RouteUI::solo_isolate_button_release (GdkEventButton* ev) } bool view = solo_isolated_led->active_state(); - bool model = _route->solo_isolated(); + bool model = _route->solo_isolate_control()->solo_isolated(); /* called BEFORE the view has changed */ @@ -1506,11 +1498,11 @@ RouteUI::solo_isolate_button_release (GdkEventButton* ev) if (model) { /* disable isolate for all routes */ DisplaySuspender ds; - _session->set_solo_isolated (_session->get_routes(), false, Session::rt_cleanup, Controllable::NoGroup); + _session->set_controls (route_list_to_control_list (_session->get_routes(), &Route::solo_isolate_control), 0.0, Controllable::NoGroup); } else { /* enable isolate for all routes */ DisplaySuspender ds; - _session->set_solo_isolated (_session->get_routes(), true, Session::rt_cleanup, Controllable::NoGroup); + _session->set_controls (route_list_to_control_list (_session->get_routes(), &Route::solo_isolate_control), 1.0, Controllable::NoGroup); } } else { @@ -1522,7 +1514,7 @@ RouteUI::solo_isolate_button_release (GdkEventButton* ev) boost::shared_ptr<RouteList> rl (new RouteList); rl->push_back (_route); DisplaySuspender ds; - _session->set_solo_isolated (rl, !view, Session::rt_cleanup, Controllable::NoGroup); + _session->set_controls (route_list_to_control_list (rl, &Route::solo_isolate_control), view ? 0.0 : 1.0, Controllable::NoGroup); } } } @@ -1538,7 +1530,7 @@ RouteUI::solo_safe_button_release (GdkEventButton* ev) } bool view = solo_safe_led->active_state(); - bool model = _route->solo_safe(); + bool model = _route->solo_safe_control()->solo_safe(); if (ev->button == 1) { if (Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::TertiaryModifier))) { @@ -1547,20 +1539,20 @@ RouteUI::solo_safe_button_release (GdkEventButton* ev) /* disable solo safe for all routes */ DisplaySuspender ds; for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) { - (*i)->set_solo_safe (false, Controllable::NoGroup); + (*i)->solo_safe_control()->set_value (0.0, Controllable::NoGroup); } } else { /* enable solo safe for all routes */ DisplaySuspender ds; for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) { - (*i)->set_solo_safe (true, Controllable::NoGroup); + (*i)->solo_safe_control()->set_value (1.0, Controllable::NoGroup); } } } else { if (model == view) { /* flip just this route */ - _route->set_solo_safe (!view, Controllable::NoGroup); + _route->solo_safe_control()->set_value (view ? 0.0 : 1.0, Controllable::NoGroup); } } } @@ -1572,19 +1564,19 @@ void RouteUI::toggle_solo_isolated (Gtk::CheckMenuItem* check) { bool view = check->get_active(); - bool model = _route->solo_isolated(); + bool model = _route->solo_isolate_control()->solo_isolated(); /* called AFTER the view has changed */ if (model != view) { - _route->set_solo_isolated (view, Controllable::UseGroup); + _route->solo_isolate_control()->set_value (view ? 1.0 : 0.0, Controllable::UseGroup); } } void RouteUI::toggle_solo_safe (Gtk::CheckMenuItem* check) { - _route->set_solo_safe (check->get_active(), Controllable::UseGroup); + _route->solo_safe_control()->set_value (check->get_active() ? 1.0 : 0.0, Controllable::UseGroup); } /** Ask the user to choose a colour, and then apply that color to my route @@ -2022,25 +2014,25 @@ RouteUI::parameter_changed (string const & p) void RouteUI::step_gain_up () { - _route->set_gain (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) + 0.1), Controllable::UseGroup); + _route->gain_control()->set_value (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) + 0.1), Controllable::UseGroup); } void RouteUI::page_gain_up () { - _route->set_gain (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) + 0.5), Controllable::UseGroup); + _route->gain_control()->set_value (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) + 0.5), Controllable::UseGroup); } void RouteUI::step_gain_down () { - _route->set_gain (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) - 0.1), Controllable::UseGroup); + _route->gain_control()->set_value (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) - 0.1), Controllable::UseGroup); } void RouteUI::page_gain_down () { - _route->set_gain (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) - 0.5), Controllable::UseGroup); + _route->gain_control()->set_value (dB_to_coefficient (accurate_coefficient_to_dB (_route->gain_control()->get_value()) - 0.5), Controllable::UseGroup); } void @@ -2158,9 +2150,9 @@ RouteUI::set_invert_button_state () ArdourButton* b = _invert_buttons.front (); - if (_route->phase_invert().count() == _route->phase_invert().size()) { + if (_route->phase_control()->count() == _route->phase_control()->size()) { b->set_active_state (Gtkmm2ext::ExplicitActive); - } else if (_route->phase_invert().any()) { + } else if (_route->phase_control()->any()) { b->set_active_state (Gtkmm2ext::ImplicitActive); } else { b->set_active_state (Gtkmm2ext::Off); @@ -2172,7 +2164,7 @@ RouteUI::set_invert_button_state () int j = 0; for (vector<ArdourButton*>::iterator i = _invert_buttons.begin(); i != _invert_buttons.end(); ++i, ++j) { - (*i)->set_active (_route->phase_invert (j)); + (*i)->set_active (_route->phase_control()->inverted (j)); } } @@ -2185,7 +2177,7 @@ RouteUI::invert_release (GdkEventButton* ev, uint32_t i) uint32_t const N = _route->input()->n_ports().n_audio (); if (N <= _max_invert_buttons) { /* left-click inverts phase so long as we have a button per channel */ - _route->set_phase_invert (i, !_invert_buttons[i]->get_active()); + _route->phase_control()->set_phase_invert (i, !_invert_buttons[i]->get_active()); return false; } } @@ -2216,7 +2208,7 @@ RouteUI::invert_press (GdkEventButton* ev) items.push_back (CheckMenuElem (string_compose (X_("Ø%1"), i + 1), sigc::bind (sigc::mem_fun (*this, &RouteUI::invert_menu_toggled), i))); Gtk::CheckMenuItem* e = dynamic_cast<Gtk::CheckMenuItem*> (&items.back ()); ++_i_am_the_modifier; - e->set_active (_route->phase_invert (i)); + e->set_active (_route->phase_control()->inverted (i)); --_i_am_the_modifier; } @@ -2232,7 +2224,8 @@ RouteUI::invert_menu_toggled (uint32_t c) return; } - _route->set_phase_invert (c, !_route->phase_invert (c)); + + _route->phase_control()->set_phase_invert (c, !_route->phase_control()->inverted (c)); } void diff --git a/gtk2_ardour/route_ui.h b/gtk2_ardour/route_ui.h index 788c65101b..8be2c227ff 100644 --- a/gtk2_ardour/route_ui.h +++ b/gtk2_ardour/route_ui.h @@ -156,7 +156,7 @@ class RouteUI : public virtual AxisView bool monitor_input_release(GdkEventButton*); bool monitor_disk_press(GdkEventButton*); bool monitor_disk_release(GdkEventButton*); - void monitoring_changed (); + void monitoring_changed (bool, PBD::Controllable::GroupControlDisposition); void update_monitoring_display (); void edit_input_configuration (); diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc index 28dd1ab8f1..bf14eaf2e2 100644 --- a/gtk2_ardour/streamview.cc +++ b/gtk2_ardour/streamview.cc @@ -78,7 +78,7 @@ StreamView::StreamView (RouteTimeAxisView& tv, ArdourCanvas::Container* canvas_g if (_trackview.is_track()) { _trackview.track()->DiskstreamChanged.connect (*this, invalidator (*this), boost::bind (&StreamView::diskstream_changed, this), gui_context()); - _trackview.track()->RecordEnableChanged.connect (*this, invalidator (*this), boost::bind (&StreamView::rec_enable_changed, this), gui_context()); + _trackview.track()->rec_enable_control()->Changed.connect (*this, invalidator (*this), boost::bind (&StreamView::rec_enable_changed, this), gui_context()); _trackview.session()->TransportStateChange.connect (*this, invalidator (*this), boost::bind (&StreamView::transport_changed, this), gui_context()); _trackview.session()->TransportLooped.connect (*this, invalidator (*this), boost::bind (&StreamView::transport_looped, this), gui_context()); diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc index 6b780a7fc7..2ce40844c5 100644 --- a/gtk2_ardour/time_axis_view.cc +++ b/gtk2_ardour/time_axis_view.cc @@ -763,7 +763,7 @@ TimeAxisView::end_name_edit (int response) RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*>(*i); - if (rtav && rtav->route()->record_enabled()) { + if (rtav && (!rtav->is_track() || rtav->track()->rec_enable_control()->get_value())) { continue; } @@ -794,7 +794,7 @@ TimeAxisView::end_name_edit (int response) RouteTimeAxisView* rtav = dynamic_cast<RouteTimeAxisView*>(*i); - if (rtav && rtav->route()->record_enabled()) { + if (rtav && (!rtav->is_track() || rtav->track()->rec_enable_control()->get_value())) { continue; } |