diff options
Diffstat (limited to 'gtk2_ardour/ardour_ui_options.cc')
-rw-r--r-- | gtk2_ardour/ardour_ui_options.cc | 61 |
1 files changed, 60 insertions, 1 deletions
diff --git a/gtk2_ardour/ardour_ui_options.cc b/gtk2_ardour/ardour_ui_options.cc index fd914b95dd..8bd2508292 100644 --- a/gtk2_ardour/ardour_ui_options.cc +++ b/gtk2_ardour/ardour_ui_options.cc @@ -57,7 +57,19 @@ ARDOUR_UI::toggle_keep_tearoffs () void ARDOUR_UI::toggle_external_sync() { - 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)); + if (_session) { + if (_session->config.get_video_pullup() != 0.0f) { + if (_session->config.get_sync_source() == JACK) { + 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)); + } } void @@ -400,7 +412,14 @@ ARDOUR_UI::parameter_changed (std::string p) break; } } else if (p == "video-pullup" || p == "timecode-format") { + + synchronize_sync_source_and_video_pullup (); reset_main_clocks (); + + } else if (p == "sync-source") { + + synchronize_sync_source_and_video_pullup (); + } else if (p == "show-track-meters") { editor->toggle_meter_updating(); } @@ -419,3 +438,43 @@ ARDOUR_UI::reset_main_clocks () secondary_clock.set (0, true); } } + +void +ARDOUR_UI::synchronize_sync_source_and_video_pullup () +{ + Glib::RefPtr<Action> act = ActionManager::get_action (X_("Transport"), X_("ToggleExternalSync")); + + if (!act) { + return; + } + + if (!_session) { + goto just_label; + } + + if (_session->config.get_video_pullup() == 0.0f) { + /* with no video pull up/down, any sync source is OK */ + act->set_sensitive (true); + } else { + /* can't sync to JACK if video pullup != 0.0 */ + if (_session->config.get_sync_source() == JACK) { + act->set_sensitive (false); + } else { + act->set_sensitive (true); + } + } + + /* XXX should really be able to set the video pull up + action to insensitive/sensitive, but there is no action. + FIXME + */ + + just_label: + if (act->get_sensitive ()) { + set_tip (sync_button, _("Enable/Disable external positional sync")); + } else { + set_tip (sync_button, _("Sync to JACK is not possible: video pull up/down is set")); + } + +} + |