use new record safe control in GUI
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 27 May 2016 20:13:10 +0000 (16:13 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 31 May 2016 19:30:45 +0000 (15:30 -0400)
gtk2_ardour/ardour_ui.cc
gtk2_ardour/audio_streamview.cc
gtk2_ardour/editor_ops.cc
gtk2_ardour/editor_routes.cc
gtk2_ardour/monitor_section.cc
gtk2_ardour/route_ui.cc

index c728ad9b6be157c3fe4ff69a10f65fa8e7e8d01b..0a4b6956d54e5f782929d006f94d586e9e5f6b31 100644 (file)
@@ -85,6 +85,7 @@
 #include "ardour/process_thread.h"
 #include "ardour/profile.h"
 #include "ardour/recent_sessions.h"
+#include "ardour/record_enable_control.h"
 #include "ardour/session_directory.h"
 #include "ardour/session_route.h"
 #include "ardour/session_state_utils.h"
@@ -2099,7 +2100,7 @@ ARDOUR_UI::trx_record_enable_all_tracks ()
        }
 
        if (none_record_enabled) {
-               _session->set_controls (route_list_to_control_list (rl, &Track::rec_enable_control), 1.0, Controllable::NoGroup);
+               _session->set_controls (route_list_to_control_list (rl, &Stripable::rec_enable_control), 1.0, Controllable::NoGroup);
        }
 
        return none_record_enabled;
@@ -5576,7 +5577,7 @@ ARDOUR_UI::cancel_solo ()
 {
        if (_session) {
                if (_session) {
-                       _session->set_controls (route_list_to_control_list (_session->get_routes(), &Route::solo_control), 0.0, Controllable::NoGroup);
+                       _session->set_controls (route_list_to_control_list (_session->get_routes(), &Stripable::solo_control), 0.0, Controllable::NoGroup);
                }
                _session->clear_all_solo_state (_session->get_routes()); // safeguard, ideally this won't do anything, check the log-window
        }
index 9351a5da1f397183924923770fa0669d22c2f943..ed9ec23b028d5d30fa88b15f6812678168e8c6c8 100644 (file)
@@ -29,6 +29,7 @@
 #include "ardour/audioregion.h"
 #include "ardour/audiofilesource.h"
 #include "ardour/audio_track.h"
+#include "ardour/record_enable_control.h"
 #include "ardour/region_factory.h"
 #include "ardour/profile.h"
 #include "ardour/rc_configuration.h"
index 598725c72cd3ab019d192e3d4eeb7773f32e7d61..d05b183028e33fe83c983001675fae7c51e95a6c 100644 (file)
@@ -5754,7 +5754,7 @@ Editor::toggle_mute ()
                rl->push_back (rtav->route());
        }
 
-       _session->set_controls (route_list_to_control_list (rl, &Route::mute_control), new_state, Controllable::UseGroup);
+       _session->set_controls (route_list_to_control_list (rl, &Stripable::mute_control), new_state, Controllable::UseGroup);
 }
 
 void
index ff7599a4433357efe93e48ad4a9aec96c376f905..70d88872049e53ff798544d64f7c6e74ddcaf961 100644 (file)
@@ -425,10 +425,10 @@ EditorRoutes::on_tv_rec_enable_changed (std::string const & path_string)
 
        TimeAxisView* tv = row[_columns.tv];
        RouteTimeAxisView *rtv = dynamic_cast<RouteTimeAxisView*> (tv);
+       boost::shared_ptr<AutomationControl> ac = rtv->route()->rec_enable_control();
 
-       if (rtv && rtv->track()) {
-               // TODO check rec-safe and ...
-               _session->set_control (rtv->track()->rec_enable_control(), !rtv->track()->rec_enable_control()->get_value(), Controllable::UseGroup);
+       if (ac) {
+               ac->set_value (!ac->get_value(), Controllable::UseGroup);
        }
 }
 
@@ -438,12 +438,10 @@ EditorRoutes::on_tv_rec_safe_toggled (std::string const & path_string)
        Gtk::TreeModel::Row row = *_model->get_iter (Gtk::TreeModel::Path (path_string));
        TimeAxisView* tv = row[_columns.tv];
        RouteTimeAxisView *rtv = dynamic_cast<RouteTimeAxisView*> (tv);
+       boost::shared_ptr<AutomationControl> ac (rtv->route()->rec_safe_control());
 
-       if (rtv && rtv->track() && !rtv->track()->record_enabled()) {
-               DisplaySuspender ds;
-               boost::shared_ptr<RouteList> rl (new RouteList);
-               rl->push_back (rtv->route());
-               _session->set_record_safe (rl, !rtv->track()->record_safe(), Session::rt_cleanup);
+       if (ac) {
+               ac->set_value (!ac->get_value(), Controllable::UseGroup);
        }
 }
 
