move away from "sync source" concepts
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 5 Oct 2018 16:35:13 +0000 (12:35 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 5 Oct 2018 18:15:02 +0000 (14:15 -0400)
gtk2_ardour/ardour_ui.cc
gtk2_ardour/ardour_ui_options.cc
gtk2_ardour/audio_clock.cc
gtk2_ardour/editor_ops.cc
gtk2_ardour/rc_option_editor.h
gtk2_ardour/session_option_editor.cc
gtk2_ardour/transport_masters_dialog.cc
gtk2_ardour/transport_masters_dialog.h
gtk2_ardour/video_monitor.cc

index d6e1e63c7fd9fb46d76882e081be618f5862e21e..1e762b29e3edf23418f6a9bac7f670214472e67b 100644 (file)
@@ -2304,9 +2304,8 @@ ARDOUR_UI::transport_roll ()
                return;
        }
 
-#if 0
        if (_session->config.get_external_sync()) {
-               switch (Config->get_sync_source()) {
+               switch (TransportMasterManager::instance().current()->type()) {
                case Engine:
                        break;
                default:
@@ -2314,7 +2313,6 @@ ARDOUR_UI::transport_roll ()
                        return;
                }
        }
-#endif
 
        bool rolling = _session->transport_rolling();
 
@@ -2368,7 +2366,7 @@ ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode)
        }
 
        if (_session->config.get_external_sync()) {
-               switch (Config->get_sync_source()) {
+               switch (TransportMasterManager::instance().current()->type()) {
                case Engine:
                        break;
                default:
index f1a5642c204dfeff7a62cf934bc546f42a819e07..3f2b1edc684df1a793c9d955f64b9325faeed8a4 100644 (file)
@@ -27,6 +27,7 @@
 
 #include "ardour/rc_configuration.h"
 #include "ardour/session.h"
+#include "ardour/transport_master_manager.h"
 
 #include "gtkmm2ext/utils.h"
 #include "waveview/wave_view.h"
@@ -50,14 +51,10 @@ void
 ARDOUR_UI::toggle_external_sync()
 {
        if (_session) {
-               if (_session->config.get_video_pullup() != 0.0f) {
-                       if (Config->get_sync_source() == Engine) {
-                               MessageDialog msg (
-                                       _("It is not possible to use JACK as the the sync source\n\
-when the pull up/down setting is non-zero."));
-                               msg.run ();
-                               return;
-                       }
+               if (_session->config.get_video_pullup() != 0.0f && (TransportMasterManager::instance().current()->type() == Engine)) {
+                       MessageDialog msg (_("It is not possible to use JACK as the the sync source\n when the pull up/down setting is non-zero."));
+                       msg.run ();
+                       return;
                }
 
                ActionManager::toggle_config_state_foo ("Transport", "ToggleExternalSync", sigc::mem_fun (_session->config, &SessionConfiguration::set_external_sync), sigc::mem_fun (_session->config, &SessionConfiguration::get_external_sync));
@@ -373,11 +370,11 @@ ARDOUR_UI::parameter_changed (std::string p)
                        if (!_session->config.get_external_sync()) {
                                sync_button.set_text (S_("SyncSource|Int."));
                        } else {
-                               sync_button.set_text (sync_source_to_string (Config->get_sync_source(), true));
+                               sync_button.set_text (TransportMasterManager::instance().current()->display_name());
                        }
                } else {
                        /* changing sync source without a session is unlikely/impossible , except during startup */
-                       sync_button.set_text (sync_source_to_string (Config->get_sync_source(), true));
+                       sync_button.set_text (TransportMasterManager::instance().current()->display_name());
                }
 
        } else if (p == "follow-edits") {
@@ -595,7 +592,7 @@ ARDOUR_UI::synchronize_sync_source_and_video_pullup ()
                act->set_sensitive (true);
        } else {
                /* can't sync to JACK if video pullup != 0.0 */
-               if (Config->get_sync_source() == Engine) {
+               if (TransportMasterManager::instance().current()->type() == Engine) {
                        act->set_sensitive (false);
                } else {
                        act->set_sensitive (true);
index 9bc7128ab2cbeb31f3b2f618fc7ab751a58ca85a..68faab78b0f727cb12afb11c203b09b75661f5d5 100644 (file)
@@ -36,6 +36,7 @@
 #include "ardour/session.h"
 #include "ardour/transport_master.h"
 #include "ardour/tempo.h"
+#include "ardour/transport_master_manager.h"
 #include "ardour/types.h"
 
 #include "ardour_ui.h"
@@ -938,12 +939,10 @@ AudioClock::set_slave_info ()
                return;
        }
 
-       const SyncSource sync_src = Config->get_sync_source();
+       boost::shared_ptr<TransportMaster> tm = TransportMasterManager::instance().current();
 
        if (_session->transport_master_is_external()) {
 
-               boost::shared_ptr<TransportMaster> tm = _session->transport_master();
-
                switch (tm->type()) {
                case Engine:
                        _left_btn.set_text (tm->name(), true);
@@ -951,7 +950,7 @@ AudioClock::set_slave_info ()
                        break;
                case MIDIClock:
                        if (tm) {
-                               _left_btn.set_text (sync_source_to_string (tm->type(), true), true);
+                               _left_btn.set_text (tm->display_name(), true);
                                _right_btn.set_text (tm->delta_string (), true);
                        } else {
                                _left_btn.set_text (_("--pending--"), true);
@@ -966,7 +965,7 @@ AudioClock::set_slave_info ()
                                if ((tcmaster = boost::dynamic_pointer_cast<TimecodeTransportMaster>(tm)) != 0) {
                                        matching = (tcmaster->apparent_timecode_format() == _session->config.get_timecode_format());
                                        _left_btn.set_text (string_compose ("%1<span face=\"monospace\" foreground=\"%3\">%2</span>",
-                                                                           sync_source_to_string(tm->type(), true)[0],
+                                                                           tm->display_name()[0],
                                                                            tcmaster->position_string (),
                                                                            matching ? "#66ff66" : "#ff3333"
                                                                ), true);
@@ -979,7 +978,7 @@ AudioClock::set_slave_info ()
                        break;
                }
        } else {
-               _left_btn.set_text (string_compose ("%1/%2", _("INT"), sync_source_to_string (sync_src, true)), true);
+               _left_btn.set_text (string_compose ("%1/%2", _("INT"), tm->display_name()), true);
                _right_btn.set_text ("", true);
        }
 }
index 314e14a05beaa0946eb43e5c65b10260fae79a83..50ead21c33b0c3107493520d6330157aa08a0d9c 100644 (file)
@@ -63,6 +63,7 @@
 #include "ardour/session_playlists.h"
 #include "ardour/strip_silence.h"
 #include "ardour/transient_detector.h"
+#include "ardour/transport_master_manager.h"
 #include "ardour/transpose.h"
 #include "ardour/vca_manager.h"
 
@@ -2595,7 +2596,7 @@ Editor::transition_to_rolling (bool fwd)
        }
 
        if (_session->config.get_external_sync()) {
-               switch (Config->get_sync_source()) {
+               switch (TransportMasterManager::instance().current()->type()) {
                case Engine:
                        break;
                default:
index 27d261ba09f2fcb49015f4b2436d20bb307144d6..fda028ce64c8c0a340cefc4e185e07a254798775 100644 (file)
@@ -52,7 +52,6 @@ private:
        BoolOption* _solo_control_is_listen_control;
        ComboOption<ARDOUR::ListenPosition>* _listen_position;
        VisibilityGroup _mixer_strip_visibility;
-       ComboOption<ARDOUR::SyncSource>* _sync_source;
        BoolOption* _sync_framerate;
        ComboStringOption* _ltc_port;
        HSliderOption* _ltc_volume_slider;
index 025b0054ec561279451ab527433f6d923f22ca72..e2775e641dc474ecd5eb61a0bd06607268284ac2 100644 (file)
@@ -18,6 +18,7 @@
 */
 
 #include "ardour/session.h"
+#include "ardour/transport_master_manager.h"
 
 #include "gui_thread.h"
 #include "session_option_editor.h"
@@ -414,7 +415,7 @@ SessionOptionEditor::parameter_changed (std::string const & p)
 {
        OptionEditor::parameter_changed (p);
        if (p == "external-sync") {
-               if (Config->get_sync_source() == Engine) {
+               if (TransportMasterManager::instance().current()->type() == Engine) {
                        _vpu->set_sensitive(!_session_config->get_external_sync());
                } else {
                        _vpu->set_sensitive(true);
index 92d828fa625224ec82e9189b7362c32ac9643f6b..ae84ec4639c404fb47be97348f11991e591b6b82 100644 (file)
@@ -52,6 +52,8 @@ TransportMastersWidget::TransportMastersWidget ()
        pack_start (table, PACK_EXPAND_WIDGET, 12);
        pack_start (add_button, FALSE, FALSE);
 
+       add_button.signal_clicked ().connect (sigc::mem_fun (*this, &TransportMastersWidget::add_master));
+
        col_title[0].set_markup (string_compose ("<span weight=\"bold\">%1</span>", _("Use")));
        col_title[1].set_markup (string_compose ("<span weight=\"bold\">%1</span>", _("Name")));
        col_title[2].set_markup (string_compose ("<span weight=\"bold\">%1</span>", _("Type")));
@@ -64,7 +66,7 @@ TransportMastersWidget::TransportMastersWidget ()
        col_title[9].set_markup (string_compose ("<span weight=\"bold\">%1</span>", _("Data Source")));
        col_title[10].set_markup (string_compose ("<span weight=\"bold\">%1</span>", _("Active\nCommands")));
        col_title[11].set_markup (string_compose ("<span weight=\"bold\">%1</span>", _("Clock\nSynced")));
-       col_title[12].set_markup (string_compose ("<span weight=\"bold\">%1</span>", _("29.97/30")));
+       col_title[12].set_markup (string_compose ("<span weight=\"bold\">%1</span>", _("29.97/\n30")));
        col_title[13].set_markup (string_compose ("<span weight=\"bold\">%1</span>", _("Remove")));
 
        set_tooltip (col_title[12], _("<b>When enabled</b> the external timecode source is assumed to use 29.97 fps instead of 30000/1001.\n"
@@ -92,6 +94,12 @@ TransportMastersWidget::~TransportMastersWidget ()
        }
 }
 
+void
+TransportMastersWidget::set_transport_master (boost::shared_ptr<TransportMaster> tm)
+{
+       _session->request_sync_source (tm);
+}
+
 void
 TransportMastersWidget::current_changed (boost::shared_ptr<TransportMaster> old_master, boost::shared_ptr<TransportMaster> new_master)
 {
@@ -103,6 +111,14 @@ TransportMastersWidget::current_changed (boost::shared_ptr<TransportMaster> old_
        }
 }
 
+void
+TransportMastersWidget::add_master ()
+{
+       if (!TransportMasterManager::instance().add (LTC, "new ltc")) {
+               rebuild ();
+       }
+}
+
 void
 TransportMastersWidget::rebuild ()
 {
@@ -123,11 +139,17 @@ TransportMastersWidget::rebuild ()
 
        uint32_t n = 1;
 
+       cerr << "There are " << masters.size() << endl;
+
+       Gtk::RadioButtonGroup use_button_group;
+
        for (TransportMasterManager::TransportMasters::const_iterator m = masters.begin(); m != masters.end(); ++m, ++n) {
 
-               Row* r = new Row;
+               Row* r = new Row (*this);
                rows.push_back (r);
 
+               cerr << "Rows now holds " << rows.size() << endl;
+
                r->tm = *m;
                r->label.set_text ((*m)->name());
                r->type.set_text (enum_2_string  ((*m)->type()));
@@ -170,7 +192,9 @@ TransportMastersWidget::rebuild ()
                        col++;
                }
 
-               r->label_box.set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
+               table.show_all ();
+
+               // r->label_box.set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK);
                r->label_box.signal_button_press_event().connect (sigc::mem_fun (*r, &TransportMastersWidget::Row::name_press));
                r->port_combo.signal_changed().connect (sigc::mem_fun (*r, &TransportMastersWidget::Row::port_choice_changed));
                r->use_button.signal_toggled().connect (sigc::mem_fun (*r, &TransportMastersWidget::Row::use_button_toggled));
@@ -198,8 +222,9 @@ TransportMastersWidget::rebuild ()
        }
 }
 
-TransportMastersWidget::Row::Row ()
-       : request_option_menu (0)
+TransportMastersWidget::Row::Row (TransportMastersWidget& p)
+       : parent (p)
+       , request_option_menu (0)
        , remove_button (X_("x"))
        , name_editor (0)
        , save_when (0)
@@ -267,7 +292,7 @@ void
 TransportMastersWidget::Row::use_button_toggled ()
 {
        if (use_button.get_active()) {
-               Config->set_sync_source (tm->type());
+               parent.set_transport_master (tm);
        }
 }
 
index d8cab9f51de2a168e0d08e65b83f751e15a70e46..f90854b1eb36e5b539b35b3bbe4a3b9858e3aa26 100644 (file)
@@ -49,6 +49,7 @@ class TransportMastersWidget : public Gtk::VBox, public ARDOUR::SessionHandlePtr
        ~TransportMastersWidget ();
 
        void update (ARDOUR::samplepos_t);
+       void set_transport_master (boost::shared_ptr<ARDOUR::TransportMaster>);
 
   protected:
        void on_map ();
@@ -57,6 +58,7 @@ class TransportMastersWidget : public Gtk::VBox, public ARDOUR::SessionHandlePtr
   private:
 
        struct Row : sigc::trackable, PBD::ScopedConnectionList {
+               TransportMastersWidget& parent;
                Gtk::EventBox label_box;
                Gtk::Label label;
                Gtk::Label type;
@@ -82,7 +84,7 @@ class TransportMastersWidget : public Gtk::VBox, public ARDOUR::SessionHandlePtr
 
                void update (ARDOUR::Session*, ARDOUR::samplepos_t);
 
-               Row ();
+               Row (TransportMastersWidget& parent);
 
                struct PortColumns : public Gtk::TreeModel::ColumnRecord {
                        PortColumns() {
@@ -117,7 +119,6 @@ class TransportMastersWidget : public Gtk::VBox, public ARDOUR::SessionHandlePtr
 
        std::vector<Row*> rows;
 
-       Gtk::RadioButtonGroup use_button_group;
        Gtk::Table table;
        Gtk::Label col_title[14];
        Gtk::Button add_button;
@@ -127,7 +128,7 @@ class TransportMastersWidget : public Gtk::VBox, public ARDOUR::SessionHandlePtr
 
        void rebuild ();
        void current_changed (boost::shared_ptr<ARDOUR::TransportMaster> old_master, boost::shared_ptr<ARDOUR::TransportMaster> new_master);
-
+       void add_master ();
 };
 
 class TransportMastersWindow : public ArdourWindow
index f67aabca9ed5fe4d9dcf1fc18bee023548a92f1e..d6831e45b744e6f232a17fda759f156cac53dec8 100644 (file)
@@ -556,9 +556,8 @@ VideoMonitor::xjadeo_sync_setup ()
        if (!_session) { return; }
 
        bool my_manual_seek = true;
-       if (_session->config.get_external_sync()) {
-               if (ARDOUR::Config->get_sync_source() == ARDOUR::Engine)
-                       my_manual_seek = false;
+       if (_session->synced_to_engine ()) {
+               my_manual_seek = false;
        }
 
        if (my_manual_seek != sync_by_manual_seek) {