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");
|
self.title_text = String::from("Processing");
|
||||||
}
|
}
|
||||||
(_, Mode::SelectParts) => {
|
(_, Mode::SelectParts) => {
|
||||||
self.selections[0] = None;
|
let mut one: Option<usize> = None;
|
||||||
self.selections[1] = None;
|
let mut two: Option<usize> = None;
|
||||||
self.title_text = String::from("Select Boot and OS Partitions");
|
self.title_text = String::from("Select Boot and OS Partitions");
|
||||||
|
|
||||||
// Get list of partitions for destination disk
|
// Get list of partitions for destination disk
|
||||||
|
|
|
||||||
|
|
@ -36,14 +36,16 @@ pub struct Right {
|
||||||
cur_mode: Mode,
|
cur_mode: Mode,
|
||||||
list_disks: StatefulList<Disk>,
|
list_disks: StatefulList<Disk>,
|
||||||
list_parts: StatefulList<Partition>,
|
list_parts: StatefulList<Partition>,
|
||||||
table_type: Option<PartitionTableType>,
|
|
||||||
prev_mode: Mode,
|
prev_mode: Mode,
|
||||||
|
selected_disks: Vec<Option<usize>>,
|
||||||
selections: Vec<Option<usize>>,
|
selections: Vec<Option<usize>>,
|
||||||
|
table_type: Option<PartitionTableType>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Right {
|
impl Right {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
selected_disks: vec![None, None],
|
||||||
selections: vec![None, None],
|
selections: vec![None, None],
|
||||||
..Default::default()
|
..Default::default()
|
||||||
}
|
}
|
||||||
|
|
@ -84,6 +86,11 @@ impl Component for Right {
|
||||||
Mode::SelectParts => self.list_parts.next(),
|
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) => {
|
Action::Select(one, two) => {
|
||||||
self.selections[0] = one;
|
self.selections[0] = one;
|
||||||
self.selections[1] = two;
|
self.selections[1] = two;
|
||||||
|
|
@ -93,10 +100,19 @@ impl Component for Right {
|
||||||
self.prev_mode = self.cur_mode;
|
self.prev_mode = self.cur_mode;
|
||||||
self.cur_mode = new_mode;
|
self.cur_mode = new_mode;
|
||||||
match self.cur_mode {
|
match self.cur_mode {
|
||||||
Mode::SelectDisks | Mode::SelectParts => {
|
Mode::SelectDisks => {
|
||||||
self.selections[0] = None;
|
self.selections[0] = None;
|
||||||
self.selections[1] = 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) => {
|
(_, Mode::InstallDrivers) => {
|
||||||
body_text.push(Line::from(Span::raw(format!("CPU: {}", get_cpu_name()))));
|
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
|
// Source Disk
|
||||||
body_text.push(Line::from(Span::styled(
|
body_text.push(Line::from(Span::styled(
|
||||||
"Source:",
|
"Source:",
|
||||||
|
|
@ -138,9 +156,14 @@ impl Component for Right {
|
||||||
),
|
),
|
||||||
Style::new().green().bold(),
|
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]
|
self.selections[0]
|
||||||
} else {
|
} else {
|
||||||
|
// Highlighted entry
|
||||||
self.list_disks.selected()
|
self.list_disks.selected()
|
||||||
};
|
};
|
||||||
if let Some(i) = index {
|
if let Some(i) = index {
|
||||||
|
|
@ -163,24 +186,30 @@ impl Component for Right {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Destination Disk
|
// Destination Disk
|
||||||
let index = match (self.selections[0], self.selections[1]) {
|
let index = if self.selected_disks[1].is_some() {
|
||||||
(Some(one), None) => {
|
// Selected in prior mode
|
||||||
// First selected
|
self.selected_disks[1]
|
||||||
if let Some(two) = self.selections[1] {
|
} else {
|
||||||
if one != two {
|
// Select(ed) in this mode
|
||||||
self.selections[1]
|
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 {
|
} 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 {
|
if let Some(i) = index {
|
||||||
// Divider
|
// Divider
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue