diff options
author | Sebastian Thiel <sthiel@thoughtworks.com> | 2019-06-15 13:58:05 +0800 |
---|---|---|
committer | Sebastian Thiel <sthiel@thoughtworks.com> | 2019-06-15 13:58:05 +0800 |
commit | f8485c8d48fb231b113a6511ee4048712ccc27fc (patch) | |
tree | c619b6421be1cebca1819ac55c7a3283176772be /src/interactive/app | |
parent | 1ce57a29c45ee9896bfc529a13875dbc3859812f (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.rs | 26 |
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(()) } |