diff --git a/src/components/left.rs b/src/components/left.rs index b4dedd9..0d689cb 100644 --- a/src/components/left.rs +++ b/src/components/left.rs @@ -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 = None; + let mut two: Option = None; self.title_text = String::from("Select Boot and OS Partitions"); // Get list of partitions for destination disk diff --git a/src/components/right.rs b/src/components/right.rs index 54ec680..f9f2587 100644 --- a/src/components/right.rs +++ b/src/components/right.rs @@ -36,14 +36,16 @@ pub struct Right { cur_mode: Mode, list_disks: StatefulList, list_parts: StatefulList, - table_type: Option, prev_mode: Mode, + selected_disks: Vec>, selections: Vec>, + table_type: Option, } 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