X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fstartup.cc;h=a7bce0a8479c3232165c63481534cebad65a18ad;hb=e827bb2bff271f99abd3531ddd0e5a01c8ac5014;hp=c32b79865174964e6c6c3015b4666dbe7c0becb7;hpb=b85b4d9e54caef0585d308ef3bffee21d0e5ae56;p=ardour.git diff --git a/gtk2_ardour/startup.cc b/gtk2_ardour/startup.cc index c32b798651..a7bce0a847 100644 --- a/gtk2_ardour/startup.cc +++ b/gtk2_ardour/startup.cc @@ -102,15 +102,43 @@ Ardour will play NO role in monitoring")) throw failed_constructor(); } - sys::path been_here_before = user_config_directory(); - been_here_before /= ".a3"; // XXXX use more specific version so we can catch upgrades - new_user = !exists (been_here_before); + list > window_icons; + Glib::RefPtr icon; + + if ((icon = ::get_icon ("ardour_icon_16px")) != 0) { + window_icons.push_back (icon); + } + if ((icon = ::get_icon ("ardour_icon_22px")) != 0) { + window_icons.push_back (icon); + } + if ((icon = ::get_icon ("ardour_icon_32px")) != 0) { + window_icons.push_back (icon); + } + if ((icon = ::get_icon ("ardour_icon_48px")) != 0) { + window_icons.push_back (icon); + } + if (!window_icons.empty ()) { + set_default_icon_list (window_icons); + } + + new_user = !exists (been_here_before_path ()); bool need_audio_setup = !EngineControl::engine_running(); + setup_prerelease_page (); + if (new_user) { - /* "touch" the file */ - ofstream fout (been_here_before.to_string().c_str()); + + /* Create the config directory so that we have somewhere to put the + been_here_before file. + */ + try { + sys::create_directories (user_config_directory ()); + } + catch (const sys::filesystem_error& ex) { + error << "Could not create user configuration directory" << endmsg; + } + setup_new_user_page (); setup_first_time_config_page (); setup_monitoring_choice_page (); @@ -143,6 +171,41 @@ ArdourStartup::~ArdourStartup () { } +void +ArdourStartup::setup_prerelease_page () +{ + VBox* vbox = manage (new VBox); + Label* label = manage (new Label); + label->set_markup (_("Welcome to this BETA release of Ardour 3.0\n\n\ +There are still several issues and bugs to be worked on,\n\ +as well as general workflow improvements, before this can be considered\n\ +release software. So, a few guidelines:\n\ +\n\ +1) Please do NOT use this software with the expectation that it is stable or reliable\n\ + though it may be so, depending on your workflow.\n\ +2) Please see http://ardour.org/a3_features for a guide to new features.\n\ +3) Please do NOT use the forums at ardour.org to report issues.\n\ +4) Please DO use the bugtracker at http://tracker.ardour.org/ to report issues\n\ + making sure to note the product version number as 3.0-alpha.\n\ +5) Please DO use the ardour-users mailing list to discuss ideas and pass on comments.\n\ +6) Please DO join us on IRC for real time discussions about ardour3. You\n\ + can get there directly from Ardour via the Help->Chat menu option.\n\ +\n\ +Full information on all the above can be found on the support page at\n\ +\n\ + http://ardour.org/support\n\ +")); + + vbox->set_border_width (12); + vbox->pack_start (*label, false, false, 12); + vbox->show_all (); + + append_page (*vbox); + set_page_type (*vbox, ASSISTANT_PAGE_CONTENT); + set_page_title (*vbox, _("This is an BETA RELEASE")); + set_page_complete (*vbox, true); +} + void ArdourStartup::set_new_only (bool yn) { @@ -156,17 +219,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; @@ -178,10 +242,10 @@ ArdourStartup::use_session_template () 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 string(); @@ -204,8 +268,8 @@ ArdourStartup::session_name (bool& should_be_new) if (ic_new_session_button.get_active()) { should_be_new = true; string val = new_name_entry.get_text (); - strip_whitespace_edges (val); - return val; + strip_whitespace_edges (val); + return val; } else if (_existing_session_chooser_used) { /* existing session chosen from file chooser */ should_be_new = false; @@ -299,8 +363,8 @@ using the program.\ void ArdourStartup::default_dir_changed () { - Config->set_default_session_parent_dir (default_dir_chooser->get_current_folder()); - config_changed (); + Config->set_default_session_parent_dir (default_dir_chooser->get_filename()); + config_changed (); } void @@ -360,13 +424,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); @@ -399,47 +463,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); @@ -566,7 +630,7 @@ ArdourStartup::on_apply () if (config_modified) { if (default_dir_chooser) { - Config->set_default_session_parent_dir (default_dir_chooser->get_current_folder()); + Config->set_default_session_parent_dir (default_dir_chooser->get_filename()); } if (monitor_via_hardware_button.get_active()) { @@ -575,8 +639,11 @@ 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()); + /* "touch" the been-here-before path now that we're about to save Config */ + ofstream fout (been_here_before_path().to_string().c_str()); + Config->save_state (); } @@ -595,6 +662,26 @@ ArdourStartup::on_prepare (Gtk::Widget* page) } else { /* existing session requested */ setup_existing_session_page (); + + } + + /* HACK HACK HACK ... change the "Apply" button label + to say "Open" + */ + + Gtk::Widget* tl = session_vbox.get_toplevel(); + Gtk::Window* win; + if ((win = dynamic_cast(tl)) != 0) { + /* ::get_default_widget() is not wrapped in gtkmm */ + Gtk::Widget* def = wrap (gtk_window_get_default_widget (win->gobj())); + Gtk::Button* button; + if ((button = dynamic_cast(def)) != 0) { + if (more_new_session_options_button.get_active()) { + button->set_label (_("Forward")); + }else{ + button->set_label (_("Open")); + } + } } } } @@ -621,10 +708,10 @@ ArdourStartup::populate_session_templates () static bool lost_name_entry_focus (GdkEventFocus*) { - cerr << "lost focus\n"; - return false; + cerr << "lost focus\n"; + return false; } - + void ArdourStartup::setup_new_session_page () { @@ -678,7 +765,7 @@ ArdourStartup::setup_new_session_page () new_folder_chooser.set_title (_("Select folder for session")); #ifdef GTKOSX - new_folder_chooser.add_shortcut_folder ("/Volumes"); + new_folder_chooser.add_shortcut_folder ("/Volumes"); #endif vbox1->pack_start (*hbox2, false, false); @@ -747,9 +834,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); @@ -779,14 +866,18 @@ ArdourStartup::setup_new_session_page () set_page_title (session_vbox, _("New Session")); set_page_type (session_vbox, ASSISTANT_PAGE_CONFIRM); + if (more_new_session_options_button.get_active()) { + set_page_type (session_vbox, ASSISTANT_PAGE_CONTENT); + } + 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 +912,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) @@ -908,19 +999,19 @@ ArdourStartup::setup_existing_session_page () 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); } @@ -930,19 +1021,19 @@ ArdourStartup::setup_existing_session_page () 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); + session_existing_vbox.pack_start (*hbox, false, false); hbox->show_all (); } - + session_existing_vbox.show_all (); session_hbox.pack_start (session_existing_vbox, true, true); @@ -1012,7 +1103,7 @@ ArdourStartup::setup_more_options_page () _connect_inputs.set_flags(Gtk::CAN_FOCUS); _connect_inputs.set_relief(Gtk::RELIEF_NORMAL); _connect_inputs.set_mode(true); - _connect_inputs.set_active(true); + _connect_inputs.set_active(Config->get_input_auto_connect() != ManualConnect); _connect_inputs.set_border_width(0); _limit_input_ports.set_label (_("Use only")); @@ -1072,7 +1163,7 @@ ArdourStartup::setup_more_options_page () _connect_outputs.set_flags(Gtk::CAN_FOCUS); _connect_outputs.set_relief(Gtk::RELIEF_NORMAL); _connect_outputs.set_mode(true); - _connect_outputs.set_active(true); + _connect_outputs.set_active(Config->get_output_auto_connect() != ManualConnect); _connect_outputs.set_border_width(0); _limit_output_ports.set_label (_("Use only")); _limit_output_ports.set_flags(Gtk::CAN_FOCUS); @@ -1094,7 +1185,7 @@ ArdourStartup::setup_more_options_page () _connect_outputs_to_master.set_flags(Gtk::CAN_FOCUS); _connect_outputs_to_master.set_relief(Gtk::RELIEF_NORMAL); _connect_outputs_to_master.set_mode(true); - _connect_outputs_to_master.set_active(false); + _connect_outputs_to_master.set_active(Config->get_output_auto_connect() == AutoConnectMaster); _connect_outputs_to_master.set_border_width(0); _connect_outputs_to_master.set_group (connect_outputs_group); @@ -1104,7 +1195,7 @@ ArdourStartup::setup_more_options_page () _connect_outputs_to_physical.set_flags(Gtk::CAN_FOCUS); _connect_outputs_to_physical.set_relief(Gtk::RELIEF_NORMAL); _connect_outputs_to_physical.set_mode(true); - _connect_outputs_to_physical.set_active(false); + _connect_outputs_to_physical.set_active(Config->get_output_auto_connect() == AutoConnectPhysical); _connect_outputs_to_physical.set_border_width(0); output_conn_vbox.pack_start(_connect_outputs, Gtk::PACK_SHRINK, 0); @@ -1252,7 +1343,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); } @@ -1286,3 +1377,12 @@ ArdourStartup::existing_session_selected () set_page_complete (session_vbox, true); move_along_now (); } + +sys::path +ArdourStartup::been_here_before_path () const +{ + sys::path b = user_config_directory(); + b /= ".a3"; // XXXX use more specific version so we can catch upgrades + return b; +} +