@@ -455,9 +453,10 @@ EditorRoutes::on_tv_mute_enable_toggled (std::string const & path_string)
 
        TimeAxisView *tv = row[_columns.tv];
        RouteTimeAxisView *rtv = dynamic_cast<RouteTimeAxisView*> (tv);
+       boost::shared_ptr<AutomationControl> ac (rtv->route()->mute_control());
 
-       if (rtv != 0) {
-               _session->set_control (rtv->route()->mute_control(), rtv->route()->mute_control()->get_value() ? 0.0 : 1.0, Controllable::UseGroup);
+       if (ac) {
+               ac->set_value (!ac->get_value(), Controllable::UseGroup);
        }
 }
 
@@ -469,9 +468,10 @@ EditorRoutes::on_tv_solo_enable_toggled (std::string const & path_string)
 
        TimeAxisView *tv = row[_columns.tv];
        RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (tv);
+       boost::shared_ptr<AutomationControl> ac (rtv->route()->solo_control());
 
-       if (rtv != 0) {
-               rtv->route()->solo_control()->set_value (rtv->route()->soloed() ? 0.0 : 1.0, Controllable::UseGroup);
+       if (ac) {
+               ac->set_value (!ac->get_value(), Controllable::UseGroup);
        }
 }
 
@@ -483,9 +483,10 @@ EditorRoutes::on_tv_solo_isolate_toggled (std::string const & path_string)
 
        TimeAxisView *tv = row[_columns.tv];
        RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (tv);
+       boost::shared_ptr<AutomationControl> ac (rtv->route()->solo_isolate_control());
 
-       if (rtv) {
-               rtv->route()->solo_isolate_control()->set_value (rtv->route()->solo_isolate_control()->get_value() ? 0.0 : 1.0, Controllable::UseGroup);
+       if (ac) {
+               ac->set_value (!ac->get_value(), Controllable::UseGroup);
        }
 }
 
@@ -497,9 +498,10 @@ EditorRoutes::on_tv_solo_safe_toggled (std::string const & path_string)
 
        TimeAxisView *tv = row[_columns.tv];
        RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (tv);
+       boost::shared_ptr<AutomationControl> ac (rtv->route()->solo_safe_control());
 
-       if (rtv) {
-               rtv->route()->solo_safe_control()->set_value (rtv->route()->solo_safe_control()->get_value() ? 0.0 : 1.0, Controllable::UseGroup);
+       if (ac) {
+               ac->set_value (!ac->get_value(), Controllable::UseGroup);
        }
 }
 
@@ -1261,14 +1263,14 @@ EditorRoutes::key_press (GdkEventKey* ev)
 
                case 'm':
                        if (get_relevant_routes (rl)) {
-                               _session->set_controls (route_list_to_control_list (rl, &Route::mute_control), rl->front()->muted() ? 0.0 : 1.0, Controllable::NoGroup);
+                               _session->set_controls (route_list_to_control_list (rl, &Stripable::mute_control), rl->front()->muted() ? 0.0 : 1.0, Controllable::NoGroup);
                        }
                        return true;
                        break;
 
                case 's':
                        if (get_relevant_routes (rl)) {
-                               _session->set_controls (route_list_to_control_list (rl, &Route::solo_control), rl->front()->self_soloed() ? 0.0 : 1.0, Controllable::NoGroup);
+                               _session->set_controls (route_list_to_control_list (rl, &Stripable::solo_control), rl->front()->self_soloed() ? 0.0 : 1.0, Controllable::NoGroup);
                        }
                        return true;
                        break;
@@ -1278,7 +1280,7 @@ EditorRoutes::key_press (GdkEventKey* ev)
                                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);
+                                               _session->set_controls (route_list_to_control_list (rl, &Stripable::rec_enable_control), !t->rec_enable_control()->get_value(), Controllable::NoGroup);
                                                break;
                                        }
                                }
@@ -1663,7 +1665,7 @@ EditorRoutes::idle_update_mute_rec_solo_etc()
                                (*i)[_columns.rec_state] = 0;
                        }
 
-                       (*i)[_columns.rec_safe] = !trk->rec_safe_control()->get_value();
+                       (*i)[_columns.rec_safe] = trk->rec_safe_control()->get_value();
                        (*i)[_columns.name_editable] = !trk->rec_enable_control()->get_value();
                }
        }
