pika-installer-gtk4/src/build_ui.rs

119 lines
4.4 KiB
Rust
Raw Normal View History

2024-08-19 01:12:35 +02:00
use crate::{
efi_error_page, eula_page, keyboard_page, language_page,
partitioning_page::{self, CrypttabEntry, FstabEntry},
timezone_page, welcome_page,
};
use gtk::{gio, glib, prelude::*};
use std::{cell::RefCell, path::Path, rc::Rc};
2024-01-20 18:48:32 +01:00
2024-01-14 22:31:40 +01:00
pub fn build_ui(app: &adw::Application) {
2024-08-19 01:50:56 +02:00
glib::set_prgname(Some("application_name"));
glib::set_application_name(&t!("application_name"));
2024-01-14 22:31:40 +01:00
2024-08-04 22:56:30 +02:00
let carousel = adw::Carousel::builder()
.allow_long_swipes(false)
.allow_mouse_drag(false)
.allow_scroll_wheel(false)
.interactive(false)
.vexpand(true)
.hexpand(true)
2024-01-14 22:31:40 +01:00
.build();
2024-02-16 22:21:09 +01:00
2024-08-04 22:56:30 +02:00
let carousel_indicator = adw::CarouselIndicatorDots::builder()
.carousel(&carousel)
.build();
2024-01-14 22:31:40 +01:00
2024-08-04 22:56:30 +02:00
let window_headerbar = adw::HeaderBar::builder()
.show_start_title_buttons(true)
.title_widget(&carousel_indicator)
2024-01-14 22:31:40 +01:00
.build();
2024-02-16 22:21:09 +01:00
2024-08-04 22:56:30 +02:00
let toolbarview = adw::ToolbarView::builder()
.top_bar_style(adw::ToolbarStyle::Flat)
.content(&carousel)
2024-01-14 22:31:40 +01:00
.build();
2024-02-16 22:21:09 +01:00
2024-08-04 22:56:30 +02:00
toolbarview.add_top_bar(&window_headerbar);
2024-02-17 14:52:07 +01:00
2024-01-14 22:31:40 +01:00
let window = adw::ApplicationWindow::builder()
2024-08-19 01:50:56 +02:00
.title(t!("application_name"))
2024-01-14 22:31:40 +01:00
.application(app)
2024-01-24 20:17:19 +01:00
.icon_name("calamares")
2024-01-14 22:31:40 +01:00
.width_request(700)
.height_request(500)
2024-08-04 22:56:30 +02:00
.default_width(700)
.default_height(500)
.deletable(false)
2024-08-04 22:56:30 +02:00
.content(&toolbarview)
2024-01-14 22:31:40 +01:00
.startup_id("pika-installer-gtk4")
.build();
2024-02-16 22:21:09 +01:00
2024-08-04 22:56:30 +02:00
match Path::new("/sys/firmware/efi/efivars").exists() {
2024-08-05 02:25:05 +02:00
true => welcome_page::welcome_page(&window, &carousel),
2024-08-19 01:12:35 +02:00
_ => efi_error_page::efi_error_page(&window, &carousel),
2024-01-14 22:31:40 +01:00
}
2024-08-05 02:25:05 +02:00
2024-08-15 20:07:01 +02:00
let language_selection_text_refcell: Rc<RefCell<String>> = Rc::new(RefCell::default());
let keymap_base_selection_text_refcell: Rc<RefCell<String>> = Rc::new(RefCell::default());
let keymap_varient_selection_text_refcell: Rc<RefCell<String>> = Rc::new(RefCell::default());
let timezone_selection_text_refcell: Rc<RefCell<String>> = Rc::new(RefCell::default());
let partition_method_type_refcell: Rc<RefCell<String>> = Rc::new(RefCell::default());
2024-08-19 01:12:35 +02:00
let partition_method_automatic_target_refcell: Rc<RefCell<String>> =
Rc::new(RefCell::default());
let partition_method_automatic_target_fs_refcell: Rc<RefCell<String>> =
Rc::new(RefCell::default());
let partition_method_automatic_luks_enabled_refcell: Rc<RefCell<bool>> =
Rc::new(RefCell::new(false));
2024-08-15 20:07:01 +02:00
let partition_method_automatic_luks_refcell: Rc<RefCell<String>> = Rc::new(RefCell::default());
2024-08-16 06:18:37 +02:00
let partition_method_automatic_ratio_refcell: Rc<RefCell<f64>> = Rc::new(RefCell::new(0.0));
2024-08-19 01:12:35 +02:00
let partition_method_automatic_seperation_refcell: Rc<RefCell<String>> =
Rc::new(RefCell::default());
let partition_method_manual_fstab_entry_array_refcell: Rc<RefCell<Vec<FstabEntry>>> =
Rc::new(RefCell::new(Vec::new()));
let partition_method_manual_luks_enabled_refcell: Rc<RefCell<bool>> =
Rc::new(RefCell::new(false));
let partition_method_manual_crypttab_entry_array_refcell: Rc<RefCell<Vec<CrypttabEntry>>> =
Rc::new(RefCell::new(Vec::new()));
2024-08-13 23:13:09 +02:00
2024-08-06 17:03:11 +02:00
let language_changed_action = gio::SimpleAction::new("lang-changed", None);
2024-08-19 01:12:35 +02:00
language_page::language_page(
&carousel,
&language_selection_text_refcell,
&language_changed_action,
);
2024-08-06 18:08:03 +02:00
eula_page::eula_page(&carousel, &language_changed_action);
2024-02-16 22:21:09 +01:00
2024-08-19 01:12:35 +02:00
keyboard_page::keyboard_page(
&carousel,
&keymap_base_selection_text_refcell,
&keymap_varient_selection_text_refcell,
&language_changed_action,
);
2024-08-06 22:56:10 +02:00
2024-08-19 01:12:35 +02:00
timezone_page::timezone_page(
&carousel,
&timezone_selection_text_refcell,
&language_changed_action,
);
2024-08-07 01:02:56 +02:00
2024-08-15 01:03:18 +02:00
partitioning_page::partitioning_page(
2024-08-19 01:12:35 +02:00
&carousel,
2024-08-19 22:42:36 +02:00
window.clone(),
2024-08-19 01:12:35 +02:00
&partition_method_type_refcell,
&partition_method_automatic_target_refcell,
&partition_method_automatic_target_fs_refcell,
&partition_method_automatic_luks_enabled_refcell,
&partition_method_automatic_luks_refcell,
&partition_method_automatic_ratio_refcell,
&partition_method_automatic_seperation_refcell,
&partition_method_manual_fstab_entry_array_refcell,
&partition_method_manual_luks_enabled_refcell,
&partition_method_manual_crypttab_entry_array_refcell,
&language_changed_action,
);
2024-08-07 01:27:24 +02:00
2024-08-04 22:56:30 +02:00
window.present()
2024-08-19 01:12:35 +02:00
}