diff --git a/gtk2_ardour/session_dialog.cc b/gtk2_ardour/session_dialog.cc index 298104f066..8d53b21a93 100644 --- a/gtk2_ardour/session_dialog.cc +++ b/gtk2_ardour/session_dialog.cc @@ -76,8 +76,16 @@ using namespace ARDOUR; using namespace ArdourWidgets; using namespace ARDOUR_UI_UTILS; +enum tab_page_numbers { + page_number_logo = 0, + page_number_new = 1, + page_number_recent = 2, + page_number_open = 3, + page_number_unused +}; + SessionDialog::SessionDialog (DialogTab initial_tab, const std::string& session_name, const std::string& session_path, const std::string& template_name, bool cancel_not_quit) - : ArdourDialog (initial_tab == New ? _("Session Setup") : _("Recent Sessions"), true, true) + : ArdourDialog (_("Select Session"), true, true) , _initial_tab (initial_tab) , new_name_was_edited (false) , new_folder_chooser (FILE_CHOOSER_ACTION_SELECT_FOLDER) @@ -113,46 +121,20 @@ SessionDialog::SessionDialog (DialogTab initial_tab, const std::string& session_ /* no update message for trax, show license here */ _open_table.attach (_info_box, 1,3, 0,1, FILL, FILL, 0, 6); #endif - - new_button.set_text("NEW"); - new_button.set_name ("tab button"); - new_button.signal_button_press_event().connect (sigc::mem_fun (*this, &SessionDialog::new_button_pressed), false); - new_button.set_tweaks(ArdourButton::Tweaks(ArdourButton::ForceFlat)); - - recent_button.set_text("RECENT"); - recent_button.set_name ("tab button"); - recent_button.signal_button_press_event().connect (sigc::mem_fun (*this, &SessionDialog::recent_button_pressed), false); - recent_button.set_tweaks(ArdourButton::Tweaks(ArdourButton::ForceFlat)); - - existing_button.set_text("OPEN"); - existing_button.set_name ("tab button"); - existing_button.signal_button_press_event().connect (sigc::mem_fun (*this, &SessionDialog::existing_button_pressed), false); - existing_button.set_tweaks(ArdourButton::Tweaks(ArdourButton::ForceFlat)); - - prefs_button.set_text("SETTINGS"); - prefs_button.set_name ("tab button"); - prefs_button.signal_button_press_event().connect (sigc::mem_fun (*this, &SessionDialog::prefs_button_pressed), false); - prefs_button.set_tweaks(ArdourButton::Tweaks(ArdourButton::ForceFlat)); - - Glib::RefPtr grp = SizeGroup::create (Gtk::SIZE_GROUP_BOTH); - grp->add_widget(new_button); - grp->add_widget(recent_button); - grp->add_widget(existing_button); int top = 0; int row = 0; + // page_number_logo = 0 + Gtk::Image* image; if (find_file (rc, PROGRAM_NAME "-small-splash.png", image_path)) { - Gtk::Image* image; - if ((image = manage (new Gtk::Image (image_path))) != 0) { - _open_table.attach (*image, 0,1, row , row + 1, FILL, FILL); ++row; - grp->add_widget (*image); - } + image = manage (new Gtk::Image (image_path)); + } + if (image != 0) { + _tabs.append_page (logo_empty_page, *image); + } else { + _tabs.append_page (logo_empty_page, PROGRAM_NAME); } - - _open_table.attach (new_button, 0,1, row, row + 1, FILL, FILL); ++row; - _open_table.attach (recent_button, 0,1, row, row + 1, FILL, FILL); ++row; - _open_table.attach (existing_button, 0,1, row, row + 1, FILL, FILL); ++row; ++row; Label *vspacer = manage (new Label()); @@ -160,12 +142,15 @@ SessionDialog::SessionDialog (DialogTab initial_tab, const std::string& session_ _open_table.attach (*vspacer, 1,2, top, row, FILL, FILL|EXPAND, 0, 0); _open_table.attach (_tabs, 2,3, top, row, FILL|EXPAND, FILL|EXPAND, 0, 0); - _tabs.set_show_tabs(false); + _tabs.set_tab_pos (POS_LEFT); _tabs.set_show_border(false); - _tabs.append_page(session_new_vbox); - _tabs.append_page(recent_vbox); - _tabs.append_page(existing_session_chooser); + // add page_number_new = 1 + _tabs.append_page (session_new_vbox, "_New", true); + // add page_number_recent = 2 + _tabs.append_page (recent_vbox, "_Recent", true); + // add page_number_open = 3 + _tabs.append_page (existing_session_chooser, "Op_en", true); session_new_vbox.show_all(); recent_vbox.show_all(); @@ -178,8 +163,8 @@ SessionDialog::SessionDialog (DialogTab initial_tab, const std::string& session_ open_button = add_button (Stock::OPEN, RESPONSE_ACCEPT); open_button->signal_button_press_event().connect (sigc::mem_fun (*this, &SessionDialog::open_button_pressed), false); - _disable_plugins.set_label (_("Safe Mode: Disable all Plugins")); - _disable_plugins.set_can_focus (); + _disable_plugins.set_label (_("Safe Mode: _Disable all Plugins")); + _disable_plugins.set_use_underline (); _disable_plugins.set_relief (Gtk::RELIEF_NORMAL); _disable_plugins.set_mode (true); _disable_plugins.set_active (ARDOUR::Session::get_disable_all_loaded_plugins()); @@ -241,16 +226,16 @@ SessionDialog::on_show () { ArdourDialog::on_show (); - _tabs.set_current_page(3); // force change + _tabs.set_current_page (page_number_unused); // force change switch (_initial_tab) { case New: - _tabs.set_current_page(0); + _tabs.set_current_page (page_number_new); break; case Open: - _tabs.set_current_page(2); + _tabs.set_current_page (page_number_open); break; default: - _tabs.set_current_page(1); + _tabs.set_current_page (page_number_recent); break; } } @@ -258,27 +243,24 @@ SessionDialog::on_show () void SessionDialog::tab_page_switched(GtkNotebookPage*, guint page_number) { - /* clang-format off */ - new_button.set_active_state (page_number==0 ? Gtkmm2ext::ExplicitActive : Gtkmm2ext::Off); - recent_button.set_active_state (page_number==1 ? Gtkmm2ext::ExplicitActive : Gtkmm2ext::Off); - existing_button.set_active_state (page_number==2 ? Gtkmm2ext::ExplicitActive : Gtkmm2ext::Off); - prefs_button.set_active_state (page_number==3 ? Gtkmm2ext::ExplicitActive : Gtkmm2ext::Off); - /* clang-format on */ - //check the status of each tab and sensitize the 'open' button appropriately open_button->set_sensitive(false); switch (page_number) { - case 0: + case page_number_logo: + _tabs.set_current_page (1); + break; + case page_number_new: new_name_changed(); new_name_entry.select_region (0, -1); new_name_entry.grab_focus (); _disable_plugins.hide (); break; - case 1: + case page_number_recent: recent_session_row_selected(); + recent_session_display.grab_focus (); _disable_plugins.show (); break; - case 2: + case page_number_open: existing_file_selected(); _disable_plugins.show (); break; @@ -391,13 +373,13 @@ std::string SessionDialog::session_name (bool& should_be_new) { switch (_tabs.get_current_page()) { - case 0: { + case page_number_new: { should_be_new = true; string val = new_name_entry.get_text (); strip_whitespace_edges (val); return val; } break; - case 1: { + case page_number_recent: { /* Try recent session selection */ TreeIter iter = recent_session_display.get_selection()->get_selected(); if (iter) { @@ -409,7 +391,7 @@ SessionDialog::session_name (bool& should_be_new) return (*iter)[recent_session_columns.visible_name]; } } break; - case 2: { + case page_number_open: { /* existing session chosen from file chooser */ should_be_new = false; return existing_session_chooser.get_filename (); @@ -423,14 +405,14 @@ std::string SessionDialog::session_folder () { switch (_tabs.get_current_page()) { - case 0: + case page_number_new: { std::string val = new_name_entry.get_text(); strip_whitespace_edges (val); std::string legal_session_folder_name = legalize_for_path (val); return Glib::build_filename (new_folder_chooser.get_filename (), legal_session_folder_name); } - case 1: + case page_number_recent: { /* Try recent session selection */ TreeIter iter = recent_session_display.get_selection()->get_selected(); @@ -443,7 +425,7 @@ SessionDialog::session_folder () } } break; - case 2: + case page_number_open: /* existing session chosen from file chooser */ return Glib::path_get_dirname (existing_session_chooser.get_current_folder ()); default: @@ -529,7 +511,7 @@ SessionDialog::setup_existing_box () void SessionDialog::existing_file_selected () { - if (_tabs.get_current_page()!=2) { + if (_tabs.get_current_page () != page_number_open) { //gtk filechooser is threaded; don't allow it to mess with open_button sensitivity when it's not actually visible return; } @@ -578,45 +560,6 @@ SessionDialog::existing_file_selected () open_button->set_sensitive(true); //still potentially openable; checks for session archives, .ptf, and .aaf will have to occur later } -void -SessionDialog::session_selected () -{ -} - -bool -SessionDialog::new_button_pressed (GdkEventButton*) -{ - _tabs.set_current_page(0); - - return true; -} - -bool -SessionDialog::recent_button_pressed (GdkEventButton*) -{ - _tabs.set_current_page(1); - - return true; -} - -bool -SessionDialog::existing_button_pressed (GdkEventButton*) -{ - _tabs.set_current_page(2); - - return true; -} - -bool -SessionDialog::prefs_button_pressed (GdkEventButton*) -{ - _tabs.set_current_page(3); - - open_button->set_sensitive(false); //do not allow to open a session from this page - - return true; -} - bool SessionDialog::open_button_pressed (GdkEventButton* ev) { @@ -743,7 +686,9 @@ SessionDialog::setup_new_session_page () session_new_vbox.set_spacing (8); Label* name_label = manage (new Label); - name_label->set_text (_("Session name:")); + name_label->set_text (_("_Session name:")); + name_label->set_use_underline (); + name_label->set_mnemonic_widget (new_name_entry); HBox* name_hbox = manage (new HBox); name_hbox->set_spacing (8); @@ -756,7 +701,9 @@ SessionDialog::setup_new_session_page () //Folder location for the new session Label* new_folder_label = manage (new Label); - new_folder_label->set_text (_("Create session folder in:")); + new_folder_label->set_text (_("_Create session folder in:")); + new_folder_label->set_use_underline (); + new_folder_label->set_mnemonic_widget (new_folder_chooser); HBox* folder_box = manage (new HBox); folder_box->set_spacing (8); folder_box->pack_start (*new_folder_label, false, false); @@ -784,7 +731,9 @@ SessionDialog::setup_new_session_page () //Timebase for the new session Label* session_domain_label = manage (new Label); - session_domain_label->set_text (_("Default Time Domain:")); + session_domain_label->set_text (_("_Default Time Domain:")); + session_domain_label->set_use_underline (); + session_domain_label->set_mnemonic_widget (timebase_chooser); HBox* timebase_box = manage (new HBox); timebase_box->set_spacing (8); timebase_box->pack_start (*session_domain_label, false, false); @@ -834,12 +783,9 @@ SessionDialog::setup_new_session_page () //template_chooser is the treeview showing available templates template_model = TreeStore::create (session_template_columns); template_chooser.set_model (template_model); - template_chooser.append_column (_("Template"), session_template_columns.name); + template_chooser.append_column (_("_Template"), session_template_columns.name); // single column header has value as mnemonic #ifdef MIXBUS template_chooser.append_column (_("Modified With"), session_template_columns.modified_with_short); - template_chooser.set_headers_visible (true); -#else - template_chooser.set_headers_visible (false); //there is only one column and its purpose should be obvious #endif template_chooser.get_selection()->set_mode (SELECTION_SINGLE); template_chooser.get_selection()->signal_changed().connect (sigc::mem_fun (*this, &SessionDialog::template_row_selected)); @@ -895,7 +841,6 @@ SessionDialog::new_name_changed () } if (!new_name_entry.get_text().empty()) { - session_selected (); open_button->set_sensitive (true); } else { open_button->set_sensitive (false); @@ -1156,7 +1101,6 @@ SessionDialog::recent_session_row_selected () { if (recent_session_display.get_selection()->count_selected_rows() > 0) { open_button->set_sensitive (true); - session_selected (); } else { open_button->set_sensitive (false); } diff --git a/gtk2_ardour/session_dialog.h b/gtk2_ardour/session_dialog.h index 7896e306ad..a6c2b7eb94 100644 --- a/gtk2_ardour/session_dialog.h +++ b/gtk2_ardour/session_dialog.h @@ -59,8 +59,7 @@ public: { New = 0, Recent, - Open, - Prefs + Open }; SessionDialog (DialogTab initial_tab, const std::string& session_name, const std::string& session_path, @@ -93,30 +92,12 @@ private: Gtk::Button* open_button; Gtk::Button* quit_button; - ArdourWidgets::ArdourButton new_button; - ArdourWidgets::ArdourButton recent_button; - ArdourWidgets::ArdourButton existing_button; - ArdourWidgets::ArdourButton prefs_button; - - Gtk::ComboBoxText timebase_chooser; - - bool new_button_pressed (GdkEventButton*); - bool recent_button_pressed (GdkEventButton*); - bool existing_button_pressed (GdkEventButton*); - bool prefs_button_pressed (GdkEventButton*); - bool open_button_pressed (GdkEventButton*); - Gtk::HBox _info_box; - Gtk::Table _open_table; /* initial choice page */ - void setup_existing_box (); - void setup_recent_sessions (); - Gtk::VBox recent_vbox; - DialogTab _initial_tab; #ifdef MIXBUS @@ -125,9 +106,16 @@ private: void license_button_clicked (); #endif + /* tabs */ + + Gtk::Notebook _tabs; + Gtk::VBox logo_empty_page; + void tab_page_switched (GtkNotebookPage*, guint page_number); + /* recent sessions */ - void setup_existing_session_page (); + void setup_recent_sessions (); + Gtk::VBox recent_vbox; struct RecentSessionsSorter { @@ -163,7 +151,7 @@ private: Glib::RefPtr recent_session_model; Gtk::ScrolledWindow recent_scroller; Gtk::Label recent_label; - Gtk::FileChooserWidget existing_session_chooser; + int redisplay_recent_sessions (); void recent_session_row_selected (); void recent_session_sort_changed (); @@ -172,12 +160,7 @@ private: void recent_context_mennu (GdkEventButton*); void recent_remove_selected (); - void session_selected (); - - void existing_file_selected(); - void existing_file_activated (); - - /* new sessions */ + /* new sessions (and template stuff) */ void setup_new_session_page (); Gtk::Entry new_name_entry; @@ -224,7 +207,15 @@ private: void new_name_activated (); void populate_session_templates (); - void tab_page_switched(GtkNotebookPage*, guint page_number); + Gtk::ComboBoxText timebase_chooser; + + /* open existing session */ + + void setup_existing_session_page (); + void setup_existing_box (); + Gtk::FileChooserWidget existing_session_chooser; + void existing_file_selected (); + void existing_file_activated (); /* --disable plugins UI */ Gtk::CheckButton _disable_plugins; @@ -235,15 +226,12 @@ private: /* always there */ - Glib::RefPtr layout; - + Gtk::HBox _info_box; Gtk::Label info_scroller_label; std::string::size_type info_scroller_count; bool info_scroller_update(); sigc::connection info_scroller_connection; void updates_button_clicked (); - - Gtk::Notebook _tabs; }; #endif /* __gtk2_ardour_session_dialog_h__ */ diff --git a/libs/tk/ytk/gtknotebook.c b/libs/tk/ytk/gtknotebook.c index 21095520a6..959cfe5da8 100644 --- a/libs/tk/ytk/gtknotebook.c +++ b/libs/tk/ytk/gtknotebook.c @@ -6596,8 +6596,8 @@ gtk_notebook_mnemonic_activate_switch_page (GtkWidget *child, GtkNotebookPage *page = list->data; gtk_widget_grab_focus (GTK_WIDGET (notebook)); /* Do this first to avoid focusing new page */ - gtk_notebook_switch_page (notebook, page); focus_tabs_in (notebook); + gtk_notebook_switch_page (notebook, page); } return TRUE;