Skip to content

Commit

Permalink
feat: implement TreeState select first/last
Browse files Browse the repository at this point in the history
  • Loading branch information
EdJoPaTo committed Aug 31, 2022
1 parent c0e4967 commit b019567
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 1 deletion.
4 changes: 3 additions & 1 deletion examples/example.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,11 +91,13 @@ fn run_app<B: Backend>(terminal: &mut Terminal<B>, mut app: App) -> io::Result<(
if let Event::Key(key) = event::read()? {
match key.code {
KeyCode::Char('q') => return Ok(()),
KeyCode::Char('\n' | ' ') => app.tree.toggle(),
KeyCode::Left => app.tree.left(),
KeyCode::Right => app.tree.right(),
KeyCode::Char('\n') => app.tree.toggle(),
KeyCode::Down => app.tree.down(),
KeyCode::Up => app.tree.up(),
KeyCode::Home => app.tree.first(),
KeyCode::End => app.tree.last(),
_ => {}
}
}
Expand Down
8 changes: 8 additions & 0 deletions examples/util/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,14 @@ impl<'a> StatefulTree<'a> {
}
}

pub fn first(&mut self) {
self.state.select_first();
}

pub fn last(&mut self) {
self.state.select_last(&self.items);
}

pub fn down(&mut self) {
self.state.key_down(&self.items);
}
Expand Down
15 changes: 15 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,21 @@ impl TreeState {
self.opened.clear();
}

/// Select the first node.
pub fn select_first(&mut self) {
self.select(vec![0]);
}

/// Select the last node.
pub fn select_last(&mut self, items: &[TreeItem]) {
let visible = flatten(&self.get_all_opened(), items);
let new_identifier = visible
.last()
.map(|o| o.identifier.clone())
.unwrap_or_default();
self.select(new_identifier);
}

/// Handles the up arrow key.
/// Moves up in the current depth or to its parent.
pub fn key_up(&mut self, items: &[TreeItem]) {
Expand Down

0 comments on commit b019567

Please sign in to comment.