pub struct TreeView<'a, T> { /* private fields */ }tree-view only.Expand description
Tree view widget.
A widget for rendering hierarchical tree data with expand/collapse functionality, custom rendering, and selection highlighting.
§Type Parameters
T- The type of data stored in tree nodes.
§Example
use ratatui_toolkit::tree_view::{TreeNode, TreeView};
let nodes = vec![TreeNode::new("Root")];
let tree = TreeView::new(nodes)
.render_fn(|data, state| {
ratatui::text::Line::from(*data)
});Implementations§
Source§impl<'a, T> TreeView<'a, T>
impl<'a, T> TreeView<'a, T>
Sourcepub fn block(self, block: Block<'a>) -> TreeView<'a, T>
pub fn block(self, block: Block<'a>) -> TreeView<'a, T>
Sets the block to wrap the tree.
§Arguments
block- The block to wrap the tree view.
§Returns
Self for method chaining.
§Example
use ratatui::widgets::{Block, Borders};
use ratatui_toolkit::tree_view::{TreeNode, TreeView};
let nodes = vec![TreeNode::new("Item")];
let tree = TreeView::new(nodes)
.block(Block::default().borders(Borders::ALL).title("Tree"));Source§impl<'a, T> TreeView<'a, T>
impl<'a, T> TreeView<'a, T>
Sourcepub fn handle_key_event(
&mut self,
key: KeyEvent,
navigator: &TreeNavigator,
state: &mut TreeViewState,
) -> WidgetEvent
pub fn handle_key_event( &mut self, key: KeyEvent, navigator: &TreeNavigator, state: &mut TreeViewState, ) -> WidgetEvent
Handle a keyboard event and return a WidgetEvent.
This method processes keyboard input for the tree view, including:
- Navigation keys (up/down/left/right)
- Expansion/collapse keys (h/l)
- Filter mode keys (/ to enter, Esc to exit, Enter to confirm)
When filter mode is active, all keystrokes are routed to the filter input and the tree is automatically filtered.
§Arguments
key- The keyboard event to handlenavigator- The tree navigator for navigation operationsstate- The tree view state to modify
§Returns
A WidgetEvent indicating what action was taken.
§Example
use ratatui_toolkit::tree_view::{TreeNode, TreeView, TreeNavigator, TreeViewState};
use crossterm::event::KeyCode;
let nodes = vec![TreeNode::new("Root")];
let mut tree = TreeView::new(nodes)
.render_fn(|data, state| {
ratatui::text::Line::from(*data)
});
let mut state = TreeViewState::new();
let navigator = TreeNavigator::new();
match tree.handle_key_event(crossterm::event::KeyEvent::new(KeyCode::Down), &navigator, &mut state) {
WidgetEvent::Selected { path } => println!("Selected: {:?}", path),
WidgetEvent::Scrolled { offset, direction } => println!("Scrolled"),
_ => {}
}Sourcepub fn handle_mouse_event(
&mut self,
event: MouseEvent,
state: &mut TreeViewState,
area: Rect,
) -> WidgetEvent
pub fn handle_mouse_event( &mut self, event: MouseEvent, state: &mut TreeViewState, area: Rect, ) -> WidgetEvent
Handle a mouse event and return a WidgetEvent.
This method processes mouse input for the tree view, including:
- Click to select items
- Scroll wheel to scroll
§Arguments
event- The mouse event to handlestate- The tree view state to modifyarea- The area occupied by the tree view (including borders)
§Returns
A WidgetEvent indicating what action was taken.
Source§impl<'a, T> TreeView<'a, T>
impl<'a, T> TreeView<'a, T>
Sourcepub fn highlight_style(self, style: Style) -> TreeView<'a, T>
pub fn highlight_style(self, style: Style) -> TreeView<'a, T>
Sets the highlight style for selected rows (full-width background).
§Arguments
style- The style to apply to selected rows.
§Returns
Self for method chaining.
§Example
use ratatui::style::{Color, Style};
use ratatui_toolkit::tree_view::{TreeNode, TreeView};
let nodes = vec![TreeNode::new("Item")];
let tree = TreeView::new(nodes)
.highlight_style(Style::default().bg(Color::Blue));Source§impl<'a, T> TreeView<'a, T>
impl<'a, T> TreeView<'a, T>
Sourcepub fn icons(self, expand: &'a str, collapse: &'a str) -> TreeView<'a, T>
pub fn icons(self, expand: &'a str, collapse: &'a str) -> TreeView<'a, T>
Sets custom expand/collapse icons.
§Arguments
expand- The icon to show for collapsed nodes.collapse- The icon to show for expanded nodes.
§Returns
Self for method chaining.
§Example
use ratatui_toolkit::tree_view::{TreeNode, TreeView};
let nodes = vec![TreeNode::new("Item")];
let tree = TreeView::new(nodes)
.icons("+", "-");Source§impl<'a, T> TreeView<'a, T>
impl<'a, T> TreeView<'a, T>
Sourcepub fn node_at_row(
&self,
state: &TreeViewState,
row: usize,
) -> Option<Vec<usize>>
pub fn node_at_row( &self, state: &TreeViewState, row: usize, ) -> Option<Vec<usize>>
Gets the node at a specific row (considering scroll offset).
§Arguments
state- The tree view state.row- The row index (0-based, relative to visible area).
§Returns
The path to the node at the given row, or None if out of bounds.
§Example
use ratatui_toolkit::tree_view::{TreeNode, TreeView, TreeViewState};
let nodes = vec![TreeNode::new("Item")];
let tree = TreeView::new(nodes);
let state = TreeViewState::new();
let path = tree.node_at_row(&state, 0);Source§impl<'a, T> TreeView<'a, T>
impl<'a, T> TreeView<'a, T>
Sourcepub fn render_fn<F>(self, f: F) -> TreeView<'a, T>
pub fn render_fn<F>(self, f: F) -> TreeView<'a, T>
Sets the render function for nodes.
§Arguments
f- A function that takes node data and state, returns a Line.
§Returns
Self for method chaining.
§Example
use ratatui::text::Line;
use ratatui_toolkit::tree_view::{TreeNode, TreeView};
let nodes = vec![TreeNode::new("Item")];
let tree = TreeView::new(nodes)
.render_fn(|data, state| {
if state.is_selected {
Line::from(format!("> {}", data))
} else {
Line::from(*data)
}
});Source§impl<'a, T> TreeView<'a, T>
impl<'a, T> TreeView<'a, T>
Sourcepub fn visible_item_count(&self, state: &TreeViewState) -> usize
pub fn visible_item_count(&self, state: &TreeViewState) -> usize
Gets total visible item count.
§Arguments
state- The tree view state.
§Returns
The number of visible items in the tree.
§Example
use ratatui_toolkit::tree_view::{TreeNode, TreeView, TreeViewState};
let nodes = vec![TreeNode::new("Item")];
let tree = TreeView::new(nodes);
let state = TreeViewState::new();
assert_eq!(tree.visible_item_count(&state), 1);Source§impl<'a, T> TreeView<'a, T>
impl<'a, T> TreeView<'a, T>
Sourcepub fn with_filter_ui(self, show: bool) -> TreeView<'a, T>
pub fn with_filter_ui(self, show: bool) -> TreeView<'a, T>
Enable or disable the built-in filter UI.
When enabled, the tree view will automatically render a filter input line at the bottom of the widget when filter mode is active or a filter is set.
This eliminates the need for manual buffer manipulation when rendering the filter cursor.
§Example
use ratatui_toolkit::tree_view::{TreeNode, TreeView};
let nodes = vec![TreeNode::new("Root")];
let tree = TreeView::new(nodes)
.render_fn(|data, state| {
ratatui::text::Line::from(*data)
})
.with_filter_ui(true);Trait Implementations§
Source§impl<'a, T> StatefulWidget for TreeView<'a, T>
impl<'a, T> StatefulWidget for TreeView<'a, T>
Source§type State = TreeViewState
type State = TreeViewState
Auto Trait Implementations§
impl<'a, T> Freeze for TreeView<'a, T>
impl<'a, T> !RefUnwindSafe for TreeView<'a, T>
impl<'a, T> !Send for TreeView<'a, T>
impl<'a, T> !Sync for TreeView<'a, T>
impl<'a, T> Unpin for TreeView<'a, T>where
T: Unpin,
impl<'a, T> UnsafeUnpin for TreeView<'a, T>
impl<'a, T> !UnwindSafe for TreeView<'a, T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more