pub struct TreeView<BackendT>where
BackendT: TreeBackend,{
pub model: TreeModel<BackendT>,
pub selected_row: Option<usize>,
pub page: usize,
pub debug: bool,
}Expand description
Tree view.
Nodes can be leaves (no children) or branches (potentially have children) and can have custom
data (DataT) attached to them. Their representation can be stylized with multiple colors and
effects.
Supported events:
- Up/Down keys: move selection
- PgUp/PgDown keys: move selection by 10 (configurable)
- Left/Right keys: collapse/expand selected branch node
- Enter key: toggle selected branch node collapse/expand
- “-”/“+” keys: collapse/expand selected branch and all children recursively
- Mouse click on node: select
- Mouse click to the left of the node: toggle branch collapse/expand
The view’s data and behavior are backed by a TreeBackend. The nodes are stored and managed by a TreeModel. The model can be populated in advance and can also fetch data from the backend on demand, e.g. when a branch node is expanded.
Fields§
§model: TreeModel<BackendT>Tree model.
selected_row: Option<usize>Selected row.
page: usizePage size for PgUp/PgDown.
debug: boolWhether we want to display debug information.
Implementations§
Source§impl<BackendT> TreeView<BackendT>where
BackendT: TreeBackend,
impl<BackendT> TreeView<BackendT>where
BackendT: TreeBackend,
Sourcepub fn selected_node(&self) -> Option<&Node<BackendT>>
pub fn selected_node(&self) -> Option<&Node<BackendT>>
The selected node.
Sourcepub fn selected_path(&self) -> Option<NodePath>
pub fn selected_path(&self) -> Option<NodePath>
The selected path.
Sourcepub fn selected_node_mut(&mut self) -> Option<&mut Node<BackendT>>
pub fn selected_node_mut(&mut self) -> Option<&mut Node<BackendT>>
The selected node.
Examples found in repository?
examples/file_browser.rs (line 67)
63 fn handle_selection_changed(cursive: &mut Cursive) {
64 let content = match cursive.call_on_name("tree", |tree: &mut TreeView<Self>| {
65 // Although we're not using the context in data() but we still need to provide it
66 let base_directory = tree.model.context.clone();
67 Ok(match tree.selected_node_mut() {
68 Some(node) => match node.data(base_directory)? {
69 Some(metadata) => Some(format_metadata(&metadata)?),
70 None => None,
71 },
72 None => None,
73 })
74 }) {
75 Some(Ok(Some(text))) => text,
76 Some(Err(error)) => return Self::handle_error(cursive, error),
77 _ => "".into(),
78 };
79
80 cursive.call_on_name("details", |details: &mut TextView| {
81 details.set_content(content);
82 });
83 }Sourcepub fn is_selected(&self, row: usize) -> bool
pub fn is_selected(&self, row: usize) -> bool
Whether the row is selected.
Sourcepub fn select_top(&mut self)
pub fn select_top(&mut self)
Select top row.
Sourcepub fn select_bottom(&mut self)
pub fn select_bottom(&mut self)
Select bottom row.
Sourcepub fn move_selection(&mut self, delta: isize)
pub fn move_selection(&mut self, delta: isize)
Move selection by delta rows.
Trait Implementations§
Source§impl<BackendT> View for TreeView<BackendT>
impl<BackendT> View for TreeView<BackendT>
Source§fn take_focus(&mut self, _source: Direction) -> Result<EventResult, CannotFocus>
fn take_focus(&mut self, _source: Direction) -> Result<EventResult, CannotFocus>
Attempt to give this view the focus. Read more
Source§fn required_size(&mut self, _constraint: Vec2) -> Vec2
fn required_size(&mut self, _constraint: Vec2) -> Vec2
Returns the minimum size the view requires with the given restrictions. Read more
Source§fn important_area(&self, view_size: Vec2) -> Rect
fn important_area(&self, view_size: Vec2) -> Rect
What part of the view is important and should be visible? Read more
Source§fn on_event(&mut self, event: Event) -> EventResult
fn on_event(&mut self, event: Event) -> EventResult
Called when an event is received (key press, mouse event, …). Read more
Source§fn draw(&self, printer: &Printer<'_, '_>)
fn draw(&self, printer: &Printer<'_, '_>)
Draws the view with the given printer (includes bounds) and focus. Read more
Source§fn layout(&mut self, _: XY<usize>)
fn layout(&mut self, _: XY<usize>)
Called once the size for this view has been decided. Read more
Source§fn needs_relayout(&self) -> bool
fn needs_relayout(&self) -> bool
Source§fn call_on_any(
&mut self,
_: &Selector<'_>,
_: &mut dyn FnMut(&mut (dyn View + 'static)),
)
fn call_on_any( &mut self, _: &Selector<'_>, _: &mut dyn FnMut(&mut (dyn View + 'static)), )
Runs a closure on the view identified by the given selector. Read more
Source§fn focus_view(&mut self, _: &Selector<'_>) -> Result<EventResult, ViewNotFound>
fn focus_view(&mut self, _: &Selector<'_>) -> Result<EventResult, ViewNotFound>
Moves the focus to the view identified by the given selector. Read more
Auto Trait Implementations§
impl<BackendT> Freeze for TreeView<BackendT>
impl<BackendT> RefUnwindSafe for TreeView<BackendT>where
<BackendT as TreeBackend>::Context: RefUnwindSafe,
<BackendT as TreeBackend>::ID: RefUnwindSafe,
<BackendT as TreeBackend>::Data: RefUnwindSafe,
BackendT: RefUnwindSafe,
impl<BackendT> Send for TreeView<BackendT>where
<BackendT as TreeBackend>::Context: Send,
<BackendT as TreeBackend>::ID: Send,
<BackendT as TreeBackend>::Data: Send,
BackendT: Send,
impl<BackendT> Sync for TreeView<BackendT>where
<BackendT as TreeBackend>::Context: Sync,
<BackendT as TreeBackend>::ID: Sync,
<BackendT as TreeBackend>::Data: Sync,
BackendT: Sync,
impl<BackendT> Unpin for TreeView<BackendT>where
<BackendT as TreeBackend>::Context: Unpin,
<BackendT as TreeBackend>::ID: Unpin,
<BackendT as TreeBackend>::Data: Unpin,
BackendT: Unpin,
impl<BackendT> UnsafeUnpin for TreeView<BackendT>
impl<BackendT> UnwindSafe for TreeView<BackendT>where
<BackendT as TreeBackend>::Context: UnwindSafe,
<BackendT as TreeBackend>::ID: UnwindSafe,
<BackendT as TreeBackend>::Data: UnwindSafe,
BackendT: UnwindSafe,
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
Mutably borrows from an owned value. Read more
Source§impl<T> Finder for Twhere
T: View,
impl<T> Finder for Twhere
T: View,
Source§fn call_on_all<V, F>(&mut self, sel: &Selector<'_>, callback: F)
fn call_on_all<V, F>(&mut self, sel: &Selector<'_>, callback: F)
Runs a callback on all views identified by
sel. Read moreSource§fn call_on<V, F, R>(&mut self, sel: &Selector<'_>, callback: F) -> Option<R>
fn call_on<V, F, R>(&mut self, sel: &Selector<'_>, callback: F) -> Option<R>
Runs a callback on the view identified by
sel. Read moreSource§fn call_on_name<V, F, R>(&mut self, name: &str, callback: F) -> Option<R>
fn call_on_name<V, F, R>(&mut self, name: &str, callback: F) -> Option<R>
Convenient method to use
call_on with a view::Selector::Name.Source§impl<T> IntoBoxedView for Twhere
T: View,
impl<T> IntoBoxedView for Twhere
T: View,
Source§fn into_boxed_view(self) -> Box<dyn View>
fn into_boxed_view(self) -> Box<dyn View>
Returns a
Box<View>.Source§impl<T> Resizable for Twhere
T: View,
impl<T> Resizable for Twhere
T: View,
Source§fn resized(
self,
width: SizeConstraint,
height: SizeConstraint,
) -> ResizedView<Self>
fn resized( self, width: SizeConstraint, height: SizeConstraint, ) -> ResizedView<Self>
Wraps
self in a ResizedView with the given size constraints.Source§fn fixed_size<S>(self, size: S) -> ResizedView<Self>
fn fixed_size<S>(self, size: S) -> ResizedView<Self>
Wraps
self into a fixed-size ResizedView.Source§fn fixed_width(self, width: usize) -> ResizedView<Self>
fn fixed_width(self, width: usize) -> ResizedView<Self>
Wraps
self into a fixed-width ResizedView.Source§fn fixed_height(self, height: usize) -> ResizedView<Self>
fn fixed_height(self, height: usize) -> ResizedView<Self>
Wraps
self into a fixed-width ResizedView.Source§fn full_screen(self) -> ResizedView<Self>
fn full_screen(self) -> ResizedView<Self>
Wraps
self into a full-screen ResizedView.Source§fn full_width(self) -> ResizedView<Self>
fn full_width(self) -> ResizedView<Self>
Wraps
self into a full-width ResizedView.Source§fn full_height(self) -> ResizedView<Self>
fn full_height(self) -> ResizedView<Self>
Wraps
self into a full-height ResizedView.Source§fn max_size<S>(self, size: S) -> ResizedView<Self>
fn max_size<S>(self, size: S) -> ResizedView<Self>
Wraps
self into a limited-size ResizedView.Source§fn max_width(self, max_width: usize) -> ResizedView<Self>
fn max_width(self, max_width: usize) -> ResizedView<Self>
Wraps
self into a limited-width ResizedView.Source§fn max_height(self, max_height: usize) -> ResizedView<Self>
fn max_height(self, max_height: usize) -> ResizedView<Self>
Wraps
self into a limited-height ResizedView.Source§fn min_size<S>(self, size: S) -> ResizedView<Self>
fn min_size<S>(self, size: S) -> ResizedView<Self>
Wraps
self into a ResizedView at least sized size.Source§fn min_width(self, min_width: usize) -> ResizedView<Self>
fn min_width(self, min_width: usize) -> ResizedView<Self>
Wraps
self in a ResizedView at least min_width wide.Source§fn min_height(self, min_height: usize) -> ResizedView<Self>
fn min_height(self, min_height: usize) -> ResizedView<Self>
Wraps
self in a ResizedView at least min_height tall.Source§impl<T> Scrollable for Twhere
T: View,
impl<T> Scrollable for Twhere
T: View,
Source§fn scrollable(self) -> ScrollView<Self>
fn scrollable(self) -> ScrollView<Self>
Wraps
self in a ScrollView.