add AudioBackendNativeThread to serve the same role as jack_native_thread_t
[ardour.git] / gtk2_ardour / startup.cc
index 6f0b1cfaab5262067c2bae6e1a7100231bc6a5c8..266a7e2a278c0d5146f287afc6fd75be02e26ec4 100644 (file)
@@ -34,6 +34,7 @@
 #include "pbd/stacktrace.h"
 #include "pbd/openuri.h"
 
+#include "ardour/audioengine.h"
 #include "ardour/filesystem_paths.h"
 #include "ardour/recent_sessions.h"
 #include "ardour/session.h"
@@ -74,7 +75,6 @@ ArdourStartup::ArdourStartup (bool require_new, const std::string& session_name,
        , monitor_via_hardware_button (string_compose (_("Use an external mixer or the hardware mixer of your audio interface.\n"
                                                         "%1 will play NO role in monitoring"), PROGRAM_NAME))
        , 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)
@@ -91,13 +91,12 @@ ArdourStartup::ArdourStartup (bool require_new, const std::string& session_name,
        , _existing_session_chooser_used (false)
 {
        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);
 
        _provided_session_name = session_name;
        _provided_session_path = session_path;
        
-       if (need_audio_setup || need_session_info || new_user) {
+       if (need_session_info || new_user) {
 
                use_template_button.set_group (session_template_group);
                use_session_as_template_button.set_group (session_template_group);
@@ -139,18 +138,10 @@ ArdourStartup::ArdourStartup (bool require_new, const std::string& session_name,
                        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 ();
                }
 
@@ -183,39 +174,39 @@ ArdourStartup::~ArdourStartup ()
 bool
 ArdourStartup::ready_without_display () const
 {
-       return !new_user && !need_audio_setup && !need_session_info;
+       return !new_user && !need_session_info;
 }
 
 void
 ArdourStartup::setup_prerelease_page ()
 {
-        VBox* vbox = manage (new VBox);
-        Label* label = manage (new Label);
-        label->set_markup (_("<b>Welcome to this BETA release of Ardour 3.0</b>\n\n\
-Ardour 3.0 has been released for Linux but because of the lack of testers,\n\
+       VBox* vbox = manage (new VBox);
+       Label* label = manage (new Label);
+       label->set_markup (string_compose (_("<b>Welcome to this BETA release of Ardour %1</b>\n\n\
+Ardour %1 has been released for Linux but because of the lack of testers,\n\
 it is still at the beta stage on OS X. So, a few guidelines:\n\
 \n\
 1) Please do <b>NOT</b> use this software with the expectation that it is stable or reliable\n\
    though it may be so, depending on your workflow.\n\
-3) <b>Please do NOT use the forums at ardour.org to report issues</b>.\n\
-4) Please <b>DO</b> use the bugtracker at http://tracker.ardour.org/ to report issues\n\
-   making sure to note the product version number as 3.0-beta.\n\
-5) Please <b>DO</b> use the ardour-users mailing list to discuss ideas and pass on comments.\n\
-6) Please <b>DO</b> join us on IRC for real time discussions about ardour3. You\n\
+2) <b>Please do NOT use the forums at ardour.org to report issues</b>.\n\
+3) Please <b>DO</b> use the bugtracker at http://tracker.ardour.org/ to report issues\n\
+   making sure to note the product version number as %1-beta.\n\
+4) Please <b>DO</b> use the ardour-users mailing list to discuss ideas and pass on comments.\n\
+5) Please <b>DO</b> 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 ();
+"), VERSIONSTRING));
 
-        append_page (*vbox);
-        set_page_type (*vbox, ASSISTANT_PAGE_CONTENT);
-        set_page_title (*vbox, _("This is a BETA RELEASE"));
+       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 a BETA RELEASE"));
        set_page_complete (*vbox, true);
 }
 
@@ -310,24 +301,6 @@ ArdourStartup::session_folder ()
        }
 }
 
-void
-ArdourStartup::setup_audio_page ()
-{
-       engine_dialog = manage (new EngineControl);
-
-       engine_dialog->set_border_width (12);
-
-       engine_dialog->show_all ();
-
-       audio_page_index = append_page (*engine_dialog);
-       set_page_type (*engine_dialog, ASSISTANT_PAGE_CONTENT);
-       set_page_title (*engine_dialog, _("Audio / MIDI Setup"));
-
-       /* the default parameters should work, so the page is potentially complete */
-
-       set_page_complete (*engine_dialog, true);
-}
-
 void
 ArdourStartup::setup_new_user_page ()
 {
@@ -403,8 +376,6 @@ Where would you like new %1 sessions to be stored by default?\n\n\
        vbox->pack_start (*txt, false, false);
        vbox->pack_start (*hbox, false, true);
 
-       cerr << "Setting defaultDIR session dir to [" << Config->get_default_session_parent_dir() << "]\n";
-
        default_dir_chooser->set_current_folder (poor_mans_glob (Config->get_default_session_parent_dir()));
        default_dir_chooser->signal_current_folder_changed().connect (sigc::mem_fun (*this, &ArdourStartup::default_dir_changed));
        default_dir_chooser->show ();
@@ -591,7 +562,7 @@ ArdourStartup::setup_initial_choice_page ()
        ic_vbox.show_all ();
 
        initial_choice_index = append_page (ic_vbox);
-       set_page_title (ic_vbox, _("What would you like to do ?"));
+       set_page_title (ic_vbox, string_compose("%1 %2", PROGRAM_NAME, VERSIONSTRING));
        set_page_header_image (ic_vbox, icon_pixbuf);
 
        /* user could just click on "Forward" if default
@@ -661,13 +632,6 @@ ArdourStartup::on_delete_event (GdkEventAny*)
 void
 ArdourStartup::on_apply ()
 {
-       if (engine_dialog) {
-               if (engine_dialog->setup_engine ()) {
-                        set_current_page (audio_page_index);
-                        return;
-                }
-       }
-
        if (config_modified) {
 
                if (default_dir_chooser) {
@@ -805,7 +769,15 @@ ArdourStartup::setup_new_session_page ()
                        string::size_type last_dir_sep = session_parent_dir.rfind(G_DIR_SEPARATOR);
                        session_parent_dir = session_parent_dir.substr(0, last_dir_sep);
                        new_folder_chooser.set_current_folder (session_parent_dir);
-                       new_folder_chooser.add_shortcut_folder (poor_mans_glob (Config->get_default_session_parent_dir()));
+                       string default_session_folder = poor_mans_glob (Config->get_default_session_parent_dir());
+
+                       try {
+                               /* add_shortcut_folder throws an exception if the folder being added already has a shortcut */
+                               new_folder_chooser.add_shortcut_folder (default_session_folder);
+                       }
+                       catch (Glib::Error & e) {
+                               std::cerr << "new_folder_chooser.add_shortcut_folder (" << default_session_folder << ") threw Glib::Error " << e.what() << std::endl;
+                       }
                } else {
                        new_folder_chooser.set_current_folder (poor_mans_glob (Config->get_default_session_parent_dir()));
                }
@@ -917,6 +889,7 @@ ArdourStartup::setup_new_session_page ()
        if (more_new_session_options_button.get_active()) {
                set_page_type (session_vbox, ASSISTANT_PAGE_CONTENT);
        }
+       session_hbox.show_all();
 }
 
 void
@@ -1092,6 +1065,7 @@ ArdourStartup::setup_existing_session_page ()
 
        set_page_title (session_vbox, _("Select a session"));
        set_page_type (session_vbox, ASSISTANT_PAGE_CONFIRM);
+       session_hbox.show_all();
 }
 
 void