#include <pbd/error.h>
#include <pbd/misc.h>
+#include <pbd/basename.h>
#include <pbd/compose.h>
#include <pbd/failed_constructor.h>
#include <pbd/enumwriter.h>
#include <ardour/audio_track.h>
#include <ardour/midi_track.h>
#include <ardour/filesystem_paths.h>
+#include <ardour/filename_extensions.h>
#include "actions.h"
#include "ardour_ui.h"
/* big clock */
- big_clock (X_("bigclock"), false, "BigClockNonRecording", false, false, true),
+ big_clock (X_("bigclock"), false, "BigClockNonRecording", true, false, true),
/* transport */
have_disk_speed_dialog_displayed = false;
session_loaded = false;
last_speed_displayed = -1.0f;
- ab_direction = true;
sys::path key_bindings_file;
starting.connect (mem_fun(*this, &ARDOUR_UI::startup));
stopping.connect (mem_fun(*this, &ARDOUR_UI::shutdown));
- platform_specific ();
+ platform_setup ();
}
int
Config->add_extra_xml (*node);
Config->add_extra_xml (get_transport_controllable_state());
Config->save_state();
+ ui_config->save_state ();
XMLNode enode(static_cast<Stateful*>(editor)->get_state());
XMLNode mnode(mixer->get_state());
/* Load session or start the new session dialog */
if (find_session (ARDOUR_COMMAND_LINE::session_name, path, name, isnew)) {
- error << string_compose(_("could not load command line session \"%1\""),
- ARDOUR_COMMAND_LINE::session_name) << endmsg;
- return;
+
+ MessageDialog msg (string_compose(_("Could not find command line session \"%1\""),
+ ARDOUR_COMMAND_LINE::session_name),
+ true,
+ Gtk::MESSAGE_ERROR,
+ Gtk::BUTTONS_OK);
+
+ msg.set_position (Gtk::WIN_POS_MOUSE);
+ msg.present ();
+ msg.run ();
+
+ exit (1);
}
if (!ARDOUR_COMMAND_LINE::new_session) {
/* Supposed to be loading an existing session, but the session doesn't exist */
if (isnew) {
- error << string_compose (_("\n\nNo session named \"%1\" exists.\n"
- "To create it from the command line, start ardour as \"ardour --new %1"), path)
- << endmsg;
- return;
+ MessageDialog msg (string_compose (_("\n\nNo session named \"%1\" exists.\n"
+ "To create it from the command line, start ardour as:\n ardour --new %1"), path),
+ true,
+ Gtk::MESSAGE_ERROR,
+ Gtk::BUTTONS_OK);
+
+ msg.set_position (Gtk::WIN_POS_MOUSE);
+ msg.present ();
+ msg.run ();
+
+ exit (1);
}
}
-
- new_session_dialog->set_session_name (name);
- new_session_dialog->set_session_folder (Glib::path_get_basename (path));
- _session_is_new = isnew;
}
hide_splash ();
bool have_backend = EngineControl::engine_running();
- bool need_nsd;
- bool load_needed = false;
-
- if (have_backend) {
-
- /* backend audio is working */
-
- if (ARDOUR_COMMAND_LINE::session_name.empty() || ARDOUR_COMMAND_LINE::new_session) {
- /* need NSD to get session name and other info */
- need_nsd = true;
- } else {
- need_nsd = false;
- }
-
- } else {
-
- XMLNode* audio_setup = Config->extra_xml ("AudioSetup");
-
- if (audio_setup) {
- new_session_dialog->engine_control.set_state (*audio_setup);
- }
-
- /* no backend audio, must bring up NSD to check configuration */
-
- need_nsd = true;
- }
-
- if (need_nsd) {
-
- if (!get_session_parameters (ARDOUR_COMMAND_LINE::session_name, have_backend, ARDOUR_COMMAND_LINE::new_session)) {
- return;
- }
-
- } else {
-
- if (create_engine ()) {
- backend_audio_error (false);
- exit (1);
- }
-
- load_needed = true;
+ XMLNode* audio_setup = Config->extra_xml ("AudioSetup");
+
+ if (audio_setup) {
+ new_session_dialog->engine_control.set_state (*audio_setup);
}
- if (load_needed) {
- if (load_session (ARDOUR_COMMAND_LINE::session_name, name)) {
- return;
- }
+ if (!get_session_parameters (ARDOUR_COMMAND_LINE::session_name, have_backend, ARDOUR_COMMAND_LINE::new_session)) {
+ return;
}
-
+
show ();
}
void
ARDOUR_UI::finish()
{
- if (session && session->dirty()) {
- switch (ask_about_saving_session(_("quit"))) {
- case -1:
- return;
- break;
- case 1:
- /* use the default name */
- if (save_state_canfail ("")) {
- /* failed - don't quit */
- MessageDialog msg (*editor,
- _("\
+ if (session) {
+
+ if (session->transport_rolling()) {
+ session->request_stop ();
+ usleep (2500000);
+ }
+
+ if (session->dirty()) {
+ switch (ask_about_saving_session(_("quit"))) {
+ case -1:
+ return;
+ break;
+ case 1:
+ /* use the default name */
+ if (save_state_canfail ("")) {
+ /* failed - don't quit */
+ MessageDialog msg (*editor,
+ _("\
Ardour was unable to save your session.\n\n\
If you still wish to quit, please use the\n\n\
\"Just quit\" option."));
- msg.run ();
- return;
+ msg.run ();
+ return;
+ }
+ break;
+ case 0:
+ break;
}
- break;
- case 0:
- break;
}
- }
-
- if (session) {
+
session->set_deletion_in_progress ();
}
+
engine->stop (true);
Config->save_state();
ARDOUR_UI::config()->save_state();
recent_session_display.set_model (recent_session_model);
recent_session_display.append_column (_("Recent Sessions"), recent_session_columns.visible_name);
recent_session_display.set_headers_visible (false);
- recent_session_display.get_selection()->set_mode (SELECTION_SINGLE);
-
+ recent_session_display.get_selection()->set_mode (SELECTION_BROWSE);
recent_session_display.signal_row_activated().connect (mem_fun (*this, &ARDOUR_UI::recent_session_row_activated));
scroller->add (recent_session_display);
void
ARDOUR_UI::open_recent_session ()
{
- /* popup selector window */
+ bool can_return = (session != 0);
if (session_selector_window == 0) {
build_session_selector ();
}
-
+
redisplay_recent_sessions ();
- ResponseType r = (ResponseType) session_selector_window->run ();
+ while (true) {
+
+ session_selector_window->set_position (WIN_POS_MOUSE);
- session_selector_window->hide();
+ ResponseType r = (ResponseType) session_selector_window->run ();
+
+ switch (r) {
+ case RESPONSE_ACCEPT:
+ break;
+ default:
+ if (can_return) {
+ session_selector_window->hide();
+ return;
+ } else {
+ exit (1);
+ }
+ }
- switch (r) {
- case RESPONSE_ACCEPT:
- break;
- default:
- return;
- }
+ if (recent_session_display.get_selection()->count_selected_rows() == 0) {
+ continue;
+ }
+
+ session_selector_window->hide();
- Gtk::TreeModel::iterator i = recent_session_display.get_selection()->get_selected();
+ Gtk::TreeModel::iterator i = recent_session_display.get_selection()->get_selected();
+
+ if (i == recent_session_model->children().end()) {
+ return;
+ }
+
+ Glib::ustring path = (*i)[recent_session_columns.fullpath];
+ Glib::ustring state = (*i)[recent_session_columns.visible_name];
+
+ _session_is_new = false;
+
+ if (load_session (path, state) == 0) {
+ break;
+ }
- if (i == recent_session_model->children().end()) {
- return;
+ can_return = false;
}
-
- Glib::ustring path = (*i)[recent_session_columns.fullpath];
- Glib::ustring state = (*i)[recent_session_columns.visible_name];
-
- _session_is_new = false;
-
- load_session (path, state);
}
bool
}
catch (...) {
- cerr << "About to complain about JACK\n";
MessageDialog msg (*editor,
_("There are insufficient JACK ports available\n\
to create a new track or bus.\n\
}
void
-ARDOUR_UI::transport_record ()
+ARDOUR_UI::transport_record (bool roll)
{
if (session) {
switch (session->record_status()) {
return;
}
session->maybe_enable_record ();
+ if (roll) {
+ transport_roll ();
+ }
break;
case Session::Recording:
+ if (roll) {
+ session->request_stop();
+ } else {
+ session->disable_record (false, true);
+ }
+ break;
+
case Session::Enabled:
session->disable_record (false, true);
}
ARDOUR_UI::update_clocks ()
{
if (!editor || !editor->dragging_playhead()) {
- Clock (session->audible_frame(), false, editor->edit_cursor_position(false)); /* EMIT_SIGNAL */
+ Clock (session->audible_frame(), false, editor->get_preferred_edit_position()); /* EMIT_SIGNAL */
}
}
IO& io,
bool in)
{
+ vector<string> connections;
+
if (in) {
if (io.n_inputs().n_total() == 0) {
buf = _("none");
/* XXX we're not handling multiple ports yet. */
- const char **connections = io.input(0)->get_connections();
-
- if (connections == 0 || connections[0] == '\0') {
+ if (io.input(0)->get_connections(connections) == 0) {
buf = _("off");
} else {
- buf = connections[0];
+ buf = connections.front();
}
- free (connections);
-
} else {
if (io.n_outputs().n_total() == 0) {
/* XXX we're not handling multiple ports yet. */
- const char **connections = io.output(0)->get_connections();
-
- if (connections == 0 || connections[0] == '\0') {
+ if (io.output(0)->get_connections(connections) == 0) {
buf = _("off");
} else {
- buf = connections[0];
+ buf = connections.front();
}
-
- free (connections);
}
}
}
}
+void
+ARDOUR_UI::big_clock_value_changed ()
+{
+ if (session) {
+ session->request_locate (big_clock.current_time ());
+ }
+}
+
void
ARDOUR_UI::secondary_clock_value_changed ()
{
}
}
+void
+ARDOUR_UI::fontconfig_dialog ()
+{
+#ifdef GTKOSX
+ /* X11 users will always have fontconfig info around, but new GTK-OSX users
+ may not and it can take a while to build it. Warn them.
+ */
+
+ Glib::ustring fontconfig = Glib::build_filename (Glib::get_home_dir(), ".fontconfig");
+
+ if (!Glib::file_test (fontconfig, Glib::FILE_TEST_EXISTS|Glib::FILE_TEST_IS_DIR)) {
+ MessageDialog msg (*new_session_dialog,
+ _("Welcome to Ardour.\n\n"
+ "The program will take a bit longer to start up\n"
+ "while the system fonts are checked.\n\n"
+ "This will only be done once, and you will\n"
+ "not see this message again\n"),
+ true,
+ Gtk::MESSAGE_INFO,
+ Gtk::BUTTONS_OK);
+ msg.show_all ();
+ msg.present ();
+ msg.run ();
+ }
+#endif
+}
+
bool
ARDOUR_UI::get_session_parameters (Glib::ustring predetermined_path, bool have_engine, bool should_be_new)
{
- string session_name;
- string session_path;
- string template_name;
+ bool existing_session = false;
+ Glib::ustring session_name;
+ Glib::ustring session_path;
+ Glib::ustring template_name;
if (!loading_dialog) {
loading_dialog = new MessageDialog (*new_session_dialog,
Gtk::MESSAGE_INFO,
Gtk::BUTTONS_NONE);
}
-
+
+
int response = Gtk::RESPONSE_NONE;
- new_session_dialog->set_modal(true);
- new_session_dialog->set_name (predetermined_path);
- new_session_dialog->reset_recent();
+ if (predetermined_path.length()) {
+
+ /* before we start, lets see if the given path looks like
+ an existing ardour session. if it does, skip the
+ tabs that we don't need
+ */
+
+ if (Glib::file_test (predetermined_path, Glib::FILE_TEST_IS_DIR)) {
+ session_path = predetermined_path;
+ existing_session = true;
+ } else if (Glib::file_test (predetermined_path, Glib::FILE_TEST_IS_REGULAR)) {
+ session_path = Glib::path_get_dirname (string (predetermined_path));
+ existing_session = true;
+ } else {
+ /* it doesn't exist, assume the best */
+ session_path = Glib::path_get_dirname (string (predetermined_path));
+ }
+
+ session_name = basename_nosuffix (string (predetermined_path));
+
+ new_session_dialog->set_session_name (session_name);
+ new_session_dialog->set_session_folder (session_path);
+ new_session_dialog->set_modal (true);
+
+ if (existing_session) {
+
+ if (session_name.length() == 0 || session_path.length() == 0) {
+ error << string_compose (_("Ardour cannot understand \"%1\" as a session name"), predetermined_path) << endmsg;
+ return false;
+ }
+
+ if (Glib::file_test (predetermined_path, Glib::FILE_TEST_IS_DIR)) {
+ Glib::ustring predicted_session_file;
+
+ predicted_session_file = predetermined_path;
+ predicted_session_file += '/';
+ predicted_session_file += session_name;
+ predicted_session_file += ARDOUR::statefile_suffix;
+
+ if (Glib::file_test (predicted_session_file, Glib::FILE_TEST_EXISTS)) {
+ existing_session = true;
+ }
+
+ } else if (Glib::file_test (predetermined_path, Glib::FILE_TEST_EXISTS)) {
+
+ if (predetermined_path.find (ARDOUR::statefile_suffix) == predetermined_path.length() - 7) {
+ /* existing .ardour file */
+ existing_session = true;
+ }
+ } else {
+ existing_session = false;
+ }
+
+ if (existing_session && have_engine) {
+ /* lets just try to load it */
+
+ loading_dialog->set_message (_("Starting audio engine"));
+ loading_dialog->show_all ();
+ flush_pending ();
+
+ if (create_engine ()) {
+ backend_audio_error (!have_engine, new_session_dialog);
+ loading_dialog->hide ();
+ return false;
+ }
+
+ if (load_session (session_path, session_name) == 0) {
+ goto done;
+ }
+ }
+ }
+ }
+
+ /* loading failed, or we need the NSD for something */
+
new_session_dialog->set_position (WIN_POS_CENTER);
new_session_dialog->set_current_page (0);
+ new_session_dialog->set_existing_session (existing_session);
+ new_session_dialog->reset_recent();
do {
new_session_dialog->set_have_engine (have_engine);
-
- new_session_dialog->show();
new_session_dialog->present ();
- response = new_session_dialog->run ();
-
+ response = new_session_dialog->run ();
+ loading_dialog->hide ();
+
_session_is_new = false;
+
+ /* handle possible negative responses */
if (response == Gtk::RESPONSE_CANCEL || response == Gtk::RESPONSE_DELETE_EVENT) {
-
+
if (!session) {
quit();
}
new_session_dialog->hide ();
return false;
-
+
} else if (response == Gtk::RESPONSE_NONE) {
-
- /* Clear was pressed */
- new_session_dialog->reset();
- continue;
+ /* "Clear" was pressed */
+
+ goto try_again;
}
- /* first things first ... if we're here to help set up audio parameters
- this is where want to do that.
+ fontconfig_dialog();
+
+ /* if we're here to help set up audio parameters this is where want to do that.
*/
if (!have_engine) {
new_session_dialog->hide ();
return false;
}
- }
-#ifdef GTKOSX
- /* X11 users will always have fontconfig info around, but new GTK-OSX users
- may not and it can take a while to build it. Warn them.
- */
-
- Glib::ustring fontconfig = Glib::build_filename (Glib::get_home_dir(), ".fontconfig");
-
- if (!Glib::file_test (fontconfig, Glib::FILE_TEST_EXISTS|Glib::FILE_TEST_IS_DIR)) {
- MessageDialog msg (*new_session_dialog,
- _("Welcome to Ardour.\n\n"
- "The program will take a bit longer to start up\n"
- "while the system fonts are checked.\n\n"
- "This will only be done once, and you will\n"
- "not see this message again\n"),
- true,
- Gtk::MESSAGE_INFO,
- Gtk::BUTTONS_OK);
- msg.show_all ();
- msg.present ();
- msg.run ();
+ loading_dialog->set_message (_("Starting audio engine"));
+ loading_dialog->show_all ();
+ flush_pending ();
}
-#endif
- loading_dialog->set_message (_("Starting audio engine"));
- loading_dialog->show_all ();
- flush_pending ();
-
+
if (create_engine ()) {
backend_audio_error (!have_engine, new_session_dialog);
loading_dialog->hide ();
flush_pending ();
/* audio setup page */
+ new_session_dialog->set_existing_session (false);
new_session_dialog->set_current_page (2);
- /* try again */
response = Gtk::RESPONSE_NONE;
- continue;
+ goto try_again;
}
+ loading_dialog->hide ();
have_engine = true;
/* now handle possible affirmative responses */
if (session_name.empty()) {
response = Gtk::RESPONSE_NONE;
- continue;
+ goto try_again;
}
if (session_name[0] == '/' ||
(session_name.length() > 2 && session_name[0] == '.' && session_name[1] == '/') ||
(session_name.length() > 3 && session_name[0] == '.' && session_name[1] == '.' && session_name[2] == '/')) {
- load_session (Glib::path_get_dirname (session_name), session_name);
+ if (load_session (Glib::path_get_dirname (session_name), session_name)) {
+ response = Gtk::RESPONSE_NONE;
+ goto try_again;
+ }
} else {
session_path = new_session_dialog->session_folder();
- load_session (session_path, session_name);
+ if (load_session (session_path, session_name)) {
+ response = Gtk::RESPONSE_NONE;
+ goto try_again;
+ }
}
} else if (response == Gtk::RESPONSE_OK) {
if (session_name.empty()) {
response = Gtk::RESPONSE_NONE;
- continue;
+ goto try_again;
}
-
- switch (new_session_dialog->get_current_page()) {
- case 1: /* recent session selector */
- case 2: /* audio engine control */
+
+ switch (new_session_dialog->which_page()) {
+ case NewSessionDialog::OpenPage:
+ case NewSessionDialog::EnginePage:
if (session_name[0] == '/' ||
(session_name.length() > 2 && session_name[0] == '.' && session_name[1] == '/') ||
(session_name.length() > 3 && session_name[0] == '.' && session_name[1] == '.' && session_name[2] == '/')) {
- load_session (Glib::path_get_dirname (session_name), session_name);
+
+ if (load_session (Glib::path_get_dirname (session_name), session_name)) {
+ response = Gtk::RESPONSE_NONE;
+ goto try_again;
+ }
+
} else {
session_path = new_session_dialog->session_folder();
- load_session (session_path, session_name);
+ cerr << "there\n";
+ if (load_session (session_path, session_name)) {
+ response = Gtk::RESPONSE_NONE;
+ goto try_again;
+ }
}
break;
- case 0: /* nominally the "new" session creator, but could be in use for an old session */
+ case NewSessionDialog::NewPage: /* nominally the "new" session creator, but could be in use for an old session */
+
+ cerr << "on page zero\n";
if (new_session_dialog->get_current_page() == 0 && ARDOUR_COMMAND_LINE::session_name.empty()) {
should_be_new = true;
session_path = new_session_dialog->session_folder();
}
-
+
//XXX This is needed because session constructor wants a
//non-existant path. hopefully this will be fixed at some point.
session_path = Glib::build_filename (session_path, session_name);
-
+
if (!should_be_new) {
- load_session (session_path, session_name);
+ if (load_session (session_path, session_name)) {
+ response = Gtk::RESPONSE_NONE;
+ goto try_again;
+ }
+
continue; /* leaves while() loop because response != NONE */
} else if (Glib::file_test (session_path, Glib::FileTest (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))) {
new_session_dialog->hide ();
goto_editor_window ();
flush_pending ();
- load_session (session_path, session_name);
+ if (load_session (session_path, session_name)) {
+ response = Gtk::RESPONSE_NONE;
+ goto try_again;
+ }
goto done;
break;
default:
response = RESPONSE_NONE;
new_session_dialog->reset ();
+ new_session_dialog->set_existing_session (false);
+ loading_dialog->hide ();
continue;
}
}
goto_editor_window ();
flush_pending ();
- load_session (session_path, session_name, &template_name);
+ if (load_session (session_path, session_name, template_name)) {
+ response = Gtk::RESPONSE_NONE;
+ goto try_again;
+ }
+
} else {
nphysout = (uint32_t) new_session_dialog->output_limit_count();
}
- new_session_dialog->hide ();
- goto_editor_window ();
- flush_pending ();
-
if (build_session (session_path,
session_name,
cchns,
engine->frame_rate() * 60 * 5)) {
response = Gtk::RESPONSE_NONE;
- new_session_dialog->reset ();
- continue;
+ goto try_again;
}
+
+ new_session_dialog->hide ();
+ goto_editor_window ();
+ flush_pending ();
}
break;
break;
}
}
+
+ try_again:
+ if (response == Gtk::RESPONSE_NONE) {
+ loading_dialog->hide ();
+ new_session_dialog->set_existing_session (false);
+ new_session_dialog->reset ();
+ }
} while (response == Gtk::RESPONSE_NONE);
}
int
-ARDOUR_UI::load_session (const string & path, const string & snap_name, string* mix_template)
+ARDOUR_UI::load_session (const Glib::ustring& path, const Glib::ustring& snap_name, Glib::ustring mix_template)
{
Session *new_session;
int unload_status;
/* if it already exists, we must have write access */
- if (::access (path.c_str(), F_OK) == 0 && ::access (path.c_str(), W_OK)) {
+ if (Glib::file_test (path.c_str(), Glib::FILE_TEST_EXISTS) && ::access (path.c_str(), W_OK)) {
MessageDialog msg (*editor, _("You do not have write access to this session.\n"
"This prevents the session from being loaded."));
msg.run ();
new_session = new Session (*engine, path, snap_name, mix_template);
}
+ /* this one is special */
+
+ catch (AudioEngine::PortRegistrationFailure& err) {
+
+ MessageDialog msg (err.what(),
+ true,
+ Gtk::MESSAGE_INFO,
+ Gtk::BUTTONS_OK_CANCEL);
+
+ msg.set_title (_("Loading Error"));
+ msg.set_secondary_text (_("Click the OK button to try again."));
+ msg.set_position (Gtk::WIN_POS_CENTER);
+ msg.present ();
+
+ int response = msg.run ();
+
+ msg.hide ();
+
+ switch (response) {
+ case RESPONSE_CANCEL:
+ exit (1);
+ default:
+ break;
+ }
+ goto out;
+ }
+
catch (...) {
- error << string_compose(_("Session \"%1 (snapshot %2)\" did not load successfully"), path, snap_name) << endmsg;
+
+ MessageDialog msg (string_compose(_("Session \"%1 (snapshot %2)\" did not load successfully"), path, snap_name),
+ true,
+ Gtk::MESSAGE_INFO,
+ Gtk::BUTTONS_OK_CANCEL);
+
+ msg.set_title (_("Loading Error"));
+ msg.set_secondary_text (_("Click the OK button to try again."));
+ msg.set_position (Gtk::WIN_POS_CENTER);
+ msg.present ();
+
+ int response = msg.run ();
+
+ msg.hide ();
+
+ switch (response) {
+ case RESPONSE_CANCEL:
+ exit (1);
+ default:
+ break;
+ }
goto out;
}
session->set_clean ();
}
- editor->edit_cursor_position (true);
enable_screen_updates ();
flush_pending ();
retval = 0;
}
int
-ARDOUR_UI::build_session (const string & path, const string & snap_name,
+ARDOUR_UI::build_session (const Glib::ustring& path, const Glib::ustring& snap_name,
uint32_t control_channels,
uint32_t master_channels,
AutoConnectOption input_connect,
int
ARDOUR_UI::pending_state_dialog ()
{
- ArdourDialog dialog ("pending state dialog");
+ HBox* hbox = new HBox();
+ Image* image = new Image (Stock::DIALOG_QUESTION, ICON_SIZE_DIALOG);
+ ArdourDialog dialog (_("Crash Recovery"), true);
Label message (_("\
This session appears to have been in\n\
middle of recording when ardour or\n\
Ardour can recover any captured audio for\n\
you, or it can ignore it. Please decide\n\
what you would like to do.\n"));
-
- dialog.get_vbox()->pack_start (message);
- dialog.add_button (_("Recover from crash"), RESPONSE_ACCEPT);
+ image->set_alignment(ALIGN_CENTER, ALIGN_TOP);
+ hbox->pack_start (*image, PACK_EXPAND_WIDGET, 12);
+ hbox->pack_end (message, PACK_EXPAND_PADDING, 12);
+ dialog.get_vbox()->pack_start(*hbox, PACK_EXPAND_PADDING, 6);
dialog.add_button (_("Ignore crash data"), RESPONSE_REJECT);
-
+ dialog.add_button (_("Recover from crash"), RESPONSE_ACCEPT);
+ dialog.set_default_response (RESPONSE_ACCEPT);
dialog.set_position (WIN_POS_CENTER);
message.show();
- //dialog.get_vbox()->show();
-
+ image->show();
+ hbox->show();
+
switch (dialog.run ()) {
case RESPONSE_ACCEPT:
return 1;
ARDOUR_UI::update_transport_clocks (nframes_t pos)
{
if (Config->get_primary_clock_delta_edit_cursor()) {
- primary_clock.set (pos, false, editor->edit_cursor_position(false), 'p');
+ primary_clock.set (pos, false, editor->get_preferred_edit_position(), 1);
} else {
primary_clock.set (pos, 0, true);
}
if (Config->get_secondary_clock_delta_edit_cursor()) {
- secondary_clock.set (pos, false, editor->edit_cursor_position(false), 's');
+ secondary_clock.set (pos, false, editor->get_preferred_edit_position(), 2);
} else {
secondary_clock.set (pos);
}
}
}
-void
-ARDOUR_UI::disable_all_plugins ()
-{
- if (!session) {
- return;
- }
-
- // session->begin_reversible_command (_("Disable all plugins"));
-
- boost::shared_ptr<Session::RouteList> routes = session->get_routes ();
-
- for (Session::RouteList::iterator i = routes->begin(); i != routes->end(); ++i) {
- // XMLNode& before = (*i)->get_redirect_state ();
- // session->add_command (new MementoCommand<Route>(**i, &before, 0));
- (*i)->disable_plugins ();
- // XMLNode& after = (*i)->get_redirect_state ();
- // session->add_command (new MementoCommand<Route>(**i, 0, &after));
-
- }
-
- // session->commit_reversible_command ();
-}
-
-void
-ARDOUR_UI::ab_all_plugins ()
-{
- if (!session) {
- return;
- }
-
- boost::shared_ptr<Session::RouteList> routes = session->get_routes ();
-
- for (Session::RouteList::iterator i = routes->begin(); i != routes->end(); ++i) {
- (*i)->ab_plugins (ab_direction);
- }
-
- ab_direction = !ab_direction;
-}