Preserve source/dest disk selection
This commit is contained in:
parent
5e29c1ab48
commit
f6d45b7de0
2 changed files with 49 additions and 20 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue