From 946c68d2d6a8da72a262eb7228f4d24a0272d288 Mon Sep 17 00:00:00 2001 From: Ward from fusion-voyager-3 Date: Tue, 26 Nov 2024 23:51:04 +0300 Subject: [PATCH] basic separtation between custom and system mount point --- src/manual_partitioning_page/mod.rs | 189 ++++++++++++++++------------ 1 file changed, 109 insertions(+), 80 deletions(-) diff --git a/src/manual_partitioning_page/mod.rs b/src/manual_partitioning_page/mod.rs index 70b4602..123d666 100644 --- a/src/manual_partitioning_page/mod.rs +++ b/src/manual_partitioning_page/mod.rs @@ -56,24 +56,99 @@ pub fn manual_partitioning_page( .vexpand(true) .build(); - let drive_mounts_adw_listbox = gtk::ListBox::builder() + let system_drive_mounts_adw_listbox = gtk::ListBox::builder() .selection_mode(gtk::SelectionMode::None) .build(); - drive_mounts_adw_listbox.add_css_class("boxed-list"); - drive_mounts_adw_listbox.add_css_class("no-round-borders"); + system_drive_mounts_adw_listbox.add_css_class("boxed-list"); + system_drive_mounts_adw_listbox.add_css_class("no-round-borders"); - let drive_mounts_viewport = gtk::ScrolledWindow::builder() + let custom_drive_mounts_adw_listbox = gtk::ListBox::builder() + .selection_mode(gtk::SelectionMode::None) + .build(); + custom_drive_mounts_adw_listbox.add_css_class("boxed-list"); + custom_drive_mounts_adw_listbox.add_css_class("no-round-borders"); + + let system_drive_mounts_viewport = gtk::ScrolledWindow::builder() .vexpand(true) .hexpand(true) .has_frame(true) .overflow(gtk::Overflow::Hidden) - .child(&drive_mounts_adw_listbox) + .child(&system_drive_mounts_adw_listbox) .build(); - drive_mounts_viewport.add_css_class("round-all-scroll-no-padding"); + system_drive_mounts_viewport.add_css_class("round-all-scroll-no-padding"); + + let custom_drive_mounts_viewport = gtk::ScrolledWindow::builder() + .vexpand(true) + .hexpand(true) + .has_frame(true) + .overflow(gtk::Overflow::Hidden) + .child(&custom_drive_mounts_adw_listbox) + .build(); + + custom_drive_mounts_viewport.add_css_class("round-all-scroll-no-padding"); + + let drive_mount_add_button_icon = gtk::Image::builder() + .icon_name("list-add") + .halign(gtk::Align::Start) + .build(); + + let drive_mount_add_button_label = gtk::Label::builder() + .label(t!("drive_mount_add_button_label")) + .halign(gtk::Align::Center) + .hexpand(true) + .build(); + + let drive_mount_add_button_child_box = gtk::Box::new(gtk::Orientation::Horizontal, 0); + + drive_mount_add_button_child_box.append(&drive_mount_add_button_icon); + drive_mount_add_button_child_box.append(&drive_mount_add_button_label); + + let drive_mount_add_button = gtk::Button::builder() + .child(&drive_mount_add_button_child_box) + .hexpand(true) + .margin_top(10) + .margin_bottom(10) + //.margin_start(10) + //.margin_end(10) + .build(); + + drive_mount_add_button.connect_clicked(clone!( + #[weak] + custom_drive_mounts_adw_listbox, + #[strong] + drive_rows_size_group, + #[strong] + window, + #[strong] + partition_array_refcell, + #[strong] + partition_changed_action, + #[strong] + language_changed_action, + #[strong] + used_partition_array_refcell, + #[strong] + subvol_partition_array_refcell, + #[strong] + extra_mount_id_refcell, + move |_| { + func::create_mount_row( + &custom_drive_mounts_adw_listbox, + window.clone(), + &drive_rows_size_group, + &partition_array_refcell.borrow(), + &partition_changed_action, + &language_changed_action, + &used_partition_array_refcell, + &subvol_partition_array_refcell, + &extra_mount_id_refcell, + ); + } + )); create_hardcoded_rows( - &drive_mounts_adw_listbox, + &system_drive_mounts_adw_listbox, window.clone(), &drive_rows_size_group, &partition_array_refcell, @@ -81,7 +156,6 @@ pub fn manual_partitioning_page( language_changed_action, &used_partition_array_refcell, &subvol_partition_array_refcell, - &extra_mount_id_refcell, ); let open_disk_utility_button = gtk::Button::builder() @@ -161,7 +235,9 @@ pub fn manual_partitioning_page( filesystem_table_refresh_button.connect_clicked(clone!( #[weak] - drive_mounts_adw_listbox, + system_drive_mounts_adw_listbox, + #[weak] + custom_drive_mounts_adw_listbox, #[weak] drive_rows_size_group, #[strong] @@ -199,10 +275,12 @@ pub fn manual_partitioning_page( #[strong] window, move |_| { - while let Some(row) = drive_mounts_adw_listbox.last_child() { - drive_mounts_adw_listbox.remove(&row); + while let Some(row) = system_drive_mounts_adw_listbox.last_child() { + system_drive_mounts_adw_listbox.remove(&row); + } + while let Some(row) = custom_drive_mounts_adw_listbox.last_child() { + custom_drive_mounts_adw_listbox.remove(&row); } - (*partition_method_manual_fstab_entry_array_refcell.borrow_mut()) = Vec::new(); (*partition_method_manual_luks_enabled_refcell.borrow_mut()) = false; (*partition_method_manual_crypttab_entry_array_refcell.borrow_mut()) = Vec::new(); @@ -217,7 +295,7 @@ pub fn manual_partitioning_page( partition_method_manual_valid_label.set_visible(false); manual_partitioning_page.set_next_sensitive(false); create_hardcoded_rows( - &drive_mounts_adw_listbox, + &system_drive_mounts_adw_listbox, window.clone(), &drive_rows_size_group, &partition_array_refcell, @@ -225,14 +303,13 @@ pub fn manual_partitioning_page( &language_changed_action, &used_partition_array_refcell, &subvol_partition_array_refcell, - &extra_mount_id_refcell, ); } )); filesystem_table_validate_button.connect_clicked(clone!( #[weak] - drive_mounts_adw_listbox, + system_drive_mounts_adw_listbox, #[strong] window, #[strong] @@ -272,7 +349,7 @@ pub fn manual_partitioning_page( partition_method_manual_valid_label.set_visible(false); manual_partitioning_page.set_next_sensitive(false); - for fs_entry in generate_filesystem_table_array(&drive_mounts_adw_listbox) { + for fs_entry in generate_filesystem_table_array(&system_drive_mounts_adw_listbox, &custom_drive_mounts_adw_listbox) { let fs_entry_clone0 = fs_entry.clone(); if subvol_partition_array_refcell.borrow().is_empty() && !seen_partitions.insert(fs_entry.clone().partition.part_name) @@ -358,7 +435,9 @@ pub fn manual_partitioning_page( } )); - content_box.append(&drive_mounts_viewport); + content_box.append(&system_drive_mounts_viewport); + content_box.append(&drive_mount_add_button); + content_box.append(&custom_drive_mounts_viewport); content_box.append(&utility_buttons_box); content_box.append(&partition_method_manual_mountpoint_empty_error_label); content_box.append(&partition_method_manual_mountpoint_invalid_error_label); @@ -458,7 +537,7 @@ pub fn manual_partitioning_page( } fn create_hardcoded_rows( - drive_mounts_adw_listbox: >k::ListBox, + system_drive_mounts_adw_listbox: >k::ListBox, window: adw::ApplicationWindow, drive_rows_size_group: >k::SizeGroup, partition_array_refcell: &Rc>>, @@ -466,32 +545,9 @@ fn create_hardcoded_rows( language_changed_action: &gio::SimpleAction, used_partition_array_refcell: &Rc>>, subvol_partition_array_refcell: &Rc>>, - extra_mount_id_refcell: &Rc>, ) { - let drive_mount_add_button_icon = gtk::Image::builder() - .icon_name("list-add") - .halign(gtk::Align::Start) - .build(); - - let drive_mount_add_button_label = gtk::Label::builder() - .label(t!("drive_mount_add_button_label")) - .halign(gtk::Align::Center) - .hexpand(true) - .build(); - - let drive_mount_add_button_child_box = gtk::Box::new(gtk::Orientation::Horizontal, 0); - - drive_mount_add_button_child_box.append(&drive_mount_add_button_icon); - drive_mount_add_button_child_box.append(&drive_mount_add_button_label); - - let drive_mount_add_button = gtk::Button::builder() - .child(&drive_mount_add_button_child_box) - .vexpand(true) - .hexpand(true) - .build(); - func::create_efi_row( - drive_mounts_adw_listbox, + system_drive_mounts_adw_listbox, window.clone(), drive_rows_size_group, &partition_array_refcell.borrow(), @@ -501,7 +557,7 @@ fn create_hardcoded_rows( subvol_partition_array_refcell, ); func::create_boot_row( - drive_mounts_adw_listbox, + system_drive_mounts_adw_listbox, window.clone(), drive_rows_size_group, &partition_array_refcell.borrow(), @@ -511,7 +567,7 @@ fn create_hardcoded_rows( subvol_partition_array_refcell, ); func::create_root_row( - drive_mounts_adw_listbox, + system_drive_mounts_adw_listbox, window.clone(), drive_rows_size_group, &partition_array_refcell.borrow(), @@ -520,45 +576,18 @@ fn create_hardcoded_rows( used_partition_array_refcell, subvol_partition_array_refcell, ); - - drive_mounts_adw_listbox.append(&drive_mount_add_button); - - drive_mount_add_button.connect_clicked(clone!( - #[weak] - drive_mounts_adw_listbox, - #[strong] - drive_rows_size_group, - #[strong] - partition_array_refcell, - #[strong] - partition_changed_action, - #[strong] - language_changed_action, - #[strong] - used_partition_array_refcell, - #[strong] - subvol_partition_array_refcell, - #[strong] - extra_mount_id_refcell, - move |_| { - func::create_mount_row( - &drive_mounts_adw_listbox, - window.clone(), - &drive_rows_size_group, - &partition_array_refcell.borrow(), - &partition_changed_action, - &language_changed_action, - &used_partition_array_refcell, - &subvol_partition_array_refcell, - &extra_mount_id_refcell, - ); - } - )); } -fn generate_filesystem_table_array(drive_mounts_adw_listbox: >k::ListBox) -> Vec { +fn generate_filesystem_table_array(system_drive_mounts_adw_listbox: >k::ListBox, custom_drive_mounts_adw_listbox: >k::ListBox) -> Vec { let mut fstab_array: Vec = Vec::new(); - let mut widget_counter = drive_mounts_adw_listbox.first_child(); + let mut widget_counter = system_drive_mounts_adw_listbox.first_child(); + while let Some(ref child) = widget_counter { + if let Ok(t) = child.clone().downcast::() { + fstab_array.push(DriveMountRow::get_fstab_entry(&t)); + } + widget_counter = child.next_sibling(); + } + let mut widget_counter = custom_drive_mounts_adw_listbox.first_child(); while let Some(ref child) = widget_counter { if let Ok(t) = child.clone().downcast::() { fstab_array.push(DriveMountRow::get_fstab_entry(&t));