X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fstartup.cc;h=9b58143746f0d4cd51834959d342da6cea12dd5f;hb=d0227fe5b7c30271cd2950a71d429cf03b0db2db;hp=1e8276a4fcbfa684e21a0acb607d0c4e9245d192;hpb=035de2a367acd7ee27c3dbfba2f6c71f3c137eb8;p=ardour.git diff --git a/gtk2_ardour/startup.cc b/gtk2_ardour/startup.cc index 1e8276a4fc..9b58143746 100644 --- a/gtk2_ardour/startup.cc +++ b/gtk2_ardour/startup.cc @@ -17,6 +17,10 @@ */ +#ifdef WAF_BUILD +#include "gtk2ardour-config.h" +#endif + #include #include @@ -27,6 +31,7 @@ #include "pbd/file_utils.h" #include "pbd/filesystem.h" #include "pbd/replace_all.h" +#include "pbd/whitespace.h" #include "ardour/filesystem_paths.h" #include "ardour/recent_sessions.h" @@ -38,6 +43,7 @@ #include "opts.h" #include "engine_dialog.h" #include "i18n.h" +#include "utils.h" using namespace std; using namespace Gtk; @@ -63,7 +69,6 @@ ArdourStartup::ArdourStartup () , monitor_via_hardware_button (_("Use an external mixer or the hardware mixer of your audio interface.\n\ Ardour will play NO role in monitoring")) , monitor_via_ardour_button (string_compose (_("Ask %1 to playback material as it is being recorded"), PROGRAM_NAME)) - , _have_setup_existing_session_page (false) , new_folder_chooser (FILE_CHOOSER_ACTION_SELECT_FOLDER) , more_new_session_options_button (_("I'd like more options for this session")) , _output_limit_count_adj (1, 0, 100, 1, 10, 0) @@ -93,17 +98,7 @@ Ardour will play NO role in monitoring")) set_position (WIN_POS_CENTER); set_border_width (12); - sys::path icon_file; - - if (!find_file_in_search_path (ardour_search_path() + system_data_search_path().add_subdirectory_to_paths("icons"), "ardour_icon_48px.png", icon_file)) { - throw failed_constructor(); - } - - try { - icon_pixbuf = Gdk::Pixbuf::create_from_file (icon_file.to_string()); - } - - catch (...) { + if ((icon_pixbuf = ::get_icon ("ardour_icon_48px")) == 0) { throw failed_constructor(); } @@ -161,17 +156,18 @@ ArdourStartup::set_new_only (bool yn) } void -ArdourStartup::set_load_template( string load_template ) +ArdourStartup::set_load_template (string load_template) { - use_template_button.set_active( false ); - load_template_override = load_template; + use_template_button.set_active (false); + load_template_override = load_template; } bool ArdourStartup::use_session_template () { - if (!load_template_override.empty()) - return true; + if (!load_template_override.empty()) { + return true; + } if (use_template_button.get_active()) { return template_chooser.get_active_row_number() > 0; @@ -180,16 +176,16 @@ ArdourStartup::use_session_template () } } -Glib::ustring +std::string ArdourStartup::session_template_name () { - if (!load_template_override.empty()) { - string the_path = (ARDOUR::user_template_directory()/ (load_template_override + ".template")).to_string(); - return the_path; - } + if (!load_template_override.empty()) { + string the_path = (ARDOUR::user_template_directory()/ (load_template_override + ".template")).to_string(); + return the_path; + } if (ic_existing_session_button.get_active()) { - return ustring(); + return string(); } if (use_template_button.get_active()) { @@ -203,12 +199,14 @@ ArdourStartup::session_template_name () } } -Glib::ustring +std::string ArdourStartup::session_name (bool& should_be_new) { if (ic_new_session_button.get_active()) { should_be_new = true; - return new_name_entry.get_text (); + string val = new_name_entry.get_text (); + strip_whitespace_edges (val); + return val; } else if (_existing_session_chooser_used) { /* existing session chosen from file chooser */ should_be_new = false; @@ -227,11 +225,11 @@ ArdourStartup::session_name (bool& should_be_new) } } -Glib::ustring +std::string ArdourStartup::session_folder () { if (ic_new_session_button.get_active()) { - Glib::ustring legal_session_folder_name = legalize_for_path (new_name_entry.get_text()); + std::string legal_session_folder_name = legalize_for_path (new_name_entry.get_text()); return Glib::build_filename (new_folder_chooser.get_current_folder(), legal_session_folder_name); } else if (_existing_session_chooser_used) { /* existing session chosen from file chooser */ @@ -294,7 +292,7 @@ using the program.\ new_user_page_index = append_page (*vbox); set_page_type (*vbox, ASSISTANT_PAGE_INTRO); - set_page_title (*vbox, _("Welcome to Ardour")); + set_page_title (*vbox, string_compose (_("Welcome to %1"), PROGRAM_NAME)); set_page_header_image (*vbox, icon_pixbuf); set_page_complete (*vbox, true); } @@ -303,7 +301,7 @@ void ArdourStartup::default_dir_changed () { Config->set_default_session_parent_dir (default_dir_chooser->get_current_folder()); - config_changed (); + config_changed (); } void @@ -321,12 +319,12 @@ ArdourStartup::setup_first_time_config_page () HBox* hbox = manage (new HBox); VBox* vbox = manage (new VBox); - txt->set_markup (_("\ -Each project that you work on with Ardour has its own folder.\n\ + txt->set_markup (string_compose (_("\ +Each project that you work on with %1 has its own folder.\n\ These can require a lot of disk space if you are recording audio.\n\ \n\ -Where would you like new Ardour sessions to be stored by default?\n\n\ -(You can put new sessions anywhere, this is just a default)")); +Where would you like new %1 sessions to be stored by default?\n\n\ +(You can put new sessions anywhere, this is just a default)"), PROGRAM_NAME)); txt->set_alignment (0.0, 0.0); vbox->set_spacing (18); @@ -363,13 +361,13 @@ ArdourStartup::setup_monitoring_choice_page () RadioButton::Group g (monitor_via_hardware_button.get_group()); monitor_via_ardour_button.set_group (g); - monitor_label.set_markup("\ + monitor_label.set_markup(_("\ While recording instruments or vocals, you probably want to listen to the\n\ signal as well as record it. This is called \"monitoring\". There are\n\ different ways to do this depending on the equipment you have and the\n\ configuration of that equipment. The two most common are presented here.\n\ Please choose whichever one is right for your setup.\n\n\ -(You can change this preference at any time, via the Preferences dialog)"); +(You can change this preference at any time, via the Preferences dialog)")); monitor_label.set_alignment (0.0, 0.0); vbox->set_spacing (6); @@ -402,47 +400,47 @@ ArdourStartup::setup_monitor_section_choice_page () HBox* hbox = manage (new HBox); VBox* main_vbox = manage (new VBox); VBox* vbox; - Label* l = manage (new Label); + Label* l = manage (new Label); main_vbox->set_spacing (32); - no_monitor_section_button.set_label (_("Use a Master bus directly")); - l->set_alignment (0.0, 1.0); - l->set_markup(_("Connect the Master bus directly to your hardware outputs.\n\ + no_monitor_section_button.set_label (_("Use a Master bus directly")); + l->set_alignment (0.0, 1.0); + l->set_markup(_("Connect the Master bus directly to your hardware outputs.\n\ Preferable for simple use.")); - vbox = manage (new VBox); + vbox = manage (new VBox); vbox->set_spacing (6); vbox->pack_start (no_monitor_section_button, false, true); vbox->pack_start (*l, false, true); - main_vbox->pack_start (*vbox, false, false); + main_vbox->pack_start (*vbox, false, false); - use_monitor_section_button.set_label (_("Use an additional Monitor bus")); - l = manage (new Label); - l->set_alignment (0.0, 1.0); - l->set_text (_("Use a Monitor bus between Master bus and hardware outputs for \n\ + use_monitor_section_button.set_label (_("Use an additional Monitor bus")); + l = manage (new Label); + l->set_alignment (0.0, 1.0); + l->set_text (_("Use a Monitor bus between Master bus and hardware outputs for \n\ greater control in monitoring without affecting the mix.")); - vbox = manage (new VBox); + vbox = manage (new VBox); vbox->set_spacing (6); vbox->pack_start (use_monitor_section_button, false, true); vbox->pack_start (*l, false, true); - main_vbox->pack_start (*vbox, false, false); + main_vbox->pack_start (*vbox, false, false); RadioButton::Group g (use_monitor_section_button.get_group()); no_monitor_section_button.set_group (g); - if (Config->get_use_monitor_bus()) { - use_monitor_section_button.set_active (true); - } else { - no_monitor_section_button.set_active (true); - } + if (Config->get_use_monitor_bus()) { + use_monitor_section_button.set_active (true); + } else { + no_monitor_section_button.set_active (true); + } + + use_monitor_section_button.signal_toggled().connect (sigc::mem_fun (*this, &ArdourStartup::config_changed)); + no_monitor_section_button.signal_toggled().connect (sigc::mem_fun (*this, &ArdourStartup::config_changed)); - use_monitor_section_button.signal_toggled().connect (sigc::mem_fun (*this, &ArdourStartup::config_changed)); - no_monitor_section_button.signal_toggled().connect (sigc::mem_fun (*this, &ArdourStartup::config_changed)); - monitor_section_label.set_markup(_("(You can change this preference at any time, via the Preferences dialog)")); monitor_section_label.set_alignment (0.0, 0.0); @@ -506,8 +504,7 @@ ArdourStartup::setup_initial_choice_page () bool ArdourStartup::initial_button_press (GdkEventButton *event) { - if (event && event->type == GDK_2BUTTON_PRESS && session_page_index != -1) - { + if (event && event->type == GDK_2BUTTON_PRESS && session_page_index != -1) { set_current_page(session_page_index); return true; } else { @@ -579,7 +576,7 @@ ArdourStartup::on_apply () Config->set_monitoring_model (SoftwareMonitoring); } - Config->set_use_monitor_bus (use_monitor_section_button.get_active()); + Config->set_use_monitor_bus (use_monitor_section_button.get_active()); Config->save_state (); } @@ -623,12 +620,12 @@ ArdourStartup::populate_session_templates () } static bool -lost_name_entry_focus (GdkEventFocus* ev) +lost_name_entry_focus (GdkEventFocus*) { - cerr << "lost focus\n"; - return false; + cerr << "lost focus\n"; + return false; } - + void ArdourStartup::setup_new_session_page () { @@ -681,6 +678,10 @@ ArdourStartup::setup_new_session_page () } new_folder_chooser.set_title (_("Select folder for session")); +#ifdef GTKOSX + new_folder_chooser.add_shortcut_folder ("/Volumes"); +#endif + vbox1->pack_start (*hbox2, false, false); session_new_vbox.pack_start (*vbox1, false, false); @@ -747,9 +748,9 @@ ArdourStartup::setup_new_session_page () use_session_as_template_button.show (); session_template_chooser.show (); - Gtk::FileFilter* template_filter = manage (new (Gtk::FileFilter)); - template_filter->add_pattern(X_("*.template")); - session_template_chooser.set_filter (*template_filter); + Gtk::FileFilter* session_filter = manage (new (Gtk::FileFilter)); + session_filter->add_pattern (X_("*.ardour")); + session_template_chooser.set_filter (*session_filter); session_template_chooser.set_title (_("Select template")); vbox3->pack_start (*hbox4b, false, false); @@ -780,13 +781,13 @@ ArdourStartup::setup_new_session_page () set_page_type (session_vbox, ASSISTANT_PAGE_CONFIRM); new_name_entry.signal_map().connect (sigc::mem_fun (*this, &ArdourStartup::new_name_mapped)); - new_name_entry.signal_focus_out_event().connect (sigc::ptr_fun (lost_name_entry_focus)); + new_name_entry.signal_focus_out_event().connect (sigc::ptr_fun (lost_name_entry_focus)); } void ArdourStartup::new_name_mapped () { - cerr << "Grab new name focus\n"; + cerr << "Grab new name focus\n"; new_name_entry.grab_focus (); } @@ -821,7 +822,7 @@ ArdourStartup::redisplay_recent_sessions () sort (rs.begin(), rs.end(), cmp); for (ARDOUR::RecentSessions::iterator i = rs.begin(); i != rs.end(); ++i) { - session_directories.push_back ((*i).second); + session_directories.push_back ((*i).second); } for (vector::const_iterator i = session_directories.begin(); i != session_directories.end(); ++i) @@ -898,52 +899,56 @@ ArdourStartup::setup_existing_session_page () recent_session_model = TreeStore::create (recent_session_columns); redisplay_recent_sessions (); - if (_have_setup_existing_session_page) { - return; + if (!session_hbox.get_children().empty()) { + session_hbox.remove (**session_hbox.get_children().begin()); } - - 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_BROWSE); - - recent_session_display.get_selection()->signal_changed().connect (sigc::mem_fun (*this, &ArdourStartup::recent_session_row_selected)); - - recent_scroller.add (recent_session_display); - recent_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC); - recent_scroller.set_shadow_type (Gtk::SHADOW_IN); - - recent_session_display.show(); - recent_scroller.show(); - int cnt = redisplay_recent_sessions (); - recent_session_display.signal_row_activated().connect (sigc::mem_fun (*this, &ArdourStartup::recent_row_activated)); + if (session_existing_vbox.get_children().empty()) { - if (cnt > 4) { - recent_scroller.set_size_request (-1, 300); - } + 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_BROWSE); + + recent_session_display.get_selection()->signal_changed().connect (sigc::mem_fun (*this, &ArdourStartup::recent_session_row_selected)); + + recent_scroller.add (recent_session_display); + recent_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC); + recent_scroller.set_shadow_type (Gtk::SHADOW_IN); + + recent_session_display.show(); + + recent_scroller.show(); + int cnt = redisplay_recent_sessions (); + recent_session_display.signal_row_activated().connect (sigc::mem_fun (*this, &ArdourStartup::recent_row_activated)); + + if (cnt > 4) { + recent_scroller.set_size_request (-1, 300); + } - VBox* vbox = manage (new VBox); - vbox->set_spacing (8); - vbox->pack_start (recent_scroller, true, true); + session_existing_vbox.set_spacing (8); + session_existing_vbox.pack_start (recent_scroller, true, true); - existing_session_chooser.set_title (_("Select session file")); - existing_session_chooser.signal_file_set().connect (sigc::mem_fun (*this, &ArdourStartup::existing_session_selected)); - - HBox* hbox = manage (new HBox); - hbox->set_spacing (4); - hbox->pack_start (*manage (new Label (_("Browse:"))), PACK_SHRINK); - hbox->pack_start (existing_session_chooser); - vbox->pack_start (*hbox); - hbox->show_all (); + existing_session_chooser.set_title (_("Select session file")); + existing_session_chooser.signal_file_set().connect (sigc::mem_fun (*this, &ArdourStartup::existing_session_selected)); + +#ifdef GTKOSX + existing_session_chooser.add_shortcut_folder ("/Volumes"); +#endif + + HBox* hbox = manage (new HBox); + hbox->set_spacing (4); + hbox->pack_start (*manage (new Label (_("Browse:"))), PACK_SHRINK); + hbox->pack_start (existing_session_chooser); + session_existing_vbox.pack_start (*hbox, false, false); + hbox->show_all (); + } - vbox->show_all (); - session_hbox.pack_start (*vbox, true, true); + session_existing_vbox.show_all (); + session_hbox.pack_start (session_existing_vbox, true, true); set_page_title (session_vbox, _("Select a session")); set_page_type (session_vbox, ASSISTANT_PAGE_CONFIRM); - - _have_setup_existing_session_page = true; } void @@ -1248,7 +1253,7 @@ ArdourStartup::limit_outputs_clicked () void ArdourStartup::master_bus_button_clicked () { - bool yn = _create_master_bus.get_active(); + bool yn = _create_master_bus.get_active(); _master_bus_channel_count.set_sensitive(yn); }