Preserve selections through external changes, part of #500

This commit is contained in:
Jeremy Soller 2024-09-25 16:06:11 -06:00
parent b91088482b
commit 03b6b6bb45
No known key found for this signature in database
GPG key ID: D02FD439211AF56F
2 changed files with 27 additions and 8 deletions

View file

@ -609,13 +609,9 @@ impl App {
let mut paths = Vec::new();
let entity = entity_opt.unwrap_or_else(|| self.tab_model.active());
if let Some(tab) = self.tab_model.data::<Tab>(entity) {
if let Some(ref items) = tab.items_opt() {
for item in items.iter() {
if item.selected {
if let Some(Location::Path(path)) = &item.location_opt {
paths.push(path.clone());
}
}
for location in tab.selected_locations() {
if let Some(path) = location.path_opt() {
paths.push(path.to_path_buf());
}
}
}

View file

@ -1463,10 +1463,33 @@ impl Tab {
self.items_opt.as_mut()
}
pub fn set_items(&mut self, items: Vec<Item>) {
pub fn set_items(&mut self, mut items: Vec<Item>) {
let selected = self.selected_locations();
for item in items.iter_mut() {
item.selected = false;
if let Some(location) = &item.location_opt {
if selected.contains(location) {
item.selected = true;
}
}
}
self.items_opt = Some(items);
}
pub fn selected_locations(&self) -> Vec<Location> {
let mut locations = Vec::new();
if let Some(ref items) = self.items_opt {
for item in items.iter() {
if item.selected {
if let Some(location) = &item.location_opt {
locations.push(location.clone());
}
}
}
}
locations
}
pub fn select_all(&mut self) {
*self.cached_selected.borrow_mut() = None;
if let Some(ref mut items) = self.items_opt {