diff options
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_options.cc | 19 | ||||
-rw-r--r-- | gtk2_ardour/audio_clock.cc | 11 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 3 | ||||
-rw-r--r-- | gtk2_ardour/rc_option_editor.h | 1 | ||||
-rw-r--r-- | gtk2_ardour/session_option_editor.cc | 3 | ||||
-rw-r--r-- | gtk2_ardour/transport_masters_dialog.cc | 37 | ||||
-rw-r--r-- | gtk2_ardour/transport_masters_dialog.h | 7 | ||||
-rw-r--r-- | gtk2_ardour/video_monitor.cc | 5 |
9 files changed, 56 insertions, 36 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index d6e1e63c7f..1e762b29e3 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -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: diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc index f1a5642c20..3f2b1edc68 100644 --- a/gtk2_ardour/ardour_ui_options.cc +++ b/gtk2_ardour/ardour_ui_options.cc @@ -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); diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc index 9bc7128ab2..68faab78b0 100644 --- a/gtk2_ardour/audio_clock.cc +++ b/gtk2_ardour/audio_clock.cc @@ -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); } } diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 314e14a05b..50ead21c33 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -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: diff --git a/gtk2_ardour/rc_option_editor.h b/gtk2_ardour/rc_option_editor.h index 27d261ba09..fda028ce64 100644 --- a/gtk2_ardour/rc_option_editor.h +++ b/gtk2_ardour/rc_option_editor.h @@ -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; diff --git a/gtk2_ardour/session_option_editor.cc b/gtk2_ardour/session_option_editor.cc index 025b0054ec..e2775e641d 100644 --- a/gtk2_ardour/session_option_editor.cc +++ b/gtk2_ardour/session_option_editor.cc @@ -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); diff --git a/gtk2_ardour/transport_masters_dialog.cc b/gtk2_ardour/transport_masters_dialog.cc index 92d828fa62..ae84ec4639 100644 --- a/gtk2_ardour/transport_masters_dialog.cc +++ b/gtk2_ardour/transport_masters_dialog.cc @@ -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" @@ -93,6 +95,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) { for (vector<Row*>::iterator r = rows.begin(); r != rows.end(); ++r) { @@ -104,6 +112,14 @@ TransportMastersWidget::current_changed (boost::shared_ptr<TransportMaster> old_ } void +TransportMastersWidget::add_master () +{ + if (!TransportMasterManager::instance().add (LTC, "new ltc")) { + rebuild (); + } +} + +void TransportMastersWidget::rebuild () { TransportMasterManager::TransportMasters const & masters (TransportMasterManager::instance().transport_masters()); @@ -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); } } diff --git a/gtk2_ardour/transport_masters_dialog.h b/gtk2_ardour/transport_masters_dialog.h index d8cab9f51d..f90854b1eb 100644 --- a/gtk2_ardour/transport_masters_dialog.h +++ b/gtk2_ardour/transport_masters_dialog.h @@ -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 diff --git a/gtk2_ardour/video_monitor.cc b/gtk2_ardour/video_monitor.cc index f67aabca9e..d6831e45b7 100644 --- a/gtk2_ardour/video_monitor.cc +++ b/gtk2_ardour/video_monitor.cc @@ -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) { |