summaryrefslogtreecommitdiffstats
path: root/src/interactive/app
diff options
context:
space:
mode:
authorSebastian Thiel <sthiel@thoughtworks.com>2019-06-15 13:58:05 +0800
committerSebastian Thiel <sthiel@thoughtworks.com>2019-06-15 13:58:05 +0800
commitf8485c8d48fb231b113a6511ee4048712ccc27fc (patch)
treec619b6421be1cebca1819ac55c7a3283176772be /src/interactive/app
parent1ce57a29c45ee9896bfc529a13875dbc3859812f (diff)
First half-baked version of deletion within traversal tree
No size handling for now
Diffstat (limited to 'src/interactive/app')
-rw-r--r--src/interactive/app/handlers.rs26
1 files changed, 25 insertions, 1 deletions
diff --git a/src/interactive/app/handlers.rs b/src/interactive/app/handlers.rs
index e9054aa..aed749f 100644
--- a/src/interactive/app/handlers.rs
+++ b/src/interactive/app/handlers.rs
@@ -6,6 +6,7 @@ use crate::interactive::{
};
use dua::traverse::TreeIndex;
use itertools::Itertools;
+use petgraph::visit::Bfs;
use petgraph::Direction;
use termion::event::Key;
use tui::backend::Backend;
@@ -148,7 +149,30 @@ impl TerminalApp {
}
}
- pub fn delete_entry(&mut self, _index: TreeIndex) -> Result<(), usize> {
+ fn set_root(&mut self, root: TreeIndex) {
+ self.state.root = root;
+ self.state.entries = sorted_entries(&self.traversal.tree, root, self.state.sorting);
+ }
+
+ pub fn delete_entry(&mut self, index: TreeIndex) -> Result<(), usize> {
+ if let Some(_entry) = self.traversal.tree.node_weight(index) {
+ let mut bfs = Bfs::new(&self.traversal.tree, index);
+ while let Some(nx) = bfs.next(&self.traversal.tree) {
+ self.traversal.tree.remove_node(nx);
+ }
+ self.state.entries =
+ sorted_entries(&self.traversal.tree, self.state.root, self.state.sorting);
+ if let None = self.traversal.tree.node_weight(self.state.root) {
+ self.set_root(self.traversal.root_index);
+ }
+ if let None = self
+ .state
+ .selected
+ .and_then(|selected| self.state.entries.iter().find(|e| e.index == selected))
+ {
+ self.state.selected = self.state.entries.get(0).map(|e| e.index);
+ }
+ }
Ok(())
}