rearrange startup/new session dialog to include new+recent sessions on same page
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 14 Feb 2012 16:25:13 +0000 (16:25 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 14 Feb 2012 16:25:13 +0000 (16:25 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@11489 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/startup.cc
gtk2_ardour/startup.h

index 286aa7f8136e1260750f9bdb2230c7390cce6051..18770df69e0b1fa2e5b87ba6c9cbd48f42ca229a 100644 (file)
@@ -81,7 +81,7 @@ Ardour will play NO role in monitoring"))
        new_user_page_index = -1;
        default_folder_page_index = -1;
        monitoring_page_index = -1;
-       session_page_index = -1;
+       new_session_page_index = -1;
        final_page_index = -1;
        session_options_page_index = -1;
        new_only = false;
@@ -157,7 +157,7 @@ Ardour will play NO role in monitoring"))
                setup_initial_choice_page ();
        }
 
-       setup_session_page ();
+       setup_new_session_page ();
        setup_more_options_page ();
 
        if (new_user) {
@@ -530,6 +530,10 @@ greater control in monitoring without affecting the mix."));
 void
 ArdourStartup::setup_initial_choice_page ()
 {
+       initial_choice_index = append_page (ic_vbox);
+       set_page_title (ic_vbox, _("What would you like to do ?"));
+       set_page_header_image (ic_vbox, icon_pixbuf);
+
        ic_vbox.set_spacing (6);
        ic_vbox.set_border_width (24);
 
@@ -544,6 +548,53 @@ ArdourStartup::setup_initial_choice_page ()
        centering_vbox->pack_start (ic_new_session_button, false, true);
        centering_vbox->pack_start (ic_existing_session_button, false, true);
 
+       recent_session_model = TreeStore::create (recent_session_columns);
+       redisplay_recent_sessions ();
+               
+       if (!new_session_hbox.get_children().empty()) {
+               new_session_hbox.remove (**new_session_hbox.get_children().begin());
+       }
+               
+       if (session_existing_vbox.get_children().empty()) {
+                       
+               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);
+               }
+
+               centering_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));
+                       
+#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);
+               centering_vbox->pack_start (*hbox, false, false);
+               hbox->show_all ();
+       }
+
        ic_new_session_button.signal_button_press_event().connect(sigc::mem_fun(*this, &ArdourStartup::initial_button_press), false);
        ic_new_session_button.signal_activate().connect(sigc::mem_fun(*this, &ArdourStartup::initial_button_activated), false);
 
@@ -556,10 +607,6 @@ 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_header_image (ic_vbox, icon_pixbuf);
-
        /* user could just click on "Forward" if default
         * choice is correct.
         */
