Work on Partition Stage, added custom swap size selection.

This commit is contained in:
2026-05-26 22:54:19 +02:00
parent 078589332c
commit bb3f5ed1f0
4 changed files with 84 additions and 28 deletions
+2 -2
View File
@@ -23,10 +23,10 @@ opt-level = 2
codegen-units = 16
[profile.release]
#lto = true
lto = true
debug = false
incremental = false
codegen-units = 16
codegen-units = 1
opt-level = 3
strip = true
+13 -6
View File
@@ -1,4 +1,4 @@
use iced::widget::{Row, container, text};
use iced::widget::{self, Row, container, text};
use iced::{Alignment, Color, Element, Length};
// Assuming your Item struct or type implements Display or has a text representation
@@ -6,10 +6,9 @@ pub fn color_bar<Message: 'static>(
maybe_items: Option<Vec<(String, u16, Color)>>,
bar_height: u32,
) -> Element<'static, Message> {
let mut c_b = Row::new().height(bar_height);
if let Some(items) = maybe_items {
let mut c_b = Row::new().height(Length::Fill);
for (bar_text, bar_fill, bar_color) in items {
c_b = c_b.push(
container(text(bar_text).color(Color::BLACK).size(iced::Pixels(14.0)))
@@ -21,9 +20,17 @@ pub fn color_bar<Message: 'static>(
.padding(2),
);
}
}
container(c_b.spacing(2))
container(c_b.spacing(2))
.style(container::rounded_box)
.padding(3)
.height(bar_height)
.into()
}
else {
widget::container(widget::space())
.height(bar_height)
.width(Length::Fill)
.into()
}
}
+1
View File
@@ -30,6 +30,7 @@
"partition.no_swap": "No swap partition",
"partition.swap_no_hibernate": "Swap without hibernate",
"partition.swap_hibernate": "Swap with hibernation",
"partition.swap_custom": "Custom swap size",
"partition.select_device_placeholder": "Select Device",
"partition.select_device": "Select device for system installation",
"partition.select_swapmode_placeholder": "Select Swap Mode",
+68 -20
View File
@@ -18,22 +18,24 @@
This is partition stage!
*/
use log;
use crate::stage::{StageAction, StageResult};
use std::char;
use crate::kira_color_bar;
use crate::kira_disk_layout::{BlkDev, FSType, PartInfo, PartLayout};
use crate::kira_size::KiraSize;
use crate::kira_sysinfo;
use iced::{Alignment, Color, widget};
use crate::stage::{StageAction, StageResult};
use iced::{Alignment, Color, Element, Length, widget};
use log;
use rust_i18n::t;
use toml::Table;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SwapMode {
NoSwap,
SwapNoHibernate,
SwapHibernate,
SwapCustom,
}
impl std::fmt::Display for SwapMode {
@@ -42,14 +44,16 @@ impl std::fmt::Display for SwapMode {
Self::NoSwap => f.write_str(t!("partition.no_swap").as_ref()),
Self::SwapNoHibernate => f.write_str(t!("partition.swap_no_hibernate").as_ref()),
Self::SwapHibernate => f.write_str(t!("partition.swap_hibernate").as_ref()),
Self::SwapCustom => f.write_str(t!("partition.swap_custom").as_ref()),
}
}
}
const SWAP_MODES: [SwapMode; 3] = [
const SWAP_MODES: [SwapMode; 4] = [
SwapMode::NoSwap,
SwapMode::SwapNoHibernate,
SwapMode::SwapHibernate,
SwapMode::SwapCustom,
];
fn part_type_to_color(t: &FSType) -> Color {
@@ -78,6 +82,8 @@ pub struct PartitionStage {
swap_mode: Option<SwapMode>,
use_zram: bool,
secure_boot: bool,
custom_swap_size_mb: u32,
custom_swap_size_str: String,
selected_disk_parts: Option<Vec<(String, u16, Color)>>,
generated_disk_parts: Option<Vec<(String, u16, Color)>>,
system_ram_size: KiraSize,
@@ -90,6 +96,9 @@ pub enum Message {
SelectSwapMode(SwapMode),
ToggleZram(bool),
ToggleSecureBoot(bool),
SwapSizeFieldChange(String),
SwapSizeIncrement,
SwapSizeDecrement,
Next,
Back,
}
@@ -125,7 +134,8 @@ impl PartitionStage {
log::debug!(
"stage init ram {} vram {}",
system_ram_size, vram_of_all_gpus_size
system_ram_size,
vram_of_all_gpus_size
);
Ok(Self {
device: None,
@@ -133,6 +143,8 @@ impl PartitionStage {
swap_mode: Some(SwapMode::SwapNoHibernate),
use_zram: true,
secure_boot: false,
custom_swap_size_mb: 1024,
custom_swap_size_str: "1024MB".into(),
selected_disk_parts: None,
generated_disk_parts: None,
system_ram_size: system_ram_size,
@@ -250,17 +262,51 @@ impl PartitionStage {
self.use_zram = t;
StageAction::None
}
Message::SwapSizeIncrement => {
self.custom_swap_size_mb = (self.custom_swap_size_mb / 1024u32)
.strict_mul(1024u32)
.saturating_add(1024u32);
self.custom_swap_size_str = format!("{}MB", self.custom_swap_size_mb);
StageAction::None
}
Message::SwapSizeDecrement => {
self.custom_swap_size_mb = (self.custom_swap_size_mb / 1024u32)
.strict_mul(1024u32)
.saturating_sub(1024u32);
self.custom_swap_size_str = format!("{}MB", self.custom_swap_size_mb);
StageAction::None
}
Message::SwapSizeFieldChange(f_v) => {
let mut only_num = f_v.trim().to_string();
only_num.retain(char::is_numeric);
self.custom_swap_size_mb = u32::from_str_radix(&only_num, 10).unwrap_or(1024);
self.custom_swap_size_str = format!("{}MB", self.custom_swap_size_mb);
StageAction::None
}
Message::Back => StageAction::Back,
Message::Next => StageAction::Next(self.gen_result()),
}
}
pub fn view(&self) -> iced::Element<'_, Message> {
let swap_size_select: Element<'_, _> = match self.swap_mode {
Some(SwapMode::SwapCustom) => widget::row![
widget::text_input("", &self.custom_swap_size_str)
.width(100)
.on_input(Message::SwapSizeFieldChange),
widget::button("+").on_press(Message::SwapSizeIncrement),
widget::button("-").on_press(Message::SwapSizeDecrement),
]
.spacing(2)
.into(),
_ => widget::space().into(),
};
let dev_parts_text = match self.generated_disk_parts {
Some(_) => widget::text(t!("partition.current_after_install")),
None => widget::text(""),
};
let dev_parts_content = kira_color_bar::color_bar(self.generated_disk_parts.clone(), 56);
let dev_parts_content = kira_color_bar::color_bar(self.generated_disk_parts.clone(), 64);
let dev_parts_content = widget::column![dev_parts_text, dev_parts_content];
let back_button = widget::button(widget::text(t!("button.back"))).on_press(Message::Back);
@@ -270,36 +316,38 @@ impl PartitionStage {
Some(_) => widget::text(t!("partition.current_dev_layout")),
None => widget::text(""),
};
let selected_dev_content = kira_color_bar::color_bar(self.selected_disk_parts.clone(), 56);
let selected_dev_content = kira_color_bar::color_bar(self.selected_disk_parts.clone(), 64);
let selected_dev_content = widget::column![selected_dev_text, selected_dev_content];
widget::column![
widget::container(
widget::column![
widget::row![
widget::pick_list(
self.devices.clone(),
self.device.clone(),
Message::SelectDevice,
)
.placeholder(t!("partition.select_device_placeholder")),
widget::text(t!("partition.select_device"))
]
.spacing(5)
.align_y(Alignment::Center),
widget::rule::horizontal(2),
widget::text(t!("partition.select_device")),
widget::pick_list(
self.devices.clone(),
self.device.clone(),
Message::SelectDevice,
)
.placeholder(t!("partition.select_device_placeholder")),
widget::rule::horizontal(2),
widget::text(t!("partition.select_swapmode")),
widget::row![
widget::pick_list(SWAP_MODES, self.swap_mode, Message::SelectSwapMode,)
.placeholder(t!("partition.select_swapmode_placeholder")),
widget::text(t!("partition.select_swapmode"))
swap_size_select
]
.spacing(5)
.width(Length::Shrink)
.align_y(Alignment::Center),
widget::checkbox(self.use_zram)
.label(t!("partition.use_zram"))
.on_toggle(Message::ToggleZram),
widget::rule::horizontal(2),
widget::checkbox(self.secure_boot)
.label(t!("partition.use_secure_boot"))
.on_toggle(Message::ToggleSecureBoot),
widget::rule::horizontal(2),
selected_dev_content,
dev_parts_content,
]