Fix confusion about the 'done' variable in InterThreadInfo during import. 'done...
[ardour.git] / gtk2_ardour / startup.cc
index f8e871f70bbae44ee22413f6905352e259f32b77..186608e5961292be82a05641d5b176bdeac69ebf 100644 (file)
@@ -27,6 +27,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 +39,7 @@
 #include "opts.h"
 #include "engine_dialog.h"
 #include "i18n.h"
+#include "utils.h"
 
 using namespace std;
 using namespace Gtk;
@@ -63,7 +65,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 +94,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();
        }
 
@@ -180,7 +171,7 @@ ArdourStartup::use_session_template ()
        }
 }
 
-Glib::ustring
+std::string
 ArdourStartup::session_template_name ()
 {
         if (!load_template_override.empty()) {
@@ -189,7 +180,7 @@ ArdourStartup::session_template_name ()
         }
 
        if (ic_existing_session_button.get_active()) {
-               return ustring();
+               return string();
        }
 
        if (use_template_button.get_active()) {
@@ -203,12 +194,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 +220,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 */
@@ -506,8 +499,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 {
@@ -623,7 +615,7 @@ ArdourStartup::populate_session_templates ()
 }
 
 static bool
-lost_name_entry_focus (GdkEventFocus* ev)
+lost_name_entry_focus (GdkEventFocus*)
 {
         cerr << "lost focus\n";
         return false;
@@ -902,56 +894,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));
-       
+               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");
+               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);
-       vbox->pack_start (*hbox);
-       hbox->show_all ();
+               
+               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);
+               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