X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fstartup.cc;h=5a0c9c8430e613f4ca09fb45f4ca5c75b20589a6;hb=7b57d47e2592641181d0e87b51ee93e89b4068f2;hp=b17270cbbd7efb5a7156f4d24d72926a667de2d1;hpb=fb9a184340e0ec2e73a3a7050a53b881317afd8c;p=ardour.git diff --git a/gtk2_ardour/startup.cc b/gtk2_ardour/startup.cc index b17270cbbd..5a0c9c8430 100644 --- a/gtk2_ardour/startup.cc +++ b/gtk2_ardour/startup.cc @@ -63,97 +63,114 @@ static string poor_mans_glob (string path) } -ArdourStartup::ArdourStartup () +ArdourStartup::ArdourStartup (bool require_new, const std::string& session_name, const std::string& session_path, const std::string& template_name) : _response (RESPONSE_OK) + , config_modified (false) + , new_only (require_new) + , default_dir_chooser (0) , ic_new_session_button (_("Create a new session")) , ic_existing_session_button (_("Open an existing session")) , 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 play back material as it is being recorded"), PROGRAM_NAME)) + , engine_dialog (0) , 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) , _input_limit_count_adj (1, 0, 100, 1, 10, 0) , _master_bus_channel_count_adj (2, 0, 100, 1, 10, 0) + , audio_page_index (-1) + , new_user_page_index (-1) + , default_folder_page_index (-1) + , monitoring_page_index (-1) + , session_page_index (-1) + , initial_choice_index (-1) + , final_page_index (-1) + , session_options_page_index (-1) , _existing_session_chooser_used (false) { - audio_page_index = -1; - initial_choice_index = -1; - new_user_page_index = -1; - default_folder_page_index = -1; - monitoring_page_index = -1; - session_page_index = -1; - final_page_index = -1; - session_options_page_index = -1; - new_only = false; - - engine_dialog = 0; - config_modified = false; - default_dir_chooser = 0; - - use_template_button.set_group (session_template_group); - use_session_as_template_button.set_group (session_template_group); - - set_keep_above (true); - set_position (WIN_POS_CENTER); - set_border_width (12); - - if ((icon_pixbuf = ::get_icon ("ardour_icon_48px")) == 0) { - throw failed_constructor(); - } - - 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 = !Glib::file_test(been_here_before_path(), Glib::FILE_TEST_EXISTS); + new_user = !Glib::file_test (been_here_before_path(), Glib::FILE_TEST_EXISTS); + need_audio_setup = EngineControl::need_setup (); + need_session_info = (session_name.empty() || require_new); - bool need_audio_setup = !EngineControl::engine_running(); + _provided_session_name = session_name; + _provided_session_path = session_path; + + if (need_audio_setup || need_session_info || new_user) { - // setup_prerelease_page (); - - if (new_user) { + use_template_button.set_group (session_template_group); + use_session_as_template_button.set_group (session_template_group); - setup_new_user_page (); - setup_first_time_config_page (); - setup_monitoring_choice_page (); - setup_monitor_section_choice_page (); - - if (need_audio_setup) { - setup_audio_page (); + set_keep_above (true); + set_position (WIN_POS_CENTER); + set_border_width (12); + + if ((icon_pixbuf = ::get_icon ("ardour_icon_48px")) == 0) { + throw failed_constructor(); + } + + 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); } - ic_new_session_button.set_active (true); // always create new session on first run - - } else { - - if (need_audio_setup) { - setup_audio_page (); + set_type_hint(Gdk::WINDOW_TYPE_HINT_DIALOG); + + // setup_prerelease_page (); + + if (new_user) { + + setup_new_user_page (); + setup_first_time_config_page (); + setup_monitoring_choice_page (); + setup_monitor_section_choice_page (); + + if (need_audio_setup) { + setup_audio_page (); + } + + ic_new_session_button.set_active (true); // always create new session on first run + + } else { + + if (need_audio_setup) { + setup_audio_page (); + } + + setup_initial_choice_page (); } - setup_initial_choice_page (); - } + setup_session_page (); + setup_more_options_page (); + + if (new_user) { + setup_final_page (); + } - setup_session_page (); - setup_more_options_page (); + if (new_only) { + ic_vbox.hide (); + } else { + ic_vbox.show (); + } - if (new_user) { - setup_final_page (); + if (!template_name.empty()) { + use_template_button.set_active (false); + load_template_override = template_name; + } } the_startup = this; @@ -163,6 +180,12 @@ ArdourStartup::~ArdourStartup () { } +bool +ArdourStartup::ready_without_display () const +{ + return !new_user && !need_audio_setup && !need_session_info; +} + void ArdourStartup::setup_prerelease_page () { @@ -198,25 +221,6 @@ Full information on all the above can be found on the support page at\n\ set_page_complete (*vbox, true); } -void -ArdourStartup::set_new_only (bool yn) -{ - new_only = yn; - - if (new_only) { - ic_vbox.hide (); - } else { - ic_vbox.show (); - } -} - -void -ArdourStartup::set_load_template (string load_template) -{ - use_template_button.set_active (false); - load_template_override = load_template; -} - bool ArdourStartup::use_session_template () { @@ -235,7 +239,7 @@ std::string ArdourStartup::session_template_name () { if (!load_template_override.empty()) { - string the_path(ARDOUR::user_template_directory()); + string the_path (ARDOUR::user_template_directory()); return Glib::build_filename (the_path, load_template_override + ARDOUR::template_suffix); } @@ -257,6 +261,10 @@ ArdourStartup::session_template_name () std::string ArdourStartup::session_name (bool& should_be_new) { + if (ready_without_display()) { + return _provided_session_name; + } + if (ic_new_session_button.get_active()) { should_be_new = true; string val = new_name_entry.get_text (); @@ -283,6 +291,10 @@ ArdourStartup::session_name (bool& should_be_new) std::string ArdourStartup::session_folder () { + if (ready_without_display()) { + return _provided_session_path; + } + if (ic_new_session_button.get_active()) { 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); @@ -922,6 +934,8 @@ ArdourStartup::redisplay_recent_sessions () for (ARDOUR::RecentSessions::iterator i = rs.begin(); i != rs.end(); ++i) { session_directories.push_back ((*i).second); } + + int session_snapshot_count = 0; for (vector::const_iterator i = session_directories.begin(); i != session_directories.end(); ++i) { @@ -960,6 +974,8 @@ ArdourStartup::redisplay_recent_sessions () row[recent_session_columns.visible_name] = Glib::path_get_basename (fullpath); row[recent_session_columns.fullpath] = fullpath; + + ++session_snapshot_count; if (state_file_names.size() > 1) { @@ -973,13 +989,15 @@ ArdourStartup::redisplay_recent_sessions () child_row[recent_session_columns.visible_name] = *i2; child_row[recent_session_columns.fullpath] = fullpath; + ++session_snapshot_count; } } } recent_session_display.set_tooltip_column(1); // recent_session_columns.fullpath recent_session_display.set_model (recent_session_model); - return rs.size(); + return session_snapshot_count; + // return rs.size(); } void @@ -1115,7 +1133,7 @@ ArdourStartup::setup_more_options_page () advanced_table.set_row_spacings(0); advanced_table.set_col_spacings(0); - _connect_inputs.set_label (_("Automatically connect to physical_inputs")); + _connect_inputs.set_label (_("Automatically connect to physical inputs")); _connect_inputs.set_flags(Gtk::CAN_FOCUS); _connect_inputs.set_relief(Gtk::RELIEF_NORMAL); _connect_inputs.set_mode(true); @@ -1336,9 +1354,12 @@ ArdourStartup::connect_inputs_clicked () void ArdourStartup::connect_outputs_clicked () { - _limit_output_ports.set_sensitive(_connect_outputs.get_active()); + bool const co = _connect_outputs.get_active (); + _limit_output_ports.set_sensitive(co); + _connect_outputs_to_master.set_sensitive(co); + _connect_outputs_to_physical.set_sensitive(co); - if (_connect_outputs.get_active() && _limit_output_ports.get_active()) { + if (co && _limit_output_ports.get_active()) { _output_limit_count.set_sensitive(true); } else { _output_limit_count.set_sensitive(false); @@ -1360,9 +1381,10 @@ ArdourStartup::limit_outputs_clicked () void ArdourStartup::master_bus_button_clicked () { - bool yn = _create_master_bus.get_active(); + bool const yn = _create_master_bus.get_active(); _master_bus_channel_count.set_sensitive(yn); + _connect_outputs_to_master.set_sensitive(yn); } void