Part 1: Refine manual parting UI

This commit is contained in:
Ward from fusion-voyager-3 2024-11-27 19:29:22 +03:00
parent 8daf435472
commit 12936391d4
5 changed files with 91 additions and 16 deletions

View File

@ -14,7 +14,8 @@
"manual_method_button_label": "Manually Partition The Drive", "manual_method_button_label": "Manually Partition The Drive",
"automatic_method_button_label": "Automatically Partition\nThe Drive", "automatic_method_button_label": "Automatically Partition\nThe Drive",
"manual_partitioning_page_title": "Manual Disk Partitioning", "manual_partitioning_page_title": "Manual Disk Partitioning",
"manual_partitioning_page_subtitle": "Use This Page to Create a Custom Filesystem Table for PikaOS to install into.\nInstructions:\n 1 - Use The Partitioning Utility to Create New Partitions or Reformat and Reuse Existing Ones. \n 2 - The Mandatory System Partitons are:\n\t* 512MB+ Fat32/vfat Partition for /boot/efi (An Existing EFI Partition Can be Left Unformated and Used for /boot/efi in Order to Achieve Dual-Boot).\n\t* 1000MB+ EXT4 Partition for /boot (Can NOT Be Shared... Format MANDATORY!).\n\t* 26GB+ EXT4/BTRFS/XFS/F2FS Partition for / (a.k.a Root) (Can NOT Be Shared... Format MANDATORY!).\n 3 - This Installer Doesn't Erase Any Data Automatically, Format Your Drives MANUALLY Via The Partitioning Utility.\n 4 - Once All The Required Partitions are Present, Go Through The Systematic Filesystem Entries List, and Select The Correct Partition for The Entry\n 5 - Additional Mount Options Can be Left Empty.\n 6 - If a Filesystem Entry's Additional Mount Options Contain subvol, Duplicate Usage Checks for That Entry's Partition Will be Disabled, Allowing use of SUBVOLS.\n 7 - The User Can Add Additional Filesystem Entries in The Custom User Filesystem Entries List\n\tProvided He Defines A Mountpoint such as /home\n 8 - In Order To Add a linux-swap Partition Set Mountpoint to [SWAP]\n 9 - To Add LUKS Encrypted Partitions or Any Kind of Partition That Uses Mapper\n\tUse The Partitioning Utility to Map/Unlock Them, Then Their Mapping Will be Shown as Partition Selections.\n 10 - Once All That is Done Press The Validate Filesystem Table Button, If All is Well, It Will Allow You To Begin Installation.", "manual_partitioning_page_subtitle": "Use This Page to Create a Custom Filesystem Table for PikaOS to install into.",
"manual_partitioning_help_dialog_textview_buffer_text": "Instructions:\n 1 - Use The Partitioning Utility to Create New Partitions or Reformat and Reuse Existing Ones. \n 2 - The Mandatory System Partitons are:\n\t* 512MB+ Fat32/vfat Partition for /boot/efi (An Existing EFI Partition Can be Left Unformated and Used for /boot/efi in Order to Achieve Dual-Boot).\n\t* 1000MB+ EXT4 Partition for /boot (Can NOT Be Shared... Format MANDATORY!).\n\t* 26GB+ EXT4/BTRFS/XFS/F2FS Partition for / (a.k.a Root) (Can NOT Be Shared... Format MANDATORY!).\n 3 - This Installer Doesn't Erase Any Data Automatically, Format Your Drives MANUALLY Via The Partitioning Utility.\n 4 - Once All The Required Partitions are Present, Go Through The Systematic Filesystem Entries List, and Select The Correct Partition for The Entry\n 5 - Additional Mount Options Can be Left Empty.\n 6 - If a Filesystem Entry's Additional Mount Options Contain subvol, Duplicate Usage Checks for That Entry's Partition Will be Disabled, Allowing use of SUBVOLS.\n 7 - The User Can Add Additional Filesystem Entries in The Custom User Filesystem Entries List\n\tProvided He Defines A Mountpoint such as /home\n 8 - In Order To Add a linux-swap Partition Set Mountpoint to [SWAP]\n 9 - To Add LUKS Encrypted Partitions or Any Kind of Partition That Uses Mapper,\n\tUse The Partitioning Utility to Map/Unlock Them, Then Their Mapping Will be Shown as Partition Selections.\n 10 - Once All That is Done Press The Validate Filesystem Table Button, If All is Well, It Will Allow You To Begin Installation.",
"partition_row_subtitle_needs_mapper": "This partition needs a mapper!", "partition_row_subtitle_needs_mapper": "This partition needs a mapper!",
"language_page_title": "Select a Language", "language_page_title": "Select a Language",
"language_page_subtitle": "Please Select a Locale for The System to Use", "language_page_subtitle": "Please Select a Locale for The System to Use",
@ -141,5 +142,7 @@
"drive_mount_row_title_root": "Root Filesystem Entry", "drive_mount_row_title_root": "Root Filesystem Entry",
"drive_mount_row_subtitle_root": "This Entry's Partition Mounted at (/) Will Store The All The System Files and Applications. (Must Be Formatted)", "drive_mount_row_subtitle_root": "This Entry's Partition Mounted at (/) Will Store The All The System Files and Applications. (Must Be Formatted)",
"drive_mount_row_title_custom": "Custom User Filesystem Entry (ID: {ID})", "drive_mount_row_title_custom": "Custom User Filesystem Entry (ID: {ID})",
"drive_mount_row_subtitle_custom": "A Custom Filesystem Entry Added by You" "drive_mount_row_subtitle_custom": "A Custom Filesystem Entry Added by You",
"manual_partitioning_help_dialog_label": "OK",
"manual_partitioning_help_button_label": "Need Help?"
} }

