ui_config = new UIConfiguration();
+ ui_config->ParameterChanged.connect (sigc::mem_fun (*this, &ARDOUR_UI::parameter_changed));
+ boost::function<void (string)> pc (boost::bind (&ARDOUR_UI::parameter_changed, this, _1));
+ ui_config->map_parameters (pc);
+
editor = 0;
mixer = 0;
meterbridge = 0;
(void) theme_manager.get (true);
- 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 ();
msgstr = string_compose (_("The audio backend was shutdown because:\n\n%1"), reason);
} else {
msgstr = string_compose (_("\
-`The audio backend has either been shutdown or it\n\
+The audio backend has either been shutdown or it\n\
disconnected %1 because %1\n\
was not fast enough. Try to restart\n\
the audio backend and save the session."), PROGRAM_NAME);
ARDOUR_UI::~ARDOUR_UI ()
{
+ if (ui_config->dirty()) {
+ ui_config->save_state();
+ }
+
delete keyboard;
delete editor;
delete mixer;
#endif
}
-void
-ARDOUR_UI::startup ()
+int
+ARDOUR_UI::starting ()
{
Application* app = Application::instance ();
char *nsm_url;
+ bool brand_new_user = ArdourStartup::required ();
app->ShouldQuit.connect (sigc::mem_fun (*this, &ARDOUR_UI::queue_finish));
app->ShouldLoad.connect (sigc::mem_fun (*this, &ARDOUR_UI::idle_load));
}
} else {
-
- if (ArdourStartup::required()) {
+
+ if (brand_new_user) {
ArdourStartup s;
s.present ();
main().run();
s.hide ();
switch (s.response ()) {
- case Gtk::RESPONSE_REJECT:
- exit (1);
- default:
+ case Gtk::RESPONSE_OK:
break;
+ default:
+ return -1;
}
}
* audio backend end up.
*/
- audio_midi_setup.get (true);
+ try {
+ audio_midi_setup.get (true);
+ } catch (...) {
+ return -1;
+ }
/* go get a session */
- if (get_session_parameters (true, ARDOUR_COMMAND_LINE::new_session, ARDOUR_COMMAND_LINE::load_template)) {
- exit (1);
+ const bool new_session_required = (ARDOUR_COMMAND_LINE::new_session || brand_new_user);
+
+ if (get_session_parameters (false, new_session_required, ARDOUR_COMMAND_LINE::load_template)) {
+ return -1;
}
}
_status_bar_visibility.update ();
BootMessage (string_compose (_("%1 is ready for use"), PROGRAM_NAME));
+ return 0;
}
void
template_name = load_template;
}
+ session_name = basename_nosuffix (ARDOUR_COMMAND_LINE::session_name);
+ session_path = ARDOUR_COMMAND_LINE::session_name;
+
+ if (!session_path.empty()) {
+ if (Glib::file_test (session_path.c_str(), Glib::FILE_TEST_EXISTS)) {
+ if (Glib::file_test (session_path.c_str(), Glib::FILE_TEST_IS_REGULAR)) {
+ /* session/snapshot file, change path to be dir */
+ session_path = Glib::path_get_dirname (session_path);
+ }
+ }
+ }
+
SessionDialog session_dialog (should_be_new, session_name, session_path, load_template, cancel_not_quit);
while (ret != 0) {
} else {
session_path = "";
session_name = "";
+ session_dialog.clear_given ();
}
-
+
if (should_be_new || session_name.empty()) {
/* need the dialog to get info from user */
-
+
+ cerr << "run dialog\n";
+
switch (session_dialog.run()) {
case RESPONSE_ACCEPT:
break;
should_be_new = false;
session_name = session_dialog.session_name (likely_new);
-
+ session_path = session_dialog.session_folder ();
+
if (nsm) {
likely_new = true;
}
if (Glib::file_test (session_path, Glib::FileTest (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))) {
+
if (likely_new && !nsm) {
std::string existing = Glib::build_filename (session_path, session_name);
}
char illegal = Session::session_name_is_legal(session_name);
+
if (illegal) {
pop_back_splash (session_dialog);
MessageDialog msg (session_dialog, string_compose(_("To ensure compatibility with various systems\n"
- "session names may not contain a '%1' character"), illegal));
+ "session names may not contain a '%1' character"), illegal));
msg.run ();
ARDOUR_COMMAND_LINE::session_name = ""; // cancel that
continue;
if (likely_new && template_name.empty()) {
- cerr << "building a session from dialog\n";
-
ret = build_session_from_dialog (session_dialog, session_path, session_name);
} else {
_session->save_state (ARDOUR_COMMAND_LINE::immediate_save, false);
exit (1);
}
+
+ /* clear this to avoid endless attempts to load the
+ same session.
+ */
+
+ ARDOUR_COMMAND_LINE::session_name = "";
}
}
}
}
+ if (!new_session->writable()) {
+ MessageDialog msg (_("This session has been opened in read-only mode.\n\nYou will not be able to record or save."),
+ true,
+ Gtk::MESSAGE_INFO,
+ BUTTONS_OK);
+
+ msg.set_keep_above (true);
+ msg.set_title (_("Read-only Session"));
+ msg.set_position (Gtk::WIN_POS_CENTER);
+ pop_back_splash (msg);
+ msg.present ();
+ (void) msg.run ();
+ msg.hide ();
+ }
+
+
/* Now the session been created, add the transport controls */
new_session->add_controllable(roll_controllable);
new_session->add_controllable(stop_controllable);
/* drop connection to AudioEngine::Halted so that we don't act
* as if the engine unexpectedly shut down
*/
+
halt_connection.disconnect ();
if (AudioEngine::instance()->stop ()) {
ARDOUR_UI::reconnect_to_engine ()
{
if (AudioEngine::instance()->start ()) {
- MessageDialog msg (*editor, _("Could not reconnect to the Audio/MIDI engine"));
- msg.run ();
+ if (editor) {
+ MessageDialog msg (*editor, _("Could not reconnect to the Audio/MIDI engine"));
+ msg.run ();
+ } else {
+ MessageDialog msg (_("Could not reconnect to the Audio/MIDI engine"));
+ msg.run ();
+ }
return -1;
}
int
ARDOUR_UI::do_audio_midi_setup (uint32_t desired_sample_rate)
{
- cerr << "Do AMS\n";
-
audio_midi_setup->set_desired_sample_rate (desired_sample_rate);
+ audio_midi_setup->set_position (WIN_POS_CENTER);
switch (audio_midi_setup->run()) {
case Gtk::RESPONSE_OK:
return -1;
}
}
+
+