diff options
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/ardour3_ui_dark.rc.in | 2 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 37 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.h | 6 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui2.cc | 38 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_dialogs.cc | 1 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_options.cc | 71 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 15 | ||||
-rw-r--r-- | gtk2_ardour/option_editor.h | 5 | ||||
-rw-r--r-- | gtk2_ardour/session_option_editor.cc | 32 | ||||
-rw-r--r-- | gtk2_ardour/session_option_editor.h | 1 |
10 files changed, 123 insertions, 85 deletions
diff --git a/gtk2_ardour/ardour3_ui_dark.rc.in b/gtk2_ardour/ardour3_ui_dark.rc.in index 7d6c2621de..01f0085fba 100644 --- a/gtk2_ardour/ardour3_ui_dark.rc.in +++ b/gtk2_ardour/ardour3_ui_dark.rc.in @@ -1528,6 +1528,8 @@ widget "*BypassButton" style:highest "red_when_active" widget "*BypassButton*" style:highest "red_when_active" widget "*TransportSoloAlert" style:highest "flashing_alert" widget "*TransportSoloAlert.*" style:highest "flashing_alert" +widget "*TransportSyncAlert" style:highest "flashing_alert" +widget "*TransportSyncAlert.*" style:highest "flashing_alert" widget "*SendAlert" style:highest "green_flashing_alert" widget "*SendAlert.*" style:highest "green_flashing_alert" widget "*TransportAuditioningAlert" style:highest "flashing_alert" diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 16a96f1e45..f7c28b49f1 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -338,7 +338,7 @@ ARDOUR_UI::post_engine () MIDI::Manager::instance()->set_api_data (engine->jack()); setup_midi (); - + ARDOUR::init_post_engine (); ActionManager::init (); @@ -347,7 +347,7 @@ ARDOUR_UI::post_engine () if (setup_windows ()) { throw failed_constructor (); } - + check_memory_locking(); /* this is the first point at which all the keybindings are available */ @@ -398,6 +398,9 @@ ARDOUR_UI::post_engine () update_cpu_load (); update_sample_rate (engine->frame_rate()); + Config->ParameterChanged.connect (mem_fun (*this, &ARDOUR_UI::parameter_changed)); + Config->map_parameters (mem_fun (*this, &ARDOUR_UI::parameter_changed)); + /* now start and maybe save state */ if (do_engine_start () == 0) { @@ -1524,13 +1527,14 @@ ARDOUR_UI::transport_roll () return; } - switch (Config->get_slave_source()) { - case None: - case JACK: - break; - default: - /* transport controlled by the master */ - return; + if (session->config.get_external_sync()) { + switch (session->config.get_sync_source()) { + case JACK: + break; + default: + /* transport controlled by the master */ + return; + } } bool rolling = session->transport_rolling(); @@ -1561,13 +1565,14 @@ ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode) return; } - switch (Config->get_slave_source()) { - case None: - case JACK: - break; - default: - /* transport controlled by the master */ - return; + if (session->config.get_external_sync()) { + switch (session->config.get_sync_source()) { + case JACK: + break; + default: + /* transport controlled by the master */ + return; + } } bool rolling = session->transport_rolling(); diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 59a5f22665..6a8d790915 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -385,9 +385,9 @@ class ARDOUR_UI : public Gtkmm2ext::UI BindableButton play_selection_button; BindableButton rec_button; - Gtk::ComboBoxText sync_option_combo; + Gtk::ToggleButton sync_button; - void sync_option_changed (); + void sync_button_clicked (); void toggle_time_master (); void toggle_video_sync (); @@ -434,6 +434,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI Gtk::VBox alert_box; void solo_blink (bool); + void sync_blink (bool); void audition_blink (bool); void soloing_changed (bool); @@ -671,7 +672,6 @@ class ARDOUR_UI : public Gtkmm2ext::UI void toggle_use_osc (); - void mtc_port_changed (); void parameter_changed (std::string); bool first_idle (); diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc index e2f4db7e5a..7f7d46150c 100644 --- a/gtk2_ardour/ardour_ui2.cc +++ b/gtk2_ardour/ardour_ui2.cc @@ -239,7 +239,7 @@ ARDOUR_UI::setup_transport () ARDOUR_UI::instance()->tooltips().set_tip (punch_in_button, _("Start recording at auto-punch start")); ARDOUR_UI::instance()->tooltips().set_tip (punch_out_button, _("Stop recording at auto-punch end")); ARDOUR_UI::instance()->tooltips().set_tip (click_button, _("Enable/Disable audio click")); - ARDOUR_UI::instance()->tooltips().set_tip (sync_option_combo, _("Positional sync source")); + ARDOUR_UI::instance()->tooltips().set_tip (sync_button, _("Positional sync source")); ARDOUR_UI::instance()->tooltips().set_tip (time_master_button, _("Does Ardour control the time?")); ARDOUR_UI::instance()->tooltips().set_tip (shuttle_box, _("Shuttle speed control")); ARDOUR_UI::instance()->tooltips().set_tip (shuttle_units_button, _("Select semitones or %%-age for speed display")); @@ -331,11 +331,10 @@ ARDOUR_UI::setup_transport () sdframe->set_shadow_type (SHADOW_IN); sdframe->add (speed_display_box); - mtc_port_changed (); - sync_option_combo.signal_changed().connect (mem_fun (*this, &ARDOUR_UI::sync_option_changed)); - // XXX HOW TO USE set_popdown_strings() and combo_fudge with this when we don't know - // the real strings till later? - set_size_request_to_display_given_text (sync_option_combo, X_("Igternal"), 4+COMBO_FUDGE, 10); + sync_button.set_name ("TransportSyncAlert"); + sync_button.signal_clicked().connect (mem_fun (*this, &ARDOUR_UI::sync_button_clicked)); + // XXX HOW TO USE set_popdown_strings() with this when we don't know the real strings till later? + set_size_request_to_display_given_text (sync_button, X_("Egternal"), 4, 10); shbox->pack_start (*sdframe, false, false); shbox->pack_start (shuttle_units_button, true, true); @@ -362,7 +361,7 @@ ARDOUR_UI::setup_transport () if (!Profile->get_sae()) { VBox* time_controls_box = manage (new VBox); - time_controls_box->pack_start (sync_option_combo, false, false); + time_controls_box->pack_start (sync_button, false, false); time_controls_box->pack_start (time_master_button, false, false); clock_box->pack_start (*time_controls_box, false, false, 1); } @@ -486,6 +485,24 @@ ARDOUR_UI::solo_blink (bool onoff) } void +ARDOUR_UI::sync_blink (bool onoff) +{ + if (session == 0 || !session->config.get_external_sync()) { + return; + } + + if (!session->transport_locked()) { + if (onoff) { + sync_button.set_state (STATE_ACTIVE); + } else { + sync_button.set_state (STATE_NORMAL); + } + } else { + sync_button.set_state (STATE_NORMAL); + } +} + +void ARDOUR_UI::audition_blink (bool onoff) { if (session == 0) { @@ -846,13 +863,10 @@ ARDOUR_UI::editor_realized () } void -ARDOUR_UI::sync_option_changed () +ARDOUR_UI::sync_button_clicked () { if (session) { - ustring txt = sync_option_combo.get_active_text (); - if (txt.length()) { - session->request_slave_source (string_to_slave_source (txt)); - } + session->config.set_external_sync (sync_button.get_active()); } } diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc index cfb3d6574e..eb7836ba06 100644 --- a/gtk2_ardour/ardour_ui_dialogs.cc +++ b/gtk2_ardour/ardour_ui_dialogs.cc @@ -105,6 +105,7 @@ ARDOUR_UI::connect_to_session (Session *s) Blink.connect (mem_fun(*this, &ARDOUR_UI::transport_rec_enable_blink)); Blink.connect (mem_fun(*this, &ARDOUR_UI::solo_blink)); + Blink.connect (mem_fun(*this, &ARDOUR_UI::sync_blink)); Blink.connect (mem_fun(*this, &ARDOUR_UI::audition_blink)); /* these are all need to be handled in an RT-safe and MT way, so don't diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc index 663bb8eaff..8f16b9578a 100644 --- a/gtk2_ardour/ardour_ui_options.cc +++ b/gtk2_ardour/ardour_ui_options.cc @@ -263,70 +263,51 @@ ARDOUR_UI::toggle_editing_space() } void -ARDOUR_UI::mtc_port_changed () +ARDOUR_UI::setup_session_options () { - bool have_mtc; - bool have_midi_clock; - - if (session) { - if (session->mtc_port()) { - have_mtc = true; - } else { - have_mtc = false; - } - if (session->midi_clock_port()) { - have_midi_clock = true; - } else { - have_midi_clock = false; - } - } else { - have_mtc = false; - have_midi_clock = false; - } - - positional_sync_strings.clear (); - positional_sync_strings.push_back (slave_source_to_string (None)); - if (have_mtc) { - positional_sync_strings.push_back (slave_source_to_string (MTC)); - } - if (have_midi_clock) { - positional_sync_strings.push_back (slave_source_to_string (MIDIClock)); - } - positional_sync_strings.push_back (slave_source_to_string (JACK)); - - set_popdown_strings (sync_option_combo, positional_sync_strings); + session->config.ParameterChanged.connect (mem_fun (*this, &ARDOUR_UI::parameter_changed)); + session->config.map_parameters (mem_fun (*this, &ARDOUR_UI::parameter_changed)); } +#if 0 void -ARDOUR_UI::setup_session_options () +ARDOUR_UI::handle_sync_change () { - mtc_port_changed (); + if (!session) { + return; + } + if (!session->config.get_external_sync()) { + sync_button.set_label (_("Internal")); + ActionManager::get_action ("Transport", "ToggleAutoPlay")->set_sensitive (true); + ActionManager::get_action ("Transport", "ToggleAutoReturn")->set_sensitive (true); + } else { + sync_button.set_label (_("External")); + /* XXX need to make auto-play is off as well as insensitive */ + ActionManager::get_action ("Transport", "ToggleAutoPlay")->set_sensitive (false); + ActionManager::get_action ("Transport", "ToggleAutoReturn")->set_sensitive (false); + } - Config->ParameterChanged.connect (mem_fun (*this, &ARDOUR_UI::parameter_changed)); } +#endif void ARDOUR_UI::parameter_changed (std::string p) { ENSURE_GUI_THREAD (bind (mem_fun (*this, &ARDOUR_UI::parameter_changed), p)); - if (p == "slave-source") { - - sync_option_combo.set_active_text (slave_source_to_string (Config->get_slave_source())); - - switch (Config->get_slave_source()) { - case None: + if (p == "external-sync") { + + if (!session->config.get_external_sync()) { + sync_button.set_label (_("Internal")); ActionManager::get_action ("Transport", "ToggleAutoPlay")->set_sensitive (true); ActionManager::get_action ("Transport", "ToggleAutoReturn")->set_sensitive (true); - break; - - default: + } else { + sync_button.set_label (sync_source_to_string (session->config.get_sync_source())); /* XXX need to make auto-play is off as well as insensitive */ ActionManager::get_action ("Transport", "ToggleAutoPlay")->set_sensitive (false); ActionManager::get_action ("Transport", "ToggleAutoReturn")->set_sensitive (false); - break; } - + } else if (p == "send-mtc") { ActionManager::map_some_state ("options", "SendMTC", &RCConfiguration::get_send_mtc); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index c9a5870df0..001e56da35 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -2350,13 +2350,14 @@ Editor::transition_to_rolling (bool fwd) return; } - switch (Config->get_slave_source()) { - case None: - case JACK: - break; - default: - /* transport controlled by the master */ - return; + if (session->config.get_external_sync()) { + switch (session->config.get_sync_source()) { + case JACK: + break; + default: + /* transport controlled by the master */ + return; + } } if (session->is_auditioning()) { diff --git a/gtk2_ardour/option_editor.h b/gtk2_ardour/option_editor.h index f5509c760c..3a5281af0c 100644 --- a/gtk2_ardour/option_editor.h +++ b/gtk2_ardour/option_editor.h @@ -231,6 +231,11 @@ public: _combo->append_text (o); } + void clear () { + _combo->clear_items(); + _options.clear (); + } + void changed () { uint32_t const r = _combo->get_active_row_number (); if (r < _options.size()) { diff --git a/gtk2_ardour/session_option_editor.cc b/gtk2_ardour/session_option_editor.cc index ab774ffc18..49dbcdff15 100644 --- a/gtk2_ardour/session_option_editor.cc +++ b/gtk2_ardour/session_option_editor.cc @@ -138,8 +138,8 @@ private: }; SessionOptionEditor::SessionOptionEditor (Session* s) - : OptionEditor (&(s->config), _("Session Preferences")), - _session_config (&(s->config)) + : OptionEditor (&(s->config), _("Session Preferences")) + , _session_config (&(s->config)) { /* FADES */ @@ -222,6 +222,19 @@ SessionOptionEditor::SessionOptionEditor (Session* s) add_option (_("Sync"), spf); + ComboOption<SyncSource>* ssrc = new ComboOption<SyncSource> ( + "sync-source", + _("External sync source"), + mem_fun (*_session_config, &SessionConfiguration::get_sync_source), + mem_fun (*_session_config, &SessionConfiguration::set_sync_source) + ); + + s->MTC_PortChanged.connect (bind (mem_fun (*this, &SessionOptionEditor::populate_sync_options), s, ssrc)); + s->MIDIClock_PortChanged.connect (bind (mem_fun (*this, &SessionOptionEditor::populate_sync_options), s, ssrc)); + populate_sync_options (s, ssrc); + + add_option (_("Sync"), ssrc); + ComboOption<TimecodeFormat>* smf = new ComboOption<TimecodeFormat> ( "timecode-format", _("Timecode frames-per-second"), @@ -332,3 +345,18 @@ SessionOptionEditor::SessionOptionEditor (Session* s) add_option (_("Connections"), new ConnectionOptions (this, s)); } + +void +SessionOptionEditor::populate_sync_options (Session* s, Option* opt) +{ + ComboOption<SyncSource>* sync_opt = dynamic_cast<ComboOption<SyncSource>* > (opt); + + vector<SyncSource> sync_opts = s->get_available_sync_options (); + + sync_opt->clear (); + + for (vector<SyncSource>::iterator i = sync_opts.begin(); i != sync_opts.end(); ++i) { + sync_opt->add (*i, sync_source_to_string (*i)); + } +} + diff --git a/gtk2_ardour/session_option_editor.h b/gtk2_ardour/session_option_editor.h index 7760f530c4..a2dc750cd2 100644 --- a/gtk2_ardour/session_option_editor.h +++ b/gtk2_ardour/session_option_editor.h @@ -12,4 +12,5 @@ public: private: ARDOUR::SessionConfiguration* _session_config; + void populate_sync_options (ARDOUR::Session*, Option*); }; |