Add language selection

This commit is contained in:
Ward from fusion-voyager-3 2024-01-16 23:22:32 +03:00
parent 89079b6de4
commit 769d077c9e
3 changed files with 97 additions and 57 deletions

View File

@ -54,40 +54,6 @@ pub fn build_ui(app: &adw::Application) {
.sensitive(false)
.build();
// create the bottom box for next and back buttons
let bottom_box = gtk::Box::builder()
.orientation(Orientation::Horizontal)
.visible(false)
.build();
// Next and back button
let bottom_back_button = gtk::Button::builder()
.label("Back")
.margin_top(15)
.margin_bottom(15)
.margin_start(15)
.margin_end(15)
.halign(gtk::Align::Start)
.hexpand(true)
.build();
let bottom_next_button = gtk::Button::builder()
.label("Next")
.margin_top(15)
.margin_bottom(15)
.margin_start(15)
.margin_end(15)
.halign(gtk::Align::End)
.hexpand(true)
.build();
// Start Applying css classes
bottom_next_button.add_css_class("suggested-action");
// / bottom_box appends
//// Add the next and back buttons
bottom_box.append(&bottom_back_button);
bottom_box.append(&bottom_next_button);
// / _main_box appends
//// Add the a title bar to the _main_box
_main_box.append(&window_title_bar);
@ -95,19 +61,8 @@ pub fn build_ui(app: &adw::Application) {
_main_box.append(&content_stack_switcher);
//// Add the stack pager containing all the steps to _main_box
_main_box.append(&content_stack);
//// Add the the next and back buttons box to _main_box
_main_box.append(&bottom_box);
// Add welcome_page.rs as a page for content_stack
welcome_page(&content_stack);
// if content_stack visible child becomes NOT content_stack, show the buttom box
content_stack.connect_visible_child_notify(clone!(@weak bottom_box => move |content_stack| {
let state = content_stack.visible_child_name().as_deref() != Some("welcome_page");
bottom_box.set_visible(state);
}));
// Add language_page.rs as a page for content_stack
language_page(&content_stack);
//// Add the the next and back buttons box to _main_box (moved)
///_main_box.append(&bottom_box);
// create the main Application window
let window = adw::ApplicationWindow::builder()
@ -132,6 +87,19 @@ pub fn build_ui(app: &adw::Application) {
// build the window
.build();
// Add welcome_page.rs as a page for content_stack
welcome_page(&window, &content_stack);
// bottom_box moved per page
// if content_stack visible child becomes NOT content_stack, show the buttom box
//content_stack.connect_visible_child_notify(clone!(@weak bottom_box => move |content_stack| {
// let state = content_stack.visible_child_name().as_deref() != Some("welcome_page");
// bottom_box.set_visible(state);
// }));
// Add language_page.rs as a page for content_stack
language_page(&content_stack);
// glib maximization
if glib_settings.boolean("is-maximized") == true {
window.maximize()
@ -145,9 +113,10 @@ pub fn build_ui(app: &adw::Application) {
// Connect the hiding of window to the save_window_size function and window destruction
window.connect_hide(clone!(@weak window => move |_| save_window_size(&window, &glib_settings)));
window.connect_hide(clone!(@weak window => move |_| window.destroy()));
let content_stack_clone = content_stack.clone();
let content_stack_clone2 = content_stack.clone();
bottom_next_button.connect_clicked(move |_| content_stack_clone.set_visible_child(&content_stack_clone.visible_child().expect("null").next_sibling().unwrap()));
bottom_back_button.connect_clicked(move |_| content_stack_clone2.set_visible_child(&content_stack_clone2.visible_child().expect("null").prev_sibling().unwrap()));
// bottom_box moved per page
//let content_stack_clone = content_stack.clone();
//let content_stack_clone2 = content_stack.clone();
//bottom_next_button.connect_clicked(move |_| content_stack_clone.set_visible_child(&content_stack_clone.visible_child().expect("null").next_sibling().unwrap()));
//bottom_back_button.connect_clicked(move |_| content_stack_clone2.set_visible_child(&content_stack_clone2.visible_child().expect("null").prev_sibling().unwrap()));
window.show();
}

View File

@ -11,6 +11,43 @@ use gdk::Display;
use gtk::subclass::layout_child;
pub fn language_page(content_stack: &gtk::Stack) {
// create the bottom box for next and back buttons
let bottom_box = gtk::Box::builder()
.orientation(Orientation::Horizontal)
.valign(gtk::Align::End)
.vexpand(true)
.build();
// Next and back button
let bottom_back_button = gtk::Button::builder()
.label("Back")
.margin_top(15)
.margin_bottom(15)
.margin_start(15)
.margin_end(15)
.halign(gtk::Align::Start)
.hexpand(true)
.build();
let bottom_next_button = gtk::Button::builder()
.label("Next")
.margin_top(15)
.margin_bottom(15)
.margin_start(15)
.margin_end(15)
.halign(gtk::Align::End)
.hexpand(true)
.sensitive(false)
.build();
// Start Applying css classes
bottom_next_button.add_css_class("suggested-action");
// / bottom_box appends
//// Add the next and back buttons
bottom_box.append(&bottom_back_button);
bottom_box.append(&bottom_next_button);
// the header box for the language page
let language_main_box = gtk::Box::builder()
.orientation(Orientation::Vertical)
@ -87,14 +124,34 @@ pub fn language_page(content_stack: &gtk::Stack) {
.build();
language_selection_expander_row.add_row(&null_checkbutton);
let null_checkbutton_clone = null_checkbutton.clone();
let language_selection_expander_row_clone2 = language_selection_expander_row.clone();
let bottom_next_button_clone = bottom_next_button.clone();
null_checkbutton.connect_toggled(move |_| {
if null_checkbutton_clone.is_active() == true {
language_selection_expander_row_clone2.set_title("No locale selected");
bottom_next_button_clone.set_sensitive(false);
}
});
for locale in locales {
let locale_label = gtk::CheckButton::builder()
let locale_checkbutton = gtk::CheckButton::builder()
.label(locale)
.build();
locale_label.set_group(Some(&null_checkbutton));
language_selection_expander_row.add_row(&locale_label);
locale_checkbutton.set_group(Some(&null_checkbutton));
language_selection_expander_row.add_row(&locale_checkbutton);
let language_selection_expander_row_clone = language_selection_expander_row.clone();
let locale_checkbutton_clone = locale_checkbutton.clone();
let bottom_next_button_clone2 = bottom_next_button.clone();
locale_checkbutton.connect_toggled(move |_| {
if locale_checkbutton_clone.is_active() == true {
language_selection_expander_row_clone.set_title(locale);
bottom_next_button_clone2.set_sensitive(true);
}
});
}
@ -114,7 +171,19 @@ pub fn language_page(content_stack: &gtk::Stack) {
//// Add the language selection/page content box to language main box
language_main_box.append(&language_selection_box);
language_main_box.append(&bottom_box);
// / Content stack appends
//// Add the language_main_box as page: language_page, Give it nice title
content_stack.add_titled(&language_main_box, Some("language_page"), "Language");
let content_stack_clone = content_stack.clone();
let content_stack_clone2 = content_stack.clone();
bottom_next_button.connect_clicked(move |_| {
content_stack_clone.set_visible_child_name("keyboard_page")
});
bottom_back_button.connect_clicked(move |_| {
content_stack_clone2.set_visible_child_name("welcome_page")
});
}

View File

@ -9,7 +9,7 @@ use glib::*;
use gdk::Display;
use gtk::subclass::layout_child;
pub fn welcome_page(content_stack: &gtk::Stack) {
pub fn welcome_page(window: &adw::ApplicationWindow, content_stack: &gtk::Stack) {
// the header box for the welcome page
let welcome_main_box = gtk::Box::builder()
.orientation(Orientation::Vertical)
@ -164,6 +164,8 @@ pub fn welcome_page(content_stack: &gtk::Stack) {
//// Add the welcome_main_box as page: welcome_page, Give it nice title
content_stack.add_titled(&welcome_main_box, Some("welcome_page"), "Welcome");
let content_stack_clone = content_stack.clone();
let window_clone = window.clone();
install_media_button.connect_clicked(move |_| content_stack_clone.set_visible_child_name("language_page"));
live_media_button.connect_clicked(move |_| window_clone.hide());
}