index e14b571723bd9ec53b090e3ab244258709bc8f08..42cbcd848ab2e0eb20b87c4cd16d36b416df15d8 100644 (file)
@@ -1247,7 +1247,7 @@ MonitorSection::cancel_isolate (GdkEventButton*)
 {
        if (_session) {
                boost::shared_ptr<RouteList> rl (_session->get_routes ());
-               _session->set_controls (route_list_to_control_list (rl, &Route::solo_isolate_control), 0.0, Controllable::NoGroup);
+               _session->set_controls (route_list_to_control_list (rl, &Stripable::solo_isolate_control), 0.0, Controllable::NoGroup);
        }
 
        return true;
index 32218932b33b747a838aff144b52c2d3a80793c1..8b4056d4f841efa1f0d24ff4d00cb6ae6cf4e86b 100644 (file)
@@ -415,7 +415,7 @@ RouteUI::mute_press (GdkEventButton* ev)
                                }
 
                                DisplaySuspender ds;
-                               _session->set_controls (route_list_to_control_list (copy, &Route::mute_control), _route->muted_by_self() ? 0.0 : 1.0, Controllable::UseGroup);
+                               _session->set_controls (route_list_to_control_list (copy, &Stripable::mute_control), _route->muted_by_self() ? 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_controls (route_list_to_control_list (rl, &Route::mute_control), _route->muted_by_self() ? 0.0 : 1.0, Controllable::InverseGroup);
+                                       _session->set_controls (route_list_to_control_list (rl, &Stripable::mute_control), _route->muted_by_self() ? 0.0 : 1.0, Controllable::InverseGroup);
                                }
 
                        } else {
@@ -472,7 +472,7 @@ RouteUI::mute_release (GdkEventButton* /*ev*/)
 {
        if (_mute_release){
                DisplaySuspender ds;
-               _session->set_controls (route_list_to_control_list (_mute_release->routes, &Route::mute_control), _mute_release->active, Controllable::UseGroup);
+               _session->set_controls (route_list_to_control_list (_mute_release->routes, &Stripable::mute_control), _mute_release->active, Controllable::UseGroup);
                delete _mute_release;
                _mute_release = 0;
        }
@@ -572,7 +572,7 @@ RouteUI::solo_press(GdkEventButton* ev)
                                }
 
                                DisplaySuspender ds;
-                               _session->set_controls (route_list_to_control_list (_session->get_routes(), &Route::solo_control), !_route->solo_control()->get_value(), Controllable::UseGroup);
+                               _session->set_controls (route_list_to_control_list (_session->get_routes(), &Stripable::solo_control), !_route->solo_control()->get_value(), Controllable::UseGroup);
 
                        } else if (Keyboard::modifier_state_contains (ev->state, Keyboard::ModifierMask (Keyboard::PrimaryModifier|Keyboard::SecondaryModifier))) {
 
@@ -645,7 +645,7 @@ RouteUI::solo_press(GdkEventButton* ev)
 
                                        DisplaySuspender ds;
 
-                                       _session->set_controls (route_list_to_control_list (rl, &Route::solo_control), !_route->self_soloed(), Controllable::InverseGroup);
+                                       _session->set_controls (route_list_to_control_list (rl, &Stripable::solo_control), !_route->self_soloed(), Controllable::InverseGroup);
                                }
 
                                delete _solo_release;
@@ -663,7 +663,7 @@ RouteUI::solo_press(GdkEventButton* ev)
                                }
 
                                DisplaySuspender ds;
-                               _session->set_controls (route_list_to_control_list (rl, &Route::solo_control), !_route->self_soloed(), Controllable::UseGroup);
+                               _session->set_controls (route_list_to_control_list (rl, &Stripable::solo_control), !_route->self_soloed(), Controllable::UseGroup);
                        }
                }
        }
@@ -680,7 +680,7 @@ RouteUI::solo_release (GdkEventButton* /*ev*/)
 
                } else {
                        DisplaySuspender ds;
-                       _session->set_controls (route_list_to_control_list (_solo_release->routes, &Route::solo_control), _solo_release->active ? 1.0 : 0.0, Controllable::UseGroup);
+                       _session->set_controls (route_list_to_control_list (_solo_release->routes, &Stripable::solo_control), _solo_release->active ? 1.0 : 0.0, Controllable::UseGroup);
                }
 
                delete _solo_release;
@@ -727,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_controls (route_list_to_control_list (_session->get_routes(), &Track::rec_enable_control), !track()->rec_enable_control()->get_value(), Controllable::NoGroup);
+                       _session->set_controls (route_list_to_control_list (_session->get_routes(), &Stripable::rec_enable_control), !track()->rec_enable_control()->get_value(), Controllable::NoGroup);
 
                } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
 