View File

@ -289,8 +289,8 @@ pub fn automatic_partitioning_page(
let devices_selection_button_row_dialog = adw::AlertDialog::builder() let devices_selection_button_row_dialog = adw::AlertDialog::builder()
.extra_child(&devices_selection_button_row_viewport) .extra_child(&devices_selection_button_row_viewport)
.width_request(400) .width_request(600)
.height_request(400) .height_request(600)
.build(); .build();
devices_selection_button_row_dialog.add_response( devices_selection_button_row_dialog.add_response(

View File

@ -220,8 +220,8 @@ impl ObjectImpl for DriveMountRow {
let partition_button_row_dialog = adw::AlertDialog::builder() let partition_button_row_dialog = adw::AlertDialog::builder()
.extra_child(&partition_button_row_dialog_extra_child) .extra_child(&partition_button_row_dialog_extra_child)
.width_request(400) .width_request(600)
.height_request(400) .height_request(600)
.title(t!("devices_selection_button_row_dialog_manual_title")) .title(t!("devices_selection_button_row_dialog_manual_title"))
.body(t!("devices_selection_button_row_dialog_manual_body")) .body(t!("devices_selection_button_row_dialog_manual_body"))
.build(); .build();

View File

@ -3,7 +3,7 @@ use crate::{
config::{MINIMUM_BOOT_BYTE_SIZE, MINIMUM_EFI_BYTE_SIZE, MINIMUM_ROOT_BYTE_SIZE}, config::{MINIMUM_BOOT_BYTE_SIZE, MINIMUM_EFI_BYTE_SIZE, MINIMUM_ROOT_BYTE_SIZE},
drive_mount_row::DriveMountRow, drive_mount_row::DriveMountRow,
}; };
use adw::{prelude::*, ExpanderRow}; use adw::{prelude::*};
use glib::{clone, closure_local}; use glib::{clone, closure_local};
use gtk::{gio, glib}; use gtk::{gio, glib};
use std::{cell::RefCell, rc::Rc}; use std::{cell::RefCell, rc::Rc};
@ -61,8 +61,6 @@ pub fn create_efi_row(
row.set_mountpoint("/boot/efi"); row.set_mountpoint("/boot/efi");
row.set_expanded(true);
row.set_id(0); row.set_id(0);
let null_checkbutton = gtk::CheckButton::builder().build(); let null_checkbutton = gtk::CheckButton::builder().build();
@ -301,8 +299,6 @@ pub fn create_boot_row(
row.set_id(1); row.set_id(1);
row.set_expanded(true);
let null_checkbutton = gtk::CheckButton::builder().build(); let null_checkbutton = gtk::CheckButton::builder().build();
for partition in partition_array { for partition in partition_array {
@ -539,8 +535,6 @@ pub fn create_root_row(
row.set_id(2); row.set_id(2);
row.set_expanded(true);
let null_checkbutton = gtk::CheckButton::builder().build(); let null_checkbutton = gtk::CheckButton::builder().build();
for partition in partition_array { for partition in partition_array {
@ -793,8 +787,6 @@ pub fn create_mount_row(
(*extra_mount_id_refcell.borrow_mut()) += 1; (*extra_mount_id_refcell.borrow_mut()) += 1;
row.set_expanded(true);
let null_checkbutton = gtk::CheckButton::builder().build(); let null_checkbutton = gtk::CheckButton::builder().build();
for partition in partition_array { for partition in partition_array {

View File

@ -56,6 +56,70 @@ pub fn manual_partitioning_page(
.vexpand(true) .vexpand(true)
.build(); .build();
//
let manual_partitioning_help_dialog_button_listbox = gtk::ListBox::builder()
.selection_mode(gtk::SelectionMode::None)
.hexpand(true)
.halign(gtk::Align::End)
.margin_top(15)
.margin_bottom(15)
.margin_start(15)
.margin_end(15)
.build();
manual_partitioning_help_dialog_button_listbox.add_css_class("boxed-list");
let manual_partitioning_help_dialog_button = adw::ButtonRow::builder()
.start_icon_name("dialog-question-symbolic")
.build();
manual_partitioning_help_dialog_button_listbox.append(&manual_partitioning_help_dialog_button);
manual_partitioning_help_dialog_button_listbox.add_css_class("accent-blink");
let manual_partitioning_help_dialog_textview_buffer = gtk::TextBuffer::builder().build();
let manual_partitioning_help_dialog_textview = gtk::TextView::with_buffer(&manual_partitioning_help_dialog_textview_buffer);
/*let manual_partitioning_help_dialog_viewport_box = gtk::ListBox::builder()
.selection_mode(gtk::SelectionMode::None)
.build();
manual_partitioning_help_dialog_viewport_box.add_css_class("boxed-list");
manual_partitioning_help_dialog_viewport_box.add_css_class("no-round-borders");
manual_partitioning_help_dialog_viewport_box.append(&manual_partitioning_help_dialog_textview);*/
let manual_partitioning_help_dialog_viewport = gtk::ScrolledWindow::builder()
.vexpand(true)
.hexpand(true)
.has_frame(true)
.overflow(gtk::Overflow::Hidden)
.child(&manual_partitioning_help_dialog_textview)
.build();
let manual_partitioning_help_dialog = adw::AlertDialog::builder()
.extra_child(&manual_partitioning_help_dialog_viewport)
.width_request(600)
.height_request(500)
.build();
manual_partitioning_help_dialog.add_response(
"manual_partitioning_help_dialog",
"manual_partitioning_help_dialog_label",
);
manual_partitioning_help_dialog_button.connect_activated(clone!(
#[strong]
window,
#[strong]
manual_partitioning_help_dialog,
move |_| {
manual_partitioning_help_dialog.present(Some(&window));
}
));
//
let system_drive_mounts_adw_listbox_label = gtk::Label::builder() let system_drive_mounts_adw_listbox_label = gtk::Label::builder()
.hexpand(true) .hexpand(true)
.halign(gtk::Align::Start) .halign(gtk::Align::Start)
@ -66,6 +130,7 @@ pub fn manual_partitioning_page(
let system_drive_mounts_adw_listbox = gtk::ListBox::builder() let system_drive_mounts_adw_listbox = gtk::ListBox::builder()
//.selection_mode(gtk::SelectionMode::None) //.selection_mode(gtk::SelectionMode::None)
.show_separators(true)
.build(); .build();
system_drive_mounts_adw_listbox.add_css_class("boxed-list"); system_drive_mounts_adw_listbox.add_css_class("boxed-list");
system_drive_mounts_adw_listbox.add_css_class("no-round-borders"); system_drive_mounts_adw_listbox.add_css_class("no-round-borders");
@ -82,6 +147,7 @@ pub fn manual_partitioning_page(
let custom_drive_mounts_adw_listbox = gtk::ListBox::builder() let custom_drive_mounts_adw_listbox = gtk::ListBox::builder()
//.selection_mode(gtk::SelectionMode::None) //.selection_mode(gtk::SelectionMode::None)
.show_separators(true)
.build(); .build();
custom_drive_mounts_adw_listbox.add_css_class("boxed-list"); custom_drive_mounts_adw_listbox.add_css_class("boxed-list");
custom_drive_mounts_adw_listbox.add_css_class("no-round-borders"); custom_drive_mounts_adw_listbox.add_css_class("no-round-borders");
@ -454,6 +520,7 @@ pub fn manual_partitioning_page(
} }
)); ));
content_box.append(&manual_partitioning_help_dialog_button_listbox);
content_box.append(&system_drive_mounts_adw_listbox_label); content_box.append(&system_drive_mounts_adw_listbox_label);
content_box.append(&system_drive_mounts_viewport); content_box.append(&system_drive_mounts_viewport);
content_box.append(&custom_drive_mounts_adw_listbox_label); content_box.append(&custom_drive_mounts_adw_listbox_label);
@ -531,12 +598,25 @@ pub fn manual_partitioning_page(
system_drive_mounts_adw_listbox_label, system_drive_mounts_adw_listbox_label,
#[weak] #[weak]
custom_drive_mounts_adw_listbox_label, custom_drive_mounts_adw_listbox_label,
#[weak]
manual_partitioning_help_dialog,
#[weak]
manual_partitioning_help_dialog_button,
#[strong]
manual_partitioning_help_dialog_textview_buffer,
move |_, _| { move |_, _| {
manual_partitioning_page.set_page_title(t!("manual_partitioning_page_title")); manual_partitioning_page.set_page_title(t!("manual_partitioning_page_title"));
manual_partitioning_page.set_page_subtitle(t!("manual_partitioning_page_subtitle")); manual_partitioning_page.set_page_subtitle(t!("manual_partitioning_page_subtitle"));
manual_partitioning_page.set_back_tooltip_label(t!("back")); manual_partitioning_page.set_back_tooltip_label(t!("back"));
manual_partitioning_page.set_next_tooltip_label(t!("next")); manual_partitioning_page.set_next_tooltip_label(t!("next"));
// //
manual_partitioning_help_dialog.set_response_label(
"manual_partitioning_help_dialog",
&t!("manual_partitioning_help_dialog_label"),
);
manual_partitioning_help_dialog_textview_buffer.set_text(&t!("manual_partitioning_help_dialog_textview_buffer_text"));
manual_partitioning_help_dialog_button.set_title(&t!("manual_partitioning_help_button_label"));
//
system_drive_mounts_adw_listbox_label.set_label(&t!( system_drive_mounts_adw_listbox_label.set_label(&t!(
"system_drive_mounts_adw_listbox_label_label" "system_drive_mounts_adw_listbox_label_label"
)); ));
@ -671,7 +751,7 @@ fn set_crypttab_entries(
//.transient_for(&window) //.transient_for(&window)
//.hide_on_close(true) //.hide_on_close(true)
.extra_child(&crypttab_password_child_box) .extra_child(&crypttab_password_child_box)
.width_request(400) .width_request(600)
.height_request(200) .height_request(200)
.heading( .heading(
strfmt::strfmt( strfmt::strfmt(