Preserve source/dest disk selection

This commit is contained in:
2Shirt 2024-11-13 00:20:40 -08:00
parent 5e29c1ab48
commit f6d45b7de0
Signed by: 2Shirt
GPG key ID: 152FAC923B0E132C
2 changed files with 49 additions and 20 deletions

View file

@ -213,8 +213,8 @@ impl Component for Left {
self.title_text = String::from("Processing");
}
(_, Mode::SelectParts) => {
self.selections[0] = None;
self.selections[1] = None;
let mut one: Option<usize> = None;
let mut two: Option<usize> = None;
self.title_text = String::from("Select Boot and OS Partitions");
// Get list of partitions for destination disk

View file

@ -36,14 +36,16 @@ pub struct Right {
cur_mode: Mode,
list_disks: StatefulList<Disk>,
list_parts: StatefulList<Partition>,
table_type: Option<PartitionTableType>,
prev_mode: Mode,
selected_disks: Vec<Option<usize>>,
selections: Vec<Option<usize>>,
table_type: Option<PartitionTableType>,
}
impl Right {
pub fn new() -> Self {
Self {
selected_disks: vec![None, None],
selections: vec![None, None],
..Default::default()
}
@ -84,6 +86,11 @@ impl Component for Right {
Mode::SelectParts => self.list_parts.next(),
_ => {}
},
Action::Process => {
if self.prev_mode == Mode::SelectDisks && self.cur_mode == Mode::Confirm {
self.selected_disks = self.selections.clone();
}
}
Action::Select(one, two) => {
self.selections[0] = one;
self.selections[1] = two;
@ -93,10 +100,19 @@ impl Component for Right {
self.prev_mode = self.cur_mode;
self.cur_mode = new_mode;
match self.cur_mode {
Mode::SelectDisks | Mode::SelectParts => {
Mode::SelectDisks => {
self.selections[0] = None;
self.selections[1] = None;
}
Mode::SelectParts => {
self.selections[0] = None;
self.selections[1] = None;
}
Mode::SelectTableType => {
self.selections[0] = None;
self.selections[1] = None;
self.table_type = None;
}
_ => {}
}
}
@ -124,7 +140,9 @@ impl Component for Right {
(_, Mode::InstallDrivers) => {
body_text.push(Line::from(Span::raw(format!("CPU: {}", get_cpu_name()))));
}
(_, Mode::SelectDisks) | (Mode::SelectDisks | Mode::SelectTableType, Mode::Confirm) => {
(_, Mode::SelectDisks)
| (Mode::SelectDisks | Mode::SelectTableType, Mode::Confirm)
| (_, Mode::SelectTableType) => {
// Source Disk
body_text.push(Line::from(Span::styled(
"Source:",
@ -138,9 +156,14 @@ impl Component for Right {
),
Style::new().green().bold(),
)));
let index = if self.selections[0].is_some() {
let index = if self.selected_disks[0].is_some() {
// Selected in prior mode
self.selected_disks[0]
} else if self.selections[0].is_some() {
// Selected in this mode
self.selections[0]
} else {
// Highlighted entry
self.list_disks.selected()
};
if let Some(i) = index {
@ -163,24 +186,30 @@ impl Component for Right {
}
// Destination Disk
let index = match (self.selections[0], self.selections[1]) {
(Some(one), None) => {
// First selected
if let Some(two) = self.selections[1] {
if one != two {
self.selections[1]
let index = if self.selected_disks[1].is_some() {
// Selected in prior mode
self.selected_disks[1]
} else {
// Select(ed) in this mode
match (self.selections[0], self.selections[1]) {
(Some(one), None) => {
// First selected
if let Some(two) = self.selections[1] {
if one != two {
self.selections[1]
} else {
None
}
} else {
None
self.list_disks.selected()
}
} else {
self.list_disks.selected()
}
(Some(_), Some(_)) => {
// Both selected
self.selections[1]
}
(_, _) => None,
}
(Some(_), Some(_)) => {
// Both selected
self.selections[1]
}
(_, _) => None,
};
if let Some(i) = index {
// Divider