From a9fff59229baba194fce20a2dfd0e9cc16c100d2 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Fri, 15 May 2020 21:06:40 -0600 Subject: TMM: do not allow changing transport master while slaved (GUI edition) --- gtk2_ardour/transport_masters_dialog.cc | 25 +++++++++++++++++++++++++ gtk2_ardour/transport_masters_dialog.h | 4 ++++ 2 files changed, 29 insertions(+) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/transport_masters_dialog.cc b/gtk2_ardour/transport_masters_dialog.cc index bb6c6d618e..bf1bb16bf6 100644 --- a/gtk2_ardour/transport_masters_dialog.cc +++ b/gtk2_ardour/transport_masters_dialog.cc @@ -715,6 +715,19 @@ TransportMastersWindow::set_session (ARDOUR::Session* s) w.set_session (s); } +void +TransportMastersWidget::set_session (ARDOUR::Session* s) +{ + session_config_connection.disconnect (); + + SessionHandlePtr::set_session (s); + + if (_session) { + _session->config.ParameterChanged.connect (session_config_connection, invalidator (*this), boost::bind (&TransportMastersWidget::param_changed, this, _1), gui_context()); + allow_master_select (!_session->config.get_external_sync()); + } +} + TransportMastersWidget::AddTransportMasterDialog::AddTransportMasterDialog () : ArdourDialog (_("Add Transport Master"), true, false) , name_label (_("Name")) @@ -791,5 +804,17 @@ TransportMastersWidget::param_changed (string const & p) { if (p == "transport-masters-just_roll-when-sync-lost") { lost_sync_changed (); + } else if (p == "external-sync") { + if (_session) { + allow_master_select (!_session->config.get_external_sync()); + } + } +} + +void +TransportMastersWidget::allow_master_select (bool yn) +{ + for (vector::iterator r = rows.begin(); r != rows.end(); ++r) { + (*r)->use_button.set_sensitive (yn); } } diff --git a/gtk2_ardour/transport_masters_dialog.h b/gtk2_ardour/transport_masters_dialog.h index df61fa92fa..0970be4951 100644 --- a/gtk2_ardour/transport_masters_dialog.h +++ b/gtk2_ardour/transport_masters_dialog.h @@ -53,6 +53,8 @@ class TransportMastersWidget : public Gtk::VBox, public ARDOUR::SessionHandlePtr void update (ARDOUR::samplepos_t); void set_transport_master (boost::shared_ptr); + void set_session (ARDOUR::Session*); + protected: void on_map (); void on_unmap (); @@ -166,11 +168,13 @@ class TransportMastersWidget : public Gtk::VBox, public ARDOUR::SessionHandlePtr void current_changed (boost::shared_ptr old_master, boost::shared_ptr new_master); bool add_master (GdkEventButton* ev); void update_usability (); + void allow_master_select (bool); void lost_sync_changed (); void lost_sync_button_toggled (); void param_changed (std::string const &); PBD::ScopedConnection config_connection; + PBD::ScopedConnection session_config_connection; public: bool idle_remove (Row*); -- cgit v1.2.3