X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=gtk2_ardour%2Fardour_ui.cc;h=0a4a4782d2b4f8e426f7f6aabef6e0823bf0f0d8;hb=2a5bfa6dcb6dc9b7f30887ceeb019d3b2efd6c33;hp=59196c75abcdec151da80efbfa5e697c56ff0349;hpb=af90dc2bae772cd63d6078e24fb5ead6832bb7eb;p=ardour.git diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 59196c75ab..0a4a4782d2 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -60,26 +60,18 @@ #include "midi++/manager.h" #include "ardour/ardour.h" -#include "ardour/callback.h" +#include "ardour/audioengine.h" +#include "ardour/audiofilesource.h" +#include "ardour/diskstream.h" +#include "ardour/filename_extensions.h" +#include "ardour/port.h" +#include "ardour/process_thread.h" #include "ardour/profile.h" -#include "ardour/plugin_manager.h" +#include "ardour/recent_sessions.h" #include "ardour/session_directory.h" #include "ardour/session_route.h" #include "ardour/session_state_utils.h" #include "ardour/session_utils.h" -#include "ardour/port.h" -#include "ardour/audioengine.h" -#include "ardour/playlist.h" -#include "ardour/utils.h" -#include "ardour/audio_diskstream.h" -#include "ardour/audiofilesource.h" -#include "ardour/recent_sessions.h" -#include "ardour/port.h" -#include "ardour/audio_track.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; @@ -97,6 +89,7 @@ typedef uint64_t microseconds_t; #include "gui_thread.h" #include "keyboard.h" #include "location_ui.h" +#include "main_clock.h" #include "missing_file_dialog.h" #include "missing_plugin_dialog.h" #include "mixer_ui.h" @@ -121,6 +114,7 @@ using namespace ARDOUR; using namespace PBD; using namespace Gtkmm2ext; using namespace Gtk; +using namespace std; ARDOUR_UI *ARDOUR_UI::theArdourUI = 0; UIConfiguration *ARDOUR_UI::ui_config = 0; @@ -130,15 +124,13 @@ sigc::signal ARDOUR_UI::RapidScreenUpdate; sigc::signal ARDOUR_UI::SuperRapidScreenUpdate; sigc::signal ARDOUR_UI::Clock; -bool could_be_a_valid_path (const string& path); - ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[]) : Gtkmm2ext::UI (PROGRAM_NAME, argcp, argvp) , gui_object_state (new GUIObjectState) - , 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)) + , primary_clock (new MainClock (X_("primary"), false, X_("transport"), true, true, true, false, true)) + , secondary_clock (new MainClock (X_("secondary"), false, X_("secondary"), true, true, false, false, true)) /* big clock */ @@ -168,20 +160,8 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[]) , _feedback_exists (false) { - using namespace Gtk::Menu_Helpers; - Gtkmm2ext::init(); - -#ifdef TOP_MENUBAR - // _auto_display_errors = false; - /* - * This was commented out as it wasn't defined - * in A3 IIRC. If this is not needed it should - * be completely removed. - */ -#endif - about = 0; splash = 0; _startup = 0; @@ -205,7 +185,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[]) big_clock_resize_in_progress = false; session_selector_window = 0; last_key_press_time = 0; - _will_create_new_session_automatically = false; add_route_dialog = 0; route_params = 0; bundle_manager = 0; @@ -221,6 +200,9 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[]) original_big_clock_height = -1; original_big_clock_font_size = 0; + roll_button.set_elements (ArdourButton::Element (ArdourButton::Body|ArdourButton::Text)); + play_selection_button.set_elements (ArdourButton::Element (ArdourButton::Body|ArdourButton::Text)); + roll_button.set_controllable (roll_controllable); stop_button.set_controllable (stop_controllable); goto_start_button.set_controllable (goto_start_controllable); @@ -236,7 +218,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[]) 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); @@ -251,7 +232,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[]) /* handle dialog requests */ - ARDOUR::Session::Dialog.connect (forever_connections, MISSING_INVALIDATOR, ui_bind (&ARDOUR_UI::session_dialog, this, _1), gui_context()); + ARDOUR::Session::Dialog.connect (forever_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::session_dialog, this, _1), gui_context()); /* handle pending state with a dialog (PROBLEM: needs to return a value and thus cannot be x-thread) */ @@ -263,12 +244,12 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[]) /* handle requests to quit (coming from JACK session) */ - ARDOUR::Session::Quit.connect (forever_connections, MISSING_INVALIDATOR, ui_bind (&ARDOUR_UI::finish, this), gui_context ()); + ARDOUR::Session::Quit.connect (forever_connections, MISSING_INVALIDATOR, boost::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 ()); + ARDOUR::Session::FeedbackDetected.connect (forever_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::feedback_detected, this), gui_context ()); + ARDOUR::Session::SuccessfulGraphSort.connect (forever_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::successful_graph_sort, this), gui_context ()); /* handle requests to deal with missing files */ @@ -346,7 +327,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[]) /** @return true if a session was chosen and `apply' clicked, otherwise false if `cancel' was clicked */ bool -ARDOUR_UI::run_startup (bool should_be_new, string load_template) +ARDOUR_UI::run_startup (bool should_be_new, std::string load_template) { delete _startup; _startup = new ArdourStartup (); @@ -359,7 +340,7 @@ ARDOUR_UI::run_startup (bool should_be_new, string load_template) _startup->set_new_only (should_be_new); if (!load_template.empty()) { - _startup->set_load_template( load_template ); + _startup->set_load_template (load_template); } _startup->present (); @@ -396,7 +377,7 @@ ARDOUR_UI::create_engine () engine->Stopped.connect (forever_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::engine_stopped, this), gui_context()); engine->Running.connect (forever_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::engine_running, this), gui_context()); - engine->SampleRateChanged.connect (forever_connections, MISSING_INVALIDATOR, ui_bind (&ARDOUR_UI::update_sample_rate, this, _1), gui_context()); + engine->SampleRateChanged.connect (forever_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::update_sample_rate, this, _1), gui_context()); engine->Halted.connect_same_thread (forever_connections, boost::bind (&ARDOUR_UI::engine_halted, this, _1, false)); @@ -482,7 +463,7 @@ ARDOUR_UI::post_engine () update_cpu_load (); update_sample_rate (engine->frame_rate()); - Config->ParameterChanged.connect (forever_connections, MISSING_INVALIDATOR, ui_bind (&ARDOUR_UI::parameter_changed, this, _1), gui_context()); + Config->ParameterChanged.connect (forever_connections, MISSING_INVALIDATOR, boost::bind (&ARDOUR_UI::parameter_changed, this, _1), gui_context()); boost::function pc (boost::bind (&ARDOUR_UI::parameter_changed, this, _1)); Config->map_parameters (pc); @@ -529,7 +510,6 @@ ARDOUR_UI::configure_timeout () return true; } else { have_configure_timeout = false; - cerr << "config event-driven save\n"; save_ardour_state (); return false; } @@ -577,7 +557,6 @@ ARDOUR_UI::set_transport_controllable_state (const XMLNode& node) if ((prop = node.property ("shuttle")) != 0) { shuttle_box->controllable()->set_id (prop->value()); } - } XMLNode& @@ -649,59 +628,6 @@ ARDOUR_UI::update_autosave () } } -void -ARDOUR_UI::backend_audio_error (bool we_set_params, Gtk::Window* toplevel) -{ - string title; - if (we_set_params) { - title = string_compose (_("%1 could not start JACK"), PROGRAM_NAME); - } else { - title = string_compose (_("%1 could not connect to JACK."), PROGRAM_NAME); - } - - MessageDialog win (title, - false, - Gtk::MESSAGE_INFO, - Gtk::BUTTONS_NONE); - - if (we_set_params) { - win.set_secondary_text(_("There are several possible reasons:\n\ -\n\ -1) You requested audio parameters that are not supported..\n\ -2) JACK is running as another user.\n\ -\n\ -Please consider the possibilities, and perhaps try different parameters.")); - } else { - win.set_secondary_text(_("There are several possible reasons:\n\ -\n\ -1) JACK is not running.\n\ -2) JACK is running as another user, perhaps root.\n\ -3) There is already another client called \"ardour\".\n\ -\n\ -Please consider the possibilities, and perhaps (re)start JACK.")); - } - - if (toplevel) { - win.set_transient_for (*toplevel); - } - - if (we_set_params) { - win.add_button (Stock::OK, RESPONSE_CLOSE); - } else { - win.add_button (Stock::QUIT, RESPONSE_CLOSE); - } - - win.set_default_response (RESPONSE_CLOSE); - - win.show_all (); - win.set_position (Gtk::WIN_POS_CENTER); - pop_back_splash (win); - - /* we just don't care about the result, but we want to block */ - - win.run (); -} - void ARDOUR_UI::startup () { @@ -848,10 +774,10 @@ ARDOUR_UI::finish() if (save_state_canfail ("")) { /* failed - don't quit */ MessageDialog msg (*editor, - _("\ -Ardour was unable to save your session.\n\n\ + string_compose (_("\ +%1 was unable to save your session.\n\n\ If you still wish to quit, please use the\n\n\ -\"Just quit\" option.")); +\"Just quit\" option."), PROGRAM_NAME)); pop_back_splash(msg); msg.run (); return; @@ -991,7 +917,7 @@ ARDOUR_UI::update_sample_rate (framecnt_t) if (!engine->connected()) { - snprintf (buf, sizeof (buf), _("disconnected")); + snprintf (buf, sizeof (buf), "%s", _("disconnected")); } else { @@ -1124,16 +1050,21 @@ ARDOUR_UI::update_disk_space() return; } - framecnt_t frames = _session->available_capture_duration(); + boost::optional opt_frames = _session->available_capture_duration(); char buf[64]; framecnt_t fr = _session->frame_rate(); - if (frames == max_framecnt) { - snprintf (buf, sizeof (buf), _("Disk: 24hrs+")); + if (!opt_frames) { + /* Available space is unknown */ + snprintf (buf, sizeof (buf), "%s", _("Disk: Unknown")); + } else if (opt_frames.get_value_or (0) == max_framecnt) { + snprintf (buf, sizeof (buf), "%s", _("Disk: 24hrs+")); } else { rec_enabled_streams = 0; _session->foreach_route (this, &ARDOUR_UI::count_recenabled_streams); + framecnt_t frames = opt_frames.get_value_or (0); + if (rec_enabled_streams) { frames /= rec_enabled_streams; } @@ -1145,7 +1076,7 @@ ARDOUR_UI::update_disk_space() hrs = frames / (fr * 3600); if (hrs > 24) { - snprintf (buf, sizeof (buf), _("Disk: >24 hrs")); + snprintf (buf, sizeof (buf), "%s", _("Disk: >24 hrs")); } else { frames -= hrs * fr * 3600; mins = frames / (fr * 60); @@ -1164,15 +1095,6 @@ ARDOUR_UI::update_disk_space() } disk_space_label.set_markup (buf); - - // An attempt to make the disk space label flash red when space has run out. - - if (frames < fr * 60 * 5) { - /* disk_space_box.style ("disk_space_label_empty"); */ - } else { - /* disk_space_box.style ("disk_space_label"); */ - } - } gint @@ -1191,13 +1113,6 @@ ARDOUR_UI::update_wall_clock () return TRUE; } -gint -ARDOUR_UI::session_menu (GdkEventButton */*ev*/) -{ - session_popup_menu->popup (0, 0); - return TRUE; -} - void ARDOUR_UI::redisplay_recent_sessions () { @@ -1214,7 +1129,7 @@ ARDOUR_UI::redisplay_recent_sessions () recent_session_display.set_model (recent_session_model); return; } - // + // sort them alphabetically sort (rs.begin(), rs.end(), cmp); @@ -1233,18 +1148,17 @@ ARDOUR_UI::redisplay_recent_sessions () vector* states; vector item; - string fullpath = (*i).to_string(); + string fullpath = i->to_string(); /* remove any trailing / */ - if (fullpath[fullpath.length()-1] == '/') { - fullpath = fullpath.substr (0, fullpath.length()-1); + if (fullpath[fullpath.length() - 1] == '/') { + fullpath = fullpath.substr (0, fullpath.length() - 1); } /* check whether session still exists */ if (!Glib::file_test(fullpath.c_str(), Glib::FILE_TEST_EXISTS)) { /* session doesn't exist */ - cerr << "skipping non-existent session " << fullpath << endl; continue; } @@ -1278,6 +1192,7 @@ ARDOUR_UI::redisplay_recent_sessions () } } + recent_session_display.set_tooltip_column(1); // recent_session_columns.fullpath recent_session_display.set_model (recent_session_model); } @@ -1307,7 +1222,6 @@ ARDOUR_UI::build_session_selector () recent_session_display.show(); scroller->show(); - //session_selector_window->get_vbox()->show(); } void @@ -1407,6 +1321,17 @@ ARDOUR_UI::open_session () open_session_selector->add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); open_session_selector->add_button (Gtk::Stock::OPEN, Gtk::RESPONSE_ACCEPT); open_session_selector->set_default_response(Gtk::RESPONSE_ACCEPT); + + if (_session) { + string session_parent_dir = Glib::path_get_dirname(_session->path()); + string::size_type last_dir_sep = session_parent_dir.rfind(G_DIR_SEPARATOR); + session_parent_dir = session_parent_dir.substr(0, last_dir_sep); + open_session_selector->set_current_folder(session_parent_dir); + } else { + open_session_selector->set_current_folder(Config->get_default_session_parent_dir()); + } + + open_session_selector->add_shortcut_folder (Config->get_default_session_parent_dir()); FileFilter session_filter; session_filter.add_pattern ("*.ardour"); @@ -1463,11 +1388,7 @@ ARDOUR_UI::session_add_midi_route (bool disk, RouteGroup* route_group, uint32_t } } - } /*else { - if ((route = _session->new_midi_route ()) == 0) { - error << _("could not create new midi bus") << endmsg; - } - }*/ + } } catch (...) { @@ -1538,25 +1459,6 @@ restart JACK with more ports."), PROGRAM_NAME)); } } -void -ARDOUR_UI::do_transport_locate (framepos_t new_position, bool with_roll) -{ - framecnt_t _preroll = 0; - - if (_session) { - // XXX CONFIG_CHANGE FIX - requires AnyTime handling - // _preroll = _session->convert_to_frames_at (new_position, Config->get_preroll()); - - if (new_position > _preroll) { - new_position -= _preroll; - } else { - new_position = 0; - } - - _session->request_locate (new_position, with_roll); - } -} - void ARDOUR_UI::transport_goto_start () { @@ -1649,22 +1551,6 @@ ARDOUR_UI::transport_stop () _session->request_stop (false, true); } -void -ARDOUR_UI::transport_stop_and_forget_capture () -{ - if (_session) { - _session->request_stop (true, true); - } -} - -void -ARDOUR_UI::remove_last_capture() -{ - if (editor) { - editor->remove_last_capture(); - } -} - void ARDOUR_UI::transport_record (bool roll) { @@ -1694,7 +1580,6 @@ ARDOUR_UI::transport_record (bool roll) _session->disable_record (false, true); } } - //cerr << "ARDOUR_UI::transport_record () called roll = " << roll << " _session->record_status() = " << _session->record_status() << endl; } void @@ -1805,7 +1690,9 @@ ARDOUR_UI::toggle_roll (bool with_abort, bool roll_out_of_bounded_mode) void ARDOUR_UI::toggle_session_auto_loop () { - if (!_session) { + Location * looploc = _session->locations()->auto_loop_location(); + + if (!_session || !looploc) { return; } @@ -1813,24 +1700,18 @@ ARDOUR_UI::toggle_session_auto_loop () if (_session->transport_rolling()) { - Location * looploc = _session->locations()->auto_loop_location(); - - if (looploc) { - _session->request_locate (looploc->start(), true); - _session->request_play_loop (false); - } + _session->request_locate (looploc->start(), true); + _session->request_play_loop (false); } else { _session->request_play_loop (false); } } else { - - Location * looploc = _session->locations()->auto_loop_location(); - - if (looploc) { - _session->request_play_loop (true); - } + _session->request_play_loop (true); } + + //show the loop markers + looploc->set_hidden (false, this); } void @@ -1873,35 +1754,34 @@ ARDOUR_UI::transport_rewind (int option) void ARDOUR_UI::transport_forward (int option) { - float current_transport_speed; - - if (_session) { - current_transport_speed = _session->transport_speed(); - - if (current_transport_speed <= 0.0f) { - switch (option) { - case 0: - _session->request_transport_speed (1.0f); - break; - case 1: - _session->request_transport_speed (4.0f); - break; - case -1: - _session->request_transport_speed (0.5f); - break; - } - } else { - /* speed up */ - _session->request_transport_speed (current_transport_speed * 1.5f); + if (!_session) { + return; + } + + float current_transport_speed = _session->transport_speed(); + + if (current_transport_speed <= 0.0f) { + switch (option) { + case 0: + _session->request_transport_speed (1.0f); + break; + case 1: + _session->request_transport_speed (4.0f); + break; + case -1: + _session->request_transport_speed (0.5f); + break; } - + } else { + /* speed up */ + _session->request_transport_speed (current_transport_speed * 1.5f); } } void ARDOUR_UI::toggle_record_enable (uint32_t rid) { - if (_session == 0) { + if (!_session) { return; } @@ -1915,9 +1795,6 @@ ARDOUR_UI::toggle_record_enable (uint32_t rid) t->set_record_enabled (!t->record_enabled(), this); } } - if (_session == 0) { - return; - } } void @@ -1927,7 +1804,7 @@ ARDOUR_UI::map_transport_state () auto_loop_button.unset_active_state (); play_selection_button.unset_active_state (); roll_button.unset_active_state (); - stop_button.set_active_state (Gtkmm2ext::Active); + stop_button.set_active_state (Gtkmm2ext::ExplicitActive); return; } @@ -1941,37 +1818,37 @@ ARDOUR_UI::map_transport_state () if (_session->get_play_range()) { - play_selection_button.set_active_state (Gtkmm2ext::Active); + play_selection_button.set_active_state (Gtkmm2ext::ExplicitActive); roll_button.unset_active_state (); auto_loop_button.unset_active_state (); } else if (_session->get_play_loop ()) { - auto_loop_button.set_active_state (Gtkmm2ext::Active); - play_selection_button.unset_active_state (); - roll_button.unset_active_state (); + auto_loop_button.set_active (true); + play_selection_button.set_active (false); + roll_button.set_active (false); } else { - roll_button.set_active_state (Gtkmm2ext::Active); - play_selection_button.unset_active_state (); - auto_loop_button.unset_active_state (); + roll_button.set_active (true); + play_selection_button.set_active (false); + auto_loop_button.set_active (false); } if (Config->get_always_play_range()) { /* light up both roll and play-selection if they are joined */ - roll_button.set_active_state (Gtkmm2ext::Active); - play_selection_button.set_active_state (Gtkmm2ext::Active); + roll_button.set_active (true); + play_selection_button.set_active (true); } - stop_button.unset_active_state (); + stop_button.set_active (false); } else { - stop_button.set_active_state (Gtkmm2ext::Active); - roll_button.unset_active_state (); - play_selection_button.unset_active_state (); - auto_loop_button.unset_active_state (); + stop_button.set_active (true); + roll_button.set_active (false); + play_selection_button.set_active (false); + auto_loop_button.set_active (false); update_disk_space (); } } @@ -2096,12 +1973,6 @@ ARDOUR_UI::do_engine_start () return 0; } -void -ARDOUR_UI::setup_theme () -{ - theme_manager->setup_theme(); -} - void ARDOUR_UI::update_clocks () { @@ -2122,21 +1993,8 @@ ARDOUR_UI::stop_clocking () clock_signal_connection.disconnect (); } -void -ARDOUR_UI::toggle_clocking () -{ -#if 0 - if (clock_button.get_active()) { - start_clocking (); - } else { - stop_clocking (); - } -#endif -} - gint ARDOUR_UI::_blink (void *arg) - { ((ARDOUR_UI *) arg)->blink (); return TRUE; @@ -2382,12 +2240,12 @@ ARDOUR_UI::transport_rec_enable_blink (bool onoff) if (r == Session::Enabled || (r == Session::Recording && !h)) { if (onoff) { - rec_button.set_active_state (Active); + rec_button.set_active_state (Gtkmm2ext::ExplicitActive); } else { - rec_button.set_active_state (Mid); + rec_button.set_active_state (Gtkmm2ext::ImplicitActive); } } else if (r == Session::Recording && h) { - rec_button.set_active_state (Mid); + rec_button.set_active_state (Gtkmm2ext::ExplicitActive); } else { rec_button.unset_active_state (); } @@ -2528,36 +2386,12 @@ ARDOUR_UI::idle_load (const std::string& path) /* /path/to/foo/foo.ardour => /path/to/foo, foo */ load_session (Glib::path_get_dirname (path), basename_nosuffix (path)); } - } else { + } else { ARDOUR_COMMAND_LINE::session_name = path; - - /* - * new_session_dialog doens't exist in A3 - * Try to remove all references to it to - * see if it will compile. NOTE: this will - * likely cause a runtime issue is my somewhat - * uneducated guess. - */ - - //if (new_session_dialog) { - - - /* make it break out of Dialog::run() and - start again. - */ - - //new_session_dialog->response (1); - //} } } -void -ARDOUR_UI::end_loading_messages () -{ - // hide_splash (); -} - void ARDOUR_UI::loading_message (const std::string& msg) { @@ -2692,25 +2526,23 @@ ARDOUR_UI::get_session_parameters (bool quit_on_cancel, bool should_be_new, stri } else { if (!likely_new) { - MessageDialog msg (string_compose (_("There is no existing session at \"%1\""), session_path)); - msg.run (); - ARDOUR_COMMAND_LINE::session_name = ""; // cancel that - continue; - } + if (_startup) { + pop_back_splash (*_startup); + } else { + hide_splash (); + } - if (session_name.find ('/') != std::string::npos) { - MessageDialog msg (*_startup, - _("To ensure compatibility with various systems\n" - "session names may not contain a '/' character")); + MessageDialog msg (string_compose (_("There is no existing session at \"%1\""), session_path)); msg.run (); ARDOUR_COMMAND_LINE::session_name = ""; // cancel that continue; } - if (session_name.find ('\\') != std::string::npos) { - MessageDialog msg (*_startup, - _("To ensure compatibility with various systems\n" - "session names may not contain a '\\' character")); + char illegal = Session::session_name_is_legal(session_name); + if (illegal) { + pop_back_splash (*_startup); + MessageDialog msg (*_startup, string_compose(_("To ensure compatibility with various systems\n" + "session names may not contain a '%1' character"), illegal)); msg.run (); ARDOUR_COMMAND_LINE::session_name = ""; // cancel that continue; @@ -2962,7 +2794,7 @@ ARDOUR_UI::show_about () { if (about == 0) { about = new About; - about->signal_response().connect(sigc::mem_fun (*this, &ARDOUR_UI::about_signal_response) ); + about->signal_response().connect (sigc::mem_fun (*this, &ARDOUR_UI::about_signal_response)); } about->set_transient_for(*editor); @@ -3003,7 +2835,6 @@ ARDOUR_UI::show_splash () try { splash = new Splash; } catch (...) { - cerr << "Splash could not be created\n"; return; } } @@ -3018,9 +2849,8 @@ ARDOUR_UI::show_splash () void ARDOUR_UI::hide_splash () { - if (splash) { - splash->hide(); - } + delete splash; + splash = 0; } void @@ -3108,9 +2938,9 @@ require some unused files to continue to exist.")); } if (removed > 1) { - txt.set_text (string_compose (plural_msg, removed, dead_directory, space_adjusted, bprefix)); + txt.set_text (string_compose (plural_msg, removed, dead_directory, space_adjusted, bprefix, PROGRAM_NAME)); } else { - txt.set_text (string_compose (singular_msg, removed, dead_directory, space_adjusted, bprefix)); + txt.set_text (string_compose (singular_msg, removed, dead_directory, space_adjusted, bprefix, PROGRAM_NAME)); } dhbox.pack_start (*dimage, true, false, 5); @@ -3210,7 +3040,7 @@ Clean-up will move all unused files to a \"dead\" location.")); The following %1 files were not in use and \n\ have been moved to:\n\n\ %2\n\n\ -After a restart of Ardour,\n\n\ +After a restart of %5,\n\n\ Session -> Clean-up -> Flush Wastebasket\n\n\ will release an additional\n\ %3 %4bytes of disk space.\n"), @@ -3218,7 +3048,7 @@ will release an additional\n\ The following file was not in use and \n\ has been moved to:\n \ %2\n\n\ -After a restart of Ardour,\n\n\ +After a restart of %5,\n\n\ Session -> Clean-up -> Flush Wastebasket\n\n\ will release an additional\n\ %3 %4bytes of disk space.\n" @@ -3475,14 +3305,14 @@ ARDOUR_UI::pending_state_dialog () HBox* hbox = new HBox(); Image* image = new Image (Stock::DIALOG_QUESTION, ICON_SIZE_DIALOG); ArdourDialog dialog (_("Crash Recovery"), true); - Label message (_("\ + Label message (string_compose (_("\ This session appears to have been in\n\ middle of recording when ardour or\n\ the computer was shutdown.\n\ \n\ -Ardour can recover any captured audio for\n\ +%1 can recover any captured audio for\n\ you, or it can ignore it. Please decide\n\ -what you would like to do.\n")); +what you would like to do.\n"), PROGRAM_NAME)); image->set_alignment(ALIGN_CENTER, ALIGN_TOP); hbox->pack_start (*image, PACK_EXPAND_WIDGET, 12); hbox->pack_end (message, PACK_EXPAND_PADDING, 12); @@ -3510,9 +3340,9 @@ ARDOUR_UI::sr_mismatch_dialog (framecnt_t desired, framecnt_t actual) Image* image = new Image (Stock::DIALOG_QUESTION, ICON_SIZE_DIALOG); ArdourDialog dialog (_("Sample Rate Mismatch"), true); Label message (string_compose (_("\ -This session was created with a sample rate of %1 Hz\n\ -\n\ -The audioengine is currently running at %2 Hz\n"), desired, actual)); +This session was created with a sample rate of %1 Hz, but\n\ +%2 is currently running at %3 Hz. If you load this session,\n\ +audio may be played at the wrong sample rate.\n"), desired, PROGRAM_NAME, actual)); image->set_alignment(ALIGN_CENTER, ALIGN_TOP); hbox->pack_start (*image, PACK_EXPAND_WIDGET, 12); @@ -3539,7 +3369,7 @@ void ARDOUR_UI::disconnect_from_jack () { if (engine) { - if( engine->disconnect_from_jack ()) { + if (engine->disconnect_from_jack ()) { MessageDialog msg (*editor, _("Could not disconnect from JACK")); msg.run (); } @@ -3598,7 +3428,7 @@ ARDOUR_UI::step_edit_status_change (bool yn) // we make insensitive if (yn) { - rec_button.set_active_state (Mid); + rec_button.set_active_state (Gtkmm2ext::ImplicitActive); rec_button.set_sensitive (false); } else { rec_button.unset_active_state ();; @@ -3740,11 +3570,10 @@ ARDOUR_UI::TransportControllable::get_value (void) const void ARDOUR_UI::setup_profile () { - if (gdk_screen_width() < 1200) { + if (gdk_screen_width() < 1200 || getenv ("ARDOUR_NARROW_SCREEN")) { Profile->set_small_screen (); } - if (getenv ("ARDOUR_SAE")) { Profile->set_sae (); Profile->set_single_package (); @@ -3766,11 +3595,11 @@ ARDOUR_UI::toggle_translations () bool already_enabled = !ARDOUR::translations_are_disabled (); if (ract->get_active ()) { -/* we don't care about errors */ + /* we don't care about errors */ int fd = ::open (i18n_killer.c_str(), O_RDONLY|O_CREAT, 0644); close (fd); } else { -/* we don't care about errors */ + /* we don't care about errors */ unlink (i18n_killer.c_str()); }