diff --git a/examples/example.rs b/examples/example.rs index 0ede63b..46cb2bc 100644 --- a/examples/example.rs +++ b/examples/example.rs @@ -82,6 +82,9 @@ fn main() -> Result<(), Box> { Key::Right => { app.tree.open(); } + Key::Char('\n') => { + app.tree.toggle(); + } Key::Down => { app.tree.next(); } diff --git a/examples/util/mod.rs b/examples/util/mod.rs index 6b5ba2d..fe3a6b8 100644 --- a/examples/util/mod.rs +++ b/examples/util/mod.rs @@ -60,4 +60,8 @@ impl<'a> StatefulTree<'a> { pub fn open(&mut self) { self.state.open(self.state.selected()); } + + pub fn toggle(&mut self) { + self.state.toggle(); + } } diff --git a/src/lib.rs b/src/lib.rs index 98e276c..00c0df9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -58,6 +58,16 @@ impl TreeState { self.opened.remove(identifier) } + /// Toggles a tree node. + /// If the node is in opened then it calls `close()`. Otherwise it calls `open()`. + pub fn toggle(&mut self) { + if self.opened.contains(&self.selected()) { + self.close(&self.selected()); + } else { + self.open(self.selected()); + } + } + pub fn close_all(&mut self) { self.opened.clear(); }