From: Paul Davis Date: Tue, 14 Feb 2012 16:25:13 +0000 (+0000) Subject: rearrange startup/new session dialog to include new+recent sessions on same page X-Git-Tag: 3.0~2064 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=058715c525b6a238b17bfc75d47abaf7e6061e96;p=ardour.git rearrange startup/new session dialog to include new+recent sessions on same page git-svn-id: svn://localhost/ardour2/branches/3.0@11489 d708f5d6-7413-0410-9779-e7cbd77b26cf --- diff --git a/gtk2_ardour/startup.cc b/gtk2_ardour/startup.cc index 286aa7f813..18770df69e 100644 --- a/gtk2_ardour/startup.cc +++ b/gtk2_ardour/startup.cc @@ -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(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 diff --git a/gtk2_ardour/startup.h b/gtk2_ardour/startup.h index 052a168a37..956af395ef 100644 --- a/gtk2_ardour/startup.h +++ b/gtk2_ardour/startup.h @@ -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 a, std::pair 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;