@@ -570,8 +617,8 @@ ArdourStartup::setup_initial_choice_page ()
 bool
 ArdourStartup::initial_button_press (GdkEventButton *event)
 {
-       if (event && event->type == GDK_2BUTTON_PRESS && session_page_index != -1) {
-               set_current_page(session_page_index);
+       if (event && event->type == GDK_2BUTTON_PRESS && new_session_page_index != -1) {
+               set_current_page (new_session_page_index);
                return true;
        } else {
                return false;
@@ -581,20 +628,7 @@ ArdourStartup::initial_button_press (GdkEventButton *event)
 void
 ArdourStartup::initial_button_activated ()
 {
-       set_current_page(session_page_index);
-}
-
-void
-ArdourStartup::setup_session_page ()
-{
-       session_vbox.set_border_width (24);
-
-       session_vbox.pack_start (session_hbox, true, true);
-       session_vbox.show_all ();
-
-       session_page_index = append_page (session_vbox);
-       /* initial setting */
-       set_page_type (session_vbox, ASSISTANT_PAGE_CONFIRM);
+       set_current_page (new_session_page_index);
 }
 
 void
@@ -657,22 +691,13 @@ ArdourStartup::on_apply ()
 void
 ArdourStartup::on_prepare (Gtk::Widget* page)
 {
-       if (page == &session_vbox) {
-
-               if (ic_new_session_button.get_active()) {
-                       /* new session requested */
-                       setup_new_session_page ();
-               } else {
-                       /* existing session requested */
-                       setup_existing_session_page ();
-
-               }
+       if (page == &new_session_vbox) {
 
                /* HACK HACK HACK ... change the "Apply" button label
                   to say "Open"
                */
 
-               Gtk::Widget* tl = session_vbox.get_toplevel();
+               Gtk::Widget* tl = new_session_vbox.get_toplevel();
                Gtk::Window* win;
                if ((win = dynamic_cast<Gtk::Window*>(tl)) != 0) {
                        /* ::get_default_widget() is not wrapped in gtkmm */
@@ -718,8 +743,8 @@ lost_name_entry_focus (GdkEventFocus*)
 void
 ArdourStartup::setup_new_session_page ()
 {
-       if (!session_hbox.get_children().empty()) {
-               session_hbox.remove (**session_hbox.get_children().begin());
+       if (!new_session_hbox.get_children().empty()) {
+               new_session_hbox.remove (**new_session_hbox.get_children().begin());
        }
 
        session_new_vbox.set_spacing (18);
@@ -737,11 +762,10 @@ ArdourStartup::setup_new_session_page ()
 
                label1->set_text (_("Session name:"));
 
-
                if (!ARDOUR_COMMAND_LINE::session_name.empty()) {
                        new_name_entry.set_text  (Glib::path_get_basename (ARDOUR_COMMAND_LINE::session_name));
                        /* name provided - they can move right along */
-                       set_page_complete (session_vbox, true);
+                       set_page_complete (new_session_vbox, true);
                }
 
                new_name_entry.signal_changed().connect (sigc::mem_fun (*this, &ArdourStartup::new_name_changed));
@@ -865,12 +889,18 @@ ArdourStartup::setup_new_session_page ()
        }
 
        session_new_vbox.show_all ();
-       session_hbox.pack_start (session_new_vbox, true, true);
-       set_page_title (session_vbox, _("New Session"));
-       set_page_type (session_vbox, ASSISTANT_PAGE_CONFIRM);
+       new_session_hbox.pack_start (session_new_vbox, true, true);
+
+       new_session_vbox.set_border_width (24);
+       new_session_vbox.pack_start (new_session_hbox, true, true);
+       new_session_vbox.show_all ();
+       new_session_page_index = append_page (new_session_vbox);
+       /* initial setting */
+       set_page_type (new_session_vbox, ASSISTANT_PAGE_CONFIRM);
+       set_page_title (new_session_vbox, _("New Session"));
 
        if (more_new_session_options_button.get_active()) {
-               set_page_type (session_vbox, ASSISTANT_PAGE_CONTENT);
+               set_page_type (new_session_vbox, ASSISTANT_PAGE_CONTENT);
        }
 
        new_name_entry.signal_map().connect (sigc::mem_fun (*this, &ArdourStartup::new_name_mapped));
@@ -888,9 +918,9 @@ void
 ArdourStartup::new_name_changed ()
 {
        if (!new_name_entry.get_text().empty()) {
-               set_page_complete (session_vbox, true);
+               set_page_complete (new_session_vbox, true);
        } else {
-               set_page_complete (session_vbox, false);
+               set_page_complete (new_session_vbox, false);
        }
 }
 
@@ -980,79 +1010,21 @@ void
 ArdourStartup::recent_session_row_selected ()
 {
        if (recent_session_display.get_selection()->count_selected_rows() > 0) {
-               set_page_complete (session_vbox, true);
+               set_page_complete (ic_vbox, true);
        } else {
-               set_page_complete (session_vbox, false);
+               set_page_complete (ic_vbox, false);
        }
 }
 
-void
-ArdourStartup::setup_existing_session_page ()
-{
-       recent_session_model = TreeStore::create (recent_session_columns);
-       redisplay_recent_sessions ();
-
-       if (!session_hbox.get_children().empty()) {
-               session_hbox.remove (**session_hbox.get_children().begin());
-       }
-
-       if (session_existing_vbox.get_children().empty()) {
-
-               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);
-               }
-
-               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));
-
-#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 ();
-       }
-
-       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);
-}
-
 void
 ArdourStartup::more_new_session_options_button_clicked ()
 {
        if (more_new_session_options_button.get_active()) {
                more_options_vbox.show_all ();
                set_page_type (more_options_vbox, ASSISTANT_PAGE_CONFIRM);
-               set_page_type (session_vbox, ASSISTANT_PAGE_CONTENT);
+               set_page_type (new_session_vbox, ASSISTANT_PAGE_CONTENT);
        } else {
-               set_page_type (session_vbox, ASSISTANT_PAGE_CONFIRM);
+               set_page_type (new_session_vbox, ASSISTANT_PAGE_CONFIRM);
                more_options_vbox.hide ();
        }
 }
@@ -1356,7 +1328,7 @@ ArdourStartup::move_along_now ()
 {
        gint cur = get_current_page ();
 
-       if (cur == session_page_index) {
+       if (cur == new_session_page_index) {
                if (more_new_session_options_button.get_active()) {
                        set_current_page (session_options_page_index);
                } else {
@@ -1368,17 +1340,22 @@ ArdourStartup::move_along_now ()
 void
 ArdourStartup::recent_row_activated (const Gtk::TreePath&, Gtk::TreeViewColumn*)
 {
-       set_page_complete (session_vbox, true);
-       move_along_now ();
+       ic_existing_session_button.set_active (true);
+       ic_new_session_button.set_active (false);
+       set_page_type (ic_vbox, ASSISTANT_PAGE_CONFIRM);
+       set_page_complete (ic_vbox, true);
+       on_apply ();
 }
 
 void
 ArdourStartup::existing_session_selected ()
 {
+       ic_new_session_button.set_active (false);
+       ic_existing_session_button.set_active (true);
        _existing_session_chooser_used = true;
-
-       set_page_complete (session_vbox, true);
-       move_along_now ();
+       set_page_type (ic_vbox, ASSISTANT_PAGE_CONFIRM);
+       set_page_complete (ic_vbox, true);
+       on_apply ();
 }
 
 sys::path
index 052a168a3775b453cb0abab863df5851d50b0657..956af395efca0328026d756cf273f5eb9d377e4f 100644 (file)
@@ -136,15 +136,11 @@ class ArdourStartup : public Gtk::Assistant {
        Gtk::RadioButton no_monitor_section_button;
        void setup_monitor_section_choice_page ();
 
-       /* session page (could be new or existing) */
+       /* new session page */
 
-       void setup_session_page ();
-       Gtk::VBox session_vbox;
-       Gtk::HBox session_hbox;
-
-       /* recent sessions */
-
-       void setup_existing_session_page ();
+       void setup_new_session_page ();
+       Gtk::VBox new_session_vbox;
+       Gtk::HBox new_session_hbox;
 
        struct RecentSessionsSorter {
            bool operator() (std::pair<std::string,std::string> a, std::pair<std::string,std::string> b) const {
@@ -179,7 +175,6 @@ class ArdourStartup : public Gtk::Assistant {
 
        /* new sessions */
 
-       void setup_new_session_page ();
        Gtk::Entry new_name_entry;
        Gtk::FileChooserButton new_folder_chooser;
        Gtk::FileChooserButton session_template_chooser;
@@ -284,7 +279,7 @@ class ArdourStartup : public Gtk::Assistant {
        gint default_folder_page_index;
        gint monitoring_page_index;
        gint monitor_section_page_index;
-       gint session_page_index;
+       gint new_session_page_index;
        gint initial_choice_index;
        gint final_page_index;
        gint session_options_page_index;