summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour3_ui_dark.rc.in2
-rw-r--r--gtk2_ardour/ardour_ui.cc37
-rw-r--r--gtk2_ardour/ardour_ui.h6
-rw-r--r--gtk2_ardour/ardour_ui2.cc38
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc1
-rw-r--r--gtk2_ardour/ardour_ui_options.cc71
-rw-r--r--gtk2_ardour/editor_ops.cc15
-rw-r--r--gtk2_ardour/option_editor.h5
-rw-r--r--gtk2_ardour/session_option_editor.cc32
-rw-r--r--gtk2_ardour/session_option_editor.h1
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*);
};