#include "ardour/ardour.h"
#include "ardour/callback.h"
#include "ardour/profile.h"
+#include "ardour/plugin_manager.h"
#include "ardour/session_directory.h"
#include "ardour/session_route.h"
#include "ardour/session_state_utils.h"
#include "ardour/midi_track.h"
#include "ardour/filesystem_paths.h"
#include "ardour/filename_extensions.h"
+#include "ardour/process_thread.h"
typedef uint64_t microseconds_t;
: Gtkmm2ext::UI (PROGRAM_NAME, argcp, argvp)
, gui_object_state (new GUIObjectState)
- , primary_clock (new AudioClock (X_("primary"), false, X_("TransportClockDisplay"), true, true, false, true))
- , secondary_clock (new AudioClock (X_("secondary"), false, X_("SecondaryClockDisplay"), true, true, false, true))
- , preroll_clock (new AudioClock (X_("preroll"), false, X_("PreRollClock"), true, false, true))
- , postroll_clock (new AudioClock (X_("postroll"), false, X_("PostRollClock"), true, false, true))
-
- /* preroll stuff */
-
- , preroll_button (_("pre\nroll"))
- , postroll_button (_("post\nroll"))
+ , primary_clock (new AudioClock (X_("primary"), false, X_("transport"), true, true, false, true))
+ , secondary_clock (new AudioClock (X_("secondary"), false, X_("secondary"), true, true, false, true))
/* big clock */
- , big_clock (new AudioClock (X_("bigclock"), false, "BigClockNonRecording", true, true, false, false))
+ , big_clock (new AudioClock (X_("bigclock"), false, "big", true, true, false, false))
/* transport */
, play_selection_controllable (new TransportControllable ("transport play selection", *this, TransportControllable::PlaySelection))
, rec_controllable (new TransportControllable ("transport rec-enable", *this, TransportControllable::RecordEnable))
- , roll_button (roll_controllable)
- , stop_button (stop_controllable)
- , goto_start_button (goto_start_controllable)
- , goto_end_button (goto_end_controllable)
- , auto_loop_button (auto_loop_controllable)
- , play_selection_button (play_selection_controllable)
- , rec_button (rec_controllable)
-
- , auto_return_button (_("Auto Return"))
- , auto_play_button (_("Auto Play"))
- , auto_input_button (_("Auto Input"))
- // , click_button (_("Click"))
- , time_master_button (_("time\nmaster"))
+ , auto_return_button (ArdourButton::led_default_elements)
+ , auto_play_button (ArdourButton::led_default_elements)
+ , auto_input_button (ArdourButton::led_default_elements)
- , auditioning_alert_button (_("AUDITION"))
- , solo_alert_button (_("SOLO"))
+ , auditioning_alert_button (_("audition"))
+ , solo_alert_button (_("solo"))
+ , feedback_alert_button (_("feedback"))
, error_log_button (_("Errors"))
, _status_bar_visibility (X_("status-bar"))
+ , _feedback_exists (false)
{
using namespace Gtk::Menu_Helpers;
original_big_clock_height = -1;
original_big_clock_font_size = 0;
- roll_button.unset_flags (Gtk::CAN_FOCUS);
- stop_button.unset_flags (Gtk::CAN_FOCUS);
- goto_start_button.unset_flags (Gtk::CAN_FOCUS);
- goto_end_button.unset_flags (Gtk::CAN_FOCUS);
- auto_loop_button.unset_flags (Gtk::CAN_FOCUS);
- play_selection_button.unset_flags (Gtk::CAN_FOCUS);
- rec_button.unset_flags (Gtk::CAN_FOCUS);
- join_play_range_button.unset_flags (Gtk::CAN_FOCUS);
+ roll_button.set_controllable (roll_controllable);
+ stop_button.set_controllable (stop_controllable);
+ goto_start_button.set_controllable (goto_start_controllable);
+ goto_end_button.set_controllable (goto_end_controllable);
+ auto_loop_button.set_controllable (auto_loop_controllable);
+ play_selection_button.set_controllable (play_selection_controllable);
+ rec_button.set_controllable (rec_controllable);
+
+ roll_button.set_name ("transport button");
+ stop_button.set_name ("transport button");
+ goto_start_button.set_name ("transport button");
+ goto_end_button.set_name ("transport button");
+ auto_loop_button.set_name ("transport button");
+ play_selection_button.set_name ("transport button");
+ rec_button.set_name ("transport recenable button");
+ join_play_range_button.set_name ("transport button");
+ midi_panic_button.set_name ("transport button");
+
+ goto_start_button.set_tweaks (ArdourButton::ShowClick);
+ goto_end_button.set_tweaks (ArdourButton::ShowClick);
+ midi_panic_button.set_tweaks (ArdourButton::ShowClick);
+
last_configure_time= 0;
last_peak_grab = 0;
ARDOUR::Session::Quit.connect (forever_connections, MISSING_INVALIDATOR, ui_bind (&ARDOUR_UI::finish, this), gui_context ());
+ /* tell the user about feedback */
+
+ ARDOUR::Session::FeedbackDetected.connect (forever_connections, MISSING_INVALIDATOR, ui_bind (&ARDOUR_UI::feedback_detected, this), gui_context ());
+ ARDOUR::Session::SuccessfulGraphSort.connect (forever_connections, MISSING_INVALIDATOR, ui_bind (&ARDOUR_UI::successful_graph_sort, this), gui_context ());
+
/* handle requests to deal with missing files */
ARDOUR::Session::MissingFile.connect_same_thread (forever_connections, boost::bind (&ARDOUR_UI::missing_file, this, _1, _2, _3));
starting.connect (sigc::mem_fun(*this, &ARDOUR_UI::startup));
stopping.connect (sigc::mem_fun(*this, &ARDOUR_UI::shutdown));
+ _process_thread = new ProcessThread ();
+ _process_thread->init ();
+
+ DPIReset.connect (sigc::mem_fun (*this, &ARDOUR_UI::resize_text_widgets));
}
/** @return true if a session was chosen and `apply' clicked, otherwise false if `cancel' was clicked */
ARDOUR::init_post_engine ();
+ /* load up the UI manager */
+
ActionManager::init ();
+
_tooltips.enable();
if (setup_windows ()) {
}
stringstream s;
- s << "File: <span foreground=\"green\">";
+ s << _("File:") << X_(" <span foreground=\"green\">");
switch (_session->config.get_native_file_header_format ()) {
case BWF:
- s << "BWF";
+ s << _("BWF");
break;
case WAVE:
- s << "WAV";
+ s << _("WAV");
break;
case WAVE64:
- s << "WAV64";
+ s << _("WAV64");
break;
case CAF:
- s << "CAF";
+ s << _("CAF");
break;
case AIFF:
- s << "AIFF";
+ s << _("AIFF");
break;
case iXML:
- s << "iXML";
+ s << _("iXML");
break;
case RF64:
- s << "RF64";
+ s << _("RF64");
break;
}
switch (_session->config.get_native_file_data_format ()) {
case FormatFloat:
- s << "32-float";
+ s << _("32-float");
break;
case FormatInt24:
- s << "24-int";
+ s << _("24-int");
break;
case FormatInt16:
- s << "16-int";
+ s << _("16-int");
break;
}
- s << "</span>";
+ s << X_("</span>");
format_label.set_markup (s.str ());
}
{
char buf[64];
- /* If this text is changed, the set_size_request_to_display_given_text call in ARDOUR_UI::build_menu_bar
+ /* If this text is changed, the set_size_request_to_display_given_text call in ARDOUR_UI::resize_text_widgets
should also be changed.
*/
uint32_t const playback = _session ? _session->playback_load () : 100;
uint32_t const capture = _session ? _session->capture_load () : 100;
- /* If this text is changed, the set_size_request_to_display_given_text call in ARDOUR_UI::build_menu_bar
+ /* If this text is changed, the set_size_request_to_display_given_text call in ARDOUR_UI::resize_text_widgets
should also be changed.
*/
int secs;
hrs = frames / (fr * 3600);
- frames -= hrs * fr * 3600;
- mins = frames / (fr * 60);
- frames -= mins * fr * 60;
- secs = frames / fr;
-
- bool const low = (hrs == 0 && mins <= 30);
- snprintf (
- buf, sizeof(buf),
- _("Disk: <span foreground=\"%s\">%02dh:%02dm:%02ds</span>"),
- low ? X_("red") : X_("green"),
- hrs, mins, secs
- );
+ if (hrs > 24) {
+ snprintf (buf, sizeof (buf), _("Disk: <span foreground=\"green\">>24 hrs</span>"));
+ } else {
+ frames -= hrs * fr * 3600;
+ mins = frames / (fr * 60);
+ frames -= mins * fr * 60;
+ secs = frames / fr;
+
+ bool const low = (hrs == 0 && mins <= 30);
+
+ snprintf (
+ buf, sizeof(buf),
+ _("Disk: <span foreground=\"%s\">%02dh:%02dm:%02ds</span>"),
+ low ? X_("red") : X_("green"),
+ hrs, mins, secs
+ );
+ }
}
disk_space_label.set_markup (buf);
switch (_session->record_status()) {
case Session::Disabled:
if (_session->ntracks() == 0) {
- MessageDialog msg (*editor, _("Please create 1 or more track\nbefore trying to record.\nCheck the Session menu."));
+ MessageDialog msg (*editor, _("Please create one or more tracks before trying to record.\nYou can do this with the \"Add Track or Bus\" option in the Session menu."));
msg.run ();
return;
}
if (!Config->get_seamless_loop()) {
_session->request_play_loop (false, true);
}
- } else if (_session->get_play_range () && !join_play_range_button.get_active()) {
+ } else if (_session->get_play_range () && !join_play_range_button.active_state()) {
/* stop playing a range if we currently are */
_session->request_play_range (0, true);
}
- if (join_play_range_button.get_active()) {
+ if (join_play_range_button.active_state()) {
_session->request_play_range (&editor->get_selection().time, true);
}
if (rolling) {
_session->request_stop (with_abort, true);
} else {
- if (join_play_range_button.get_active()) {
+ if (join_play_range_button.active_state()) {
_session->request_play_range (&editor->get_selection().time, true);
}
ARDOUR_UI::map_transport_state ()
{
if (!_session) {
- auto_loop_button.set_visual_state (0);
- play_selection_button.set_visual_state (0);
- roll_button.set_visual_state (0);
- stop_button.set_visual_state (1);
+ auto_loop_button.unset_active_state ();
+ play_selection_button.unset_active_state ();
+ roll_button.unset_active_state ();
+ stop_button.set_active_state (Gtkmm2ext::Active);
return;
}
if (_session->get_play_range()) {
- play_selection_button.set_visual_state (1);
- roll_button.set_visual_state (0);
- auto_loop_button.set_visual_state (0);
+ play_selection_button.set_active_state (Gtkmm2ext::Active);
+ roll_button.unset_active_state ();
+ auto_loop_button.unset_active_state ();
} else if (_session->get_play_loop ()) {
- auto_loop_button.set_visual_state (1);
- play_selection_button.set_visual_state (0);
- roll_button.set_visual_state (0);
+ auto_loop_button.set_active_state (Gtkmm2ext::Active);
+ play_selection_button.unset_active_state ();
+ roll_button.unset_active_state ();
} else {
- roll_button.set_visual_state (1);
- play_selection_button.set_visual_state (0);
- auto_loop_button.set_visual_state (0);
+ roll_button.set_active_state (Gtkmm2ext::Active);
+ play_selection_button.unset_active_state ();
+ auto_loop_button.unset_active_state ();
}
- if (join_play_range_button.get_active()) {
+ if (join_play_range_button.active_state()) {
/* light up both roll and play-selection if they are joined */
- roll_button.set_visual_state (1);
- play_selection_button.set_visual_state (1);
+ roll_button.set_active_state (Gtkmm2ext::Active);
+ play_selection_button.set_active_state (Gtkmm2ext::Active);
}
- stop_button.set_visual_state (0);
+ stop_button.unset_active_state ();
} else {
- stop_button.set_visual_state (1);
- roll_button.set_visual_state (0);
- play_selection_button.set_visual_state (0);
- auto_loop_button.set_visual_state (0);
+ stop_button.set_active_state (Gtkmm2ext::Active);
+ roll_button.unset_active_state ();
+ play_selection_button.unset_active_state ();
+ auto_loop_button.unset_active_state ();
update_disk_space ();
}
}
if (r == Session::Enabled || (r == Session::Recording && !h)) {
if (onoff) {
- rec_button.set_visual_state (2);
+ rec_button.set_active_state (Active);
} else {
- rec_button.set_visual_state (0);
+ rec_button.set_active_state (Mid);
}
} else if (r == Session::Recording && h) {
- rec_button.set_visual_state (1);
+ rec_button.set_active_state (Mid);
} else {
- rec_button.set_visual_state (0);
+ rec_button.unset_active_state ();
}
}
bus_profile.input_ac = AutoConnectOption (0);
}
- /// @todo some minor tweaks.
-
bus_profile.output_ac = AutoConnectOption (0);
if (_startup->connect_outputs ()) {
_("No files were ready for clean-up"),
true,
Gtk::MESSAGE_INFO,
- (Gtk::ButtonsType)(Gtk::BUTTONS_OK) );
+ Gtk::BUTTONS_OK);
msgd.set_title (_("Clean-up"));
msgd.set_secondary_text (_("If this seems suprising, \n\
check for any existing snapshots.\n\
MessageDialog checker (_("Are you sure you want to clean-up?"),
true,
Gtk::MESSAGE_QUESTION,
- (Gtk::ButtonsType)(Gtk::BUTTONS_NONE));
+ Gtk::BUTTONS_NONE);
checker.set_title (_("Clean-up"));
ARDOUR_UI::update_transport_clocks (framepos_t pos)
{
if (Config->get_primary_clock_delta_edit_cursor()) {
- primary_clock->set (pos, false, editor->get_preferred_edit_position(), 1);
+ primary_clock->set (pos, false, editor->get_preferred_edit_position());
} else {
- primary_clock->set (pos, 0, true);
+ primary_clock->set (pos);
}
if (Config->get_secondary_clock_delta_edit_cursor()) {
- secondary_clock->set (pos, false, editor->get_preferred_edit_position(), 2);
+ secondary_clock->set (pos, false, editor->get_preferred_edit_position());
} else {
secondary_clock->set (pos);
}
// we make insensitive
if (yn) {
- rec_button.set_visual_state (3);
+ rec_button.set_active_state (Mid);
rec_button.set_sensitive (false);
} else {
- rec_button.set_visual_state (0);
+ rec_button.unset_active_state ();;
rec_button.set_sensitive (true);
}
}
return;
}
- Session::RecordState const r = _session->record_status ();
- bool const h = _session->have_rec_enabled_track ();
-
- if (r == Session::Recording && h) {
- big_clock->set_widget_name ("BigClockRecording");
+ if (_session->record_status () == Session::Recording && _session->have_rec_enabled_track ()) {
+ big_clock->set_active (true);
} else {
- big_clock->set_widget_name ("BigClockNonRecording");
+ big_clock->set_active (false);
}
}
dialog.run ();
return dialog.get_which ();
}
+
+/** Allocate our thread-local buffers */
+void
+ARDOUR_UI::get_process_buffers ()
+{
+ _process_thread->get_buffers ();
+}
+
+/** Drop our thread-local buffers */
+void
+ARDOUR_UI::drop_process_buffers ()
+{
+ _process_thread->drop_buffers ();
+}
+
+void
+ARDOUR_UI::feedback_detected ()
+{
+ _feedback_exists = true;
+}
+
+void
+ARDOUR_UI::successful_graph_sort ()
+{
+ _feedback_exists = false;
+}
+
+void
+ARDOUR_UI::midi_panic ()
+{
+ if (_session) {
+ _session->midi_panic();
+ }
+}