@@ -743,7 +743,7 @@ RouteUI::rec_enable_press(GdkEventButton* ev)
                                rl->push_back (_route);
 
                                DisplaySuspender ds;
-                               _session->set_controls (route_list_to_control_list (rl, &Track::rec_enable_control), !track()->rec_enable_control()->get_value(), Controllable::InverseGroup);
+                               _session->set_controls (route_list_to_control_list (rl, &Stripable::rec_enable_control), !track()->rec_enable_control()->get_value(), Controllable::InverseGroup);
                        }
 
                } else if (Keyboard::is_context_menu_event (ev)) {
@@ -865,7 +865,7 @@ RouteUI::monitor_release (GdkEventButton* ev, MonitorChoice monitor_choice)
        }
 
        DisplaySuspender ds;
-       _session->set_controls (route_list_to_control_list (rl, &Route::monitoring_control), (double) mc, Controllable::UseGroup);
+       _session->set_controls (route_list_to_control_list (rl, &Stripable::monitoring_control), (double) mc, Controllable::UseGroup);
 
        return false;
 }
@@ -896,8 +896,8 @@ RouteUI::build_record_menu ()
                step_edit_item->set_active (midi_track()->step_editing());
        }
        if (rec_safe_item) {
-               rec_safe_item->set_sensitive (!_route->record_enabled());
-               rec_safe_item->set_active (_route->record_safe());
+               rec_safe_item->set_sensitive (!_route->rec_enable_control()->get_value());
+               rec_safe_item->set_active (_route->rec_safe_control()->get_value());
        }
 }
 
@@ -914,13 +914,21 @@ RouteUI::toggle_step_edit ()
 void
 RouteUI::toggle_rec_safe ()
 {
-       if (_route->record_enabled()) {
+       boost::shared_ptr<AutomationControl> rs = _route->rec_safe_control();
+
+       if (!rs) {
                return;
        }
-       DisplaySuspender ds;
-       boost::shared_ptr<RouteList> rl (new RouteList);
-       rl->push_back (_route);
-       _session->set_record_safe (rl, rec_safe_item->get_active (), Session::rt_cleanup);
+
+       /* This check is made inside the control too, but dong it here can't
+        * hurt.
+        */
+
+       if (_route->rec_enable_control()->get_value()) {
+               return;
+       }
+
+       rs->set_value (rec_safe_item->get_active (), Controllable::UseGroup);
 }
 
 void
@@ -1501,11 +1509,11 @@ RouteUI::solo_isolate_button_release (GdkEventButton* ev)
                        if (model) {
                                /* disable isolate for all routes */
                                DisplaySuspender ds;
-                               _session->set_controls (route_list_to_control_list (_session->get_routes(), &Route::solo_isolate_control), 0.0, Controllable::NoGroup);
+                               _session->set_controls (route_list_to_control_list (_session->get_routes(), &Stripable::solo_isolate_control), 0.0, Controllable::NoGroup);
                        } else {
                                /* enable isolate for all routes */
                                DisplaySuspender ds;
-                               _session->set_controls (route_list_to_control_list (_session->get_routes(), &Route::solo_isolate_control), 1.0, Controllable::NoGroup);
+                               _session->set_controls (route_list_to_control_list (_session->get_routes(), &Stripable::solo_isolate_control), 1.0, Controllable::NoGroup);
                        }
 
                } else {
@@ -1517,7 +1525,7 @@ RouteUI::solo_isolate_button_release (GdkEventButton* ev)
                                boost::shared_ptr<RouteList> rl (new RouteList);
                                rl->push_back (_route);
                                DisplaySuspender ds;
-                               _session->set_controls (route_list_to_control_list (rl, &Route::solo_isolate_control), view ? 0.0 : 1.0, Controllable::NoGroup);
+                               _session->set_controls (route_list_to_control_list (rl, &Stripable::solo_isolate_control), view ? 0.0 : 1.0, Controllable::NoGroup);
                        }
                }
        }
@@ -1984,7 +1992,7 @@ RouteUI::check_rec_enable_sensitivity ()
        } else {
                rec_enable_button->set_sensitive (true);
        }
-       if (_route && _route->record_safe ()) {
+       if (_route && _route->rec_safe_control () && _route->rec_safe_control()->get_value()) {
                rec_enable_button->set_visual_state (Gtkmm2ext::VisualState (solo_button->visual_state() | Gtkmm2ext::Insensitive));
        } else {
                rec_enable_button->set_visual_state (Gtkmm2ext::VisualState (solo_button->visual_state() & ~Gtkmm2ext::Insensitive));