editor->add_toplevel_controls (top_packer);
setup_transport();
+
build_menu_bar ();
setup_tooltips ();
set_tip (goto_start_button, _("Go to start of session"));
set_tip (goto_end_button, _("Go to end of session"));
set_tip (auto_loop_button, _("Play loop range"));
+ set_tip (midi_panic_button, _("MIDI Panic\nSend note off and reset controller messages on all MIDI channels"));
set_tip (auto_return_button, _("Return to last playback start when stopped"));
set_tip (auto_play_button, _("Start playback after any locate"));
set_tip (auto_input_button, _("Be sensible about input monitoring"));
set_tip (click_button, _("Enable/Disable audio click"));
- set_tip (time_master_button, string_compose (_("Does %1 control the time?"), PROGRAM_NAME));
set_tip (solo_alert_button, _("When active, something is soloed.\nClick to de-solo everything"));
set_tip (auditioning_alert_button, _("When active, auditioning is taking place\nClick to stop the audition"));
+ set_tip (feedback_alert_button, _("When active, there is a feedback loop."));
set_tip (primary_clock, _("Primary Clock"));
set_tip (secondary_clock, _("Secondary Clock"));
auto_return_button.set_name ("transport option button");
auto_play_button.set_name ("transport option button");
auto_input_button.set_name ("transport option button");
- click_button.set_name ("transport option button");
- time_master_button.set_name ("TransportButton");
- sync_button.set_name ("TransportSyncButton");
+ /* these have to provide a clear indication of active state */
+
+ click_button.set_name ("transport active option button");
+ sync_button.set_name ("transport active option button");
stop_button.set_active_state (Active);
auto_loop_button.set_image (get_icon (X_("transport_loop")));
join_play_range_button.set_image (get_icon (X_("tool_object_range")));
+ midi_panic_button.set_image (get_icon (X_("midi_panic")));
+ /* the icon for this has an odd aspect ratio, so fatten up the button */
+ midi_panic_button.set_size_request (25, -1);
+
act = ActionManager::get_action (X_("Transport"), X_("Stop"));
stop_button.set_related_action (act);
act = ActionManager::get_action (X_("Transport"), X_("Roll"));
auto_loop_button.set_related_action (act);
act = ActionManager::get_action (X_("Transport"), X_("PlaySelection"));
play_selection_button.set_related_action (act);
-
-
- act = ActionManager::get_action (X_("Transport"), X_("ToggleTimeMaster"));
- act->connect_proxy (time_master_button);
+ act = ActionManager::get_action (X_("MIDI"), X_("panic"));
+ midi_panic_button.set_related_action (act);
act = ActionManager::get_action (X_("Transport"), X_("ToggleExternalSync"));
- act->connect_proxy (sync_button);
-
+ sync_button.set_related_action (act);
/* clocks, etc. */
- ARDOUR_UI::Clock.connect (sigc::bind (sigc::mem_fun (primary_clock, &AudioClock::set), 'p'));
- ARDOUR_UI::Clock.connect (sigc::bind (sigc::mem_fun (secondary_clock, &AudioClock::set), 's'));
+ ARDOUR_UI::Clock.connect (sigc::mem_fun (primary_clock, &AudioClock::set));
+ ARDOUR_UI::Clock.connect (sigc::mem_fun (secondary_clock, &AudioClock::set));
primary_clock->ValueChanged.connect (sigc::mem_fun(*this, &ARDOUR_UI::primary_clock_value_changed));
secondary_clock->ValueChanged.connect (sigc::mem_fun(*this, &ARDOUR_UI::secondary_clock_value_changed));
/* CANNOT sigc::bind these to clicked or toggled, must use pressed or released */
- solo_alert_button.set_name ("TransportSoloAlert");
+ solo_alert_button.set_name ("rude solo");
solo_alert_button.signal_button_press_event().connect (sigc::mem_fun(*this,&ARDOUR_UI::solo_alert_press), false);
- auditioning_alert_button.set_name ("TransportAuditioningAlert");
+ auditioning_alert_button.set_name ("rude audition");
auditioning_alert_button.signal_button_press_event().connect (sigc::mem_fun(*this,&ARDOUR_UI::audition_alert_press), false);
+ feedback_alert_button.set_name ("feedback alert");
+ feedback_alert_button.signal_button_press_event().connect (sigc::mem_fun (*this, &ARDOUR_UI::feedback_alert_press), false);
alert_box.pack_start (solo_alert_button, true, false);
alert_box.pack_start (auditioning_alert_button, true, false);
+ alert_box.pack_start (feedback_alert_button, true, false);
HBox* tbox = manage (new HBox);
tbox->set_spacing (2);
+ tbox->pack_start (midi_panic_button, false, false);
tbox->pack_start (goto_start_button, false, false);
tbox->pack_start (goto_end_button, false, false);
- /* translators: Egternal is "External" with a descender character */
- set_size_request_to_display_given_text (sync_button, X_("Egternal"), 4, 10);
-
Glib::RefPtr<SizeGroup> transport_button_size_group1 = SizeGroup::create (SIZE_GROUP_HORIZONTAL);
transport_button_size_group1->add_widget (goto_start_button);
transport_button_size_group1->add_widget (goto_end_button);
tbox->pack_start (rec_button, false, false, 6);
HBox* clock_box = manage (new HBox);
- clock_box->set_border_width (2);
+
primary_clock->set_border_width (2);
clock_box->pack_start (*primary_clock, false, false);
if (!ARDOUR::Profile->get_small_screen()) {
clock_box->pack_start (*secondary_clock, false, false);
}
-
shuttle_box = new ShuttleControl;
shuttle_box->show ();
/* transport related toggle controls */
- HBox* toggle_box = manage(new HBox);
VBox* auto_box = manage (new VBox);
- auto_box->set_spacing (2);
auto_box->set_homogeneous (true);
- toggle_box->set_spacing (2);
- toggle_box->set_homogeneous (true);
- auto_box->pack_start (auto_play_button, true, false);
- auto_box->pack_start (auto_return_button, true, false);
+ auto_box->set_spacing (2);
+ auto_box->pack_start (sync_button, false, false);
+ auto_box->pack_start (auto_play_button, false, false);
+ auto_box->pack_start (auto_return_button, false, false);
if (!Profile->get_small_screen()) {
- toggle_box->pack_start (*auto_box, false, false);
+ transport_tearoff_hbox.pack_start (*auto_box, false, false);
}
- transport_tearoff_hbox.pack_start (*toggle_box, false, false);
-
- Table* time_controls_table = manage (new Table (2, 2));
- time_controls_table->set_col_spacings (6);
- time_controls_table->attach (sync_button, 0, 1, 0, 1, Gtk::AttachOptions(FILL|EXPAND), Gtk::AttachOptions(0));
- time_controls_table->attach (time_master_button, 0, 1, 1, 2, Gtk::AttachOptions(FILL|EXPAND), Gtk::AttachOptions(0));
-
- time_controls_table->attach (click_button, 1, 2, 0, 2, Gtk::AttachOptions(FILL|EXPAND), FILL);
transport_tearoff_hbox.pack_start (*clock_box, false, false);
- transport_tearoff_hbox.pack_start (*time_controls_table, false, false);
+ transport_tearoff_hbox.pack_start (click_button, false, false);
time_info_box = manage (new TimeInfoBox);
transport_tearoff_hbox.pack_start (*time_info_box, false, false);
-
if (Profile->get_small_screen()) {
transport_tearoff_hbox.pack_start (_editor_transport_box, false, false);
}
void
ARDOUR_UI::_auditioning_changed (bool onoff)
{
- if (auditioning_alert_button.get_active() != onoff) {
- auditioning_alert_button.set_active (onoff);
- set_transport_sensitivity (!onoff);
- }
+ auditioning_alert_button.set_active (onoff);
+ set_transport_sensitivity (!onoff);
}
void
return true;
}
+bool
+ARDOUR_UI::feedback_alert_press (GdkEventButton *)
+{
+ return true;
+}
+
void
ARDOUR_UI::solo_blink (bool onoff)
{
if (_session->soloing() || _session->listening()) {
if (onoff) {
- solo_alert_button.set_state (STATE_ACTIVE);
+ solo_alert_button.set_active (true);
} else {
- solo_alert_button.set_state (STATE_NORMAL);
+ solo_alert_button.set_active (false);
}
} else {
solo_alert_button.set_active (false);
- solo_alert_button.set_state (STATE_NORMAL);
}
}
{
if (_session == 0 || !_session->config.get_external_sync()) {
/* internal sync */
- sync_button.set_visual_state (0);
+ sync_button.set_active (false);
return;
}
/* not locked, so blink on and off according to the onoff argument */
if (onoff) {
- sync_button.set_visual_state (1); // "-active"
+ sync_button.set_active (true);
} else {
- sync_button.set_visual_state (0); // normal
+ sync_button.set_active (false);
}
} else {
/* locked */
- sync_button.set_visual_state (1); // "-active"
+ sync_button.set_active (true);
}
}
if (_session->is_auditioning()) {
if (onoff) {
- auditioning_alert_button.set_state (STATE_ACTIVE);
+ auditioning_alert_button.set_active (true);
} else {
- auditioning_alert_button.set_state (STATE_NORMAL);
+ auditioning_alert_button.set_active (false);
}
} else {
auditioning_alert_button.set_active (false);
- auditioning_alert_button.set_state (STATE_NORMAL);
+ }
+}
+
+void
+ARDOUR_UI::feedback_blink (bool onoff)
+{
+ if (_feedback_exists) {
+ if (onoff) {
+ feedback_alert_button.set_active (true);
+ } else {
+ feedback_alert_button.set_active (false);
+ }
+ } else {
+ feedback_alert_button.set_active (false);
}
}