pub struct TreeViewRef<'a, 'b, T> {
pub nodes: &'b [TreeNode<T>],
pub block: Option<Block<'a>>,
/* private fields */
}tree-view only.Expand description
Tree view widget that borrows nodes instead of owning them.
This is useful when you want to avoid cloning the tree on every render frame.
Unlike TreeView which takes ownership of nodes, TreeViewRef borrows them,
allowing the original data to remain in place after rendering.
§Type Parameters
'a- Lifetime for borrowed UI elements.'b- Lifetime for borrowed tree nodes.T- The type of data stored in tree nodes.
§Example
use ratatui_toolkit::tree_view::{TreeNode, TreeViewRef};
let nodes = vec![TreeNode::new("Root")];
let tree = TreeViewRef::new(&nodes)
.render_fn(|data, state| {
ratatui::text::Line::from(*data)
});Fields§
§nodes: &'b [TreeNode<T>]Reference to root nodes of the tree
block: Option<Block<'a>>Block to wrap the tree
Implementations§
Source§impl<'a, 'b, T> TreeViewRef<'a, 'b, T>
impl<'a, 'b, T> TreeViewRef<'a, 'b, T>
Sourcepub fn new(nodes: &'b [TreeNode<T>]) -> TreeViewRef<'a, 'b, T>
pub fn new(nodes: &'b [TreeNode<T>]) -> TreeViewRef<'a, 'b, T>
Creates a new tree view with a reference to nodes (avoids cloning).
§Arguments
nodes- A reference to the root nodes of the tree.
§Returns
A new TreeViewRef with default settings.
§Example
use ratatui_toolkit::tree_view::{TreeNode, TreeViewRef};
let nodes = vec![TreeNode::new("Item")];
let tree = TreeViewRef::new(&nodes);Source§impl<'a, 'b, T> TreeViewRef<'a, 'b, T>
impl<'a, 'b, T> TreeViewRef<'a, 'b, T>
Sourcepub fn block(self, block: Block<'a>) -> TreeViewRef<'a, 'b, T>
pub fn block(self, block: Block<'a>) -> TreeViewRef<'a, 'b, 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, TreeViewRef};
let nodes = vec![TreeNode::new("Item")];
let tree = TreeViewRef::new(&nodes)
.block(Block::default().borders(Borders::ALL).title("Tree"));Source§impl<'a, 'b, T> TreeViewRef<'a, 'b, T>
impl<'a, 'b, T> TreeViewRef<'a, 'b, T>
Sourcepub fn filter_fn<F>(self, _f: F) -> TreeViewRef<'a, 'b, T>
pub fn filter_fn<F>(self, _f: F) -> TreeViewRef<'a, 'b, T>
Sets a filter function for filtering nodes based on the filter text.
The function receives the node data and the current filter text, and returns true if the node should be visible.
Note: This method is currently a no-op for API compatibility.
Filtering is typically handled externally via get_visible_paths_filtered.
§Arguments
f- A function that takes node data and filter, returns true if matches.
§Returns
Self for method chaining.
§Example
use ratatui_toolkit::tree_view::{TreeNode, TreeViewRef, helpers::matches_filter};
let nodes = vec![TreeNode::new("Item")];
let tree = TreeViewRef::new(&nodes)
.filter_fn(|data, filter| matches_filter(data, filter));Source§impl<'a, 'b, T> TreeViewRef<'a, 'b, T>
impl<'a, 'b, T> TreeViewRef<'a, 'b, T>
Sourcepub fn flatten_tree(&self, state: &TreeViewState) -> Vec<(Line<'a>, Vec<usize>)>
pub fn flatten_tree(&self, state: &TreeViewState) -> Vec<(Line<'a>, Vec<usize>)>
Source§impl<'a, 'b, T> TreeViewRef<'a, 'b, T>
impl<'a, 'b, T> TreeViewRef<'a, 'b, T>
Sourcepub fn highlight_style(self, style: Style) -> TreeViewRef<'a, 'b, T>
pub fn highlight_style(self, style: Style) -> TreeViewRef<'a, 'b, 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, TreeViewRef};
let nodes = vec![TreeNode::new("Item")];
let tree = TreeViewRef::new(&nodes)
.highlight_style(Style::default().bg(Color::Blue));Source§impl<'a, 'b, T> TreeViewRef<'a, 'b, T>
impl<'a, 'b, T> TreeViewRef<'a, 'b, T>
Sourcepub fn icon_style(self, style: Style) -> TreeViewRef<'a, 'b, T>
pub fn icon_style(self, style: Style) -> TreeViewRef<'a, 'b, T>
Sets the style for expand/collapse icons.
§Arguments
style- The style to apply to icons.
§Returns
Self for method chaining.
§Example
use ratatui::style::{Color, Style};
use ratatui_toolkit::tree_view::{TreeNode, TreeViewRef};
let nodes = vec![TreeNode::new("Item")];
let tree = TreeViewRef::new(&nodes)
.icon_style(Style::default().fg(Color::Yellow));Source§impl<'a, 'b, T> TreeViewRef<'a, 'b, T>
impl<'a, 'b, T> TreeViewRef<'a, 'b, T>
Sourcepub fn icons(self, expand: &'a str, collapse: &'a str) -> TreeViewRef<'a, 'b, T>
pub fn icons(self, expand: &'a str, collapse: &'a str) -> TreeViewRef<'a, 'b, 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, TreeViewRef};
let nodes = vec![TreeNode::new("Item")];
let tree = TreeViewRef::new(&nodes)
.icons("+", "-");Source§impl<'a, 'b, T> TreeViewRef<'a, 'b, T>
impl<'a, 'b, T> TreeViewRef<'a, 'b, T>
Sourcepub fn render_fn<F>(self, f: F) -> TreeViewRef<'a, 'b, T>
pub fn render_fn<F>(self, f: F) -> TreeViewRef<'a, 'b, 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, TreeViewRef};
let nodes = vec![TreeNode::new("Item")];
let tree = TreeViewRef::new(&nodes)
.render_fn(|data, state| {
if state.is_selected {
Line::from(format!("> {}", data))
} else {
Line::from(*data)
}
});Source§impl<'a, 'b, T> TreeViewRef<'a, 'b, T>
impl<'a, 'b, T> TreeViewRef<'a, 'b, T>
Sourcepub fn with_filter_ui(self, show: bool) -> TreeViewRef<'a, 'b, T>
pub fn with_filter_ui(self, show: bool) -> TreeViewRef<'a, 'b, 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, TreeViewRef};
let nodes = vec![TreeNode::new("Root")];
let tree = TreeViewRef::new(&nodes)
.render_fn(|data, state| {
ratatui::text::Line::from(*data)
})
.with_filter_ui(true);Trait Implementations§
Source§impl<'a, 'b, T> StatefulWidget for TreeViewRef<'a, 'b, T>
impl<'a, 'b, T> StatefulWidget for TreeViewRef<'a, 'b, T>
Source§type State = TreeViewState
type State = TreeViewState
Source§fn render(
self,
area: Rect,
buf: &mut Buffer,
state: &mut <TreeViewRef<'a, 'b, T> as StatefulWidget>::State,
)
fn render( self, area: Rect, buf: &mut Buffer, state: &mut <TreeViewRef<'a, 'b, T> as StatefulWidget>::State, )
Auto Trait Implementations§
impl<'a, 'b, T> Freeze for TreeViewRef<'a, 'b, T>
impl<'a, 'b, T> !RefUnwindSafe for TreeViewRef<'a, 'b, T>
impl<'a, 'b, T> !Send for TreeViewRef<'a, 'b, T>
impl<'a, 'b, T> !Sync for TreeViewRef<'a, 'b, T>
impl<'a, 'b, T> Unpin for TreeViewRef<'a, 'b, T>
impl<'a, 'b, T> UnsafeUnpin for TreeViewRef<'a, 'b, T>
impl<'a, 'b, T> !UnwindSafe for TreeViewRef<'a, 'b, 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