pub struct TreeView<BackendT>where
BackendT: TreeBackend,{
pub model: TreeModel<BackendT>,
/* private fields */
}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 labels can be stylized with multiple colors and effects.
Event handling (configurable):
- 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
- “<”/“>” keys: collapse/expand all nodes
- 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.
Implementations§
Source§impl<BackendT> TreeView<BackendT>where
BackendT: TreeBackend,
impl<BackendT> TreeView<BackendT>where
BackendT: TreeBackend,
Sourcepub fn selected_row(&self) -> Option<usize>
pub fn selected_row(&self) -> Option<usize>
The selected row.
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?
69 fn handle_selection_changed(cursive: &mut Cursive, base_directory: Self::Context) {
70 let content = match cursive.call_on_name("tree", |tree: &mut TreeView<Self>| {
71 // Note that although we're not using the context in data() we still need to provide it
72 // (some implementations might need it)
73 let base_directory = tree.model.context.clone();
74 Ok(match tree.selected_node_mut() {
75 Some(node) => match node.data(base_directory)? {
76 Some(metadata) => Some(format_metadata(&metadata)?),
77 None => None,
78 },
79 None => None,
80 })
81 }) {
82 Some(Ok(Some(text))) => text,
83 Some(Err(error)) => return Self::handle_error(cursive, base_directory, error),
84 _ => "".into(),
85 };
86
87 cursive.call_on_name("details", |details: &mut TextView| details.set_content(content));
88 }Sourcepub fn is_selected(&self, row: usize) -> bool
pub fn is_selected(&self, row: usize) -> bool
Whether the row is selected.
Sourcepub fn select(&mut self, row: usize, cursive: &mut Cursive)
pub fn select(&mut self, row: usize, cursive: &mut Cursive)
Set selected row.
If the row is invalid will set the selection to None.
If the selection is changed will call handle_selection_changed.
Sourcepub fn select_top(&mut self, cursive: &mut Cursive)
pub fn select_top(&mut self, cursive: &mut Cursive)
Select top row.
If the tree is empty will set the selection to None.
If the selection is changed will call handle_selection_changed.
Sourcepub fn select_bottom(&mut self, cursive: &mut Cursive)
pub fn select_bottom(&mut self, cursive: &mut Cursive)
Select bottom row.
If the tree is empty will set the selection to None.
If the selection is changed will call handle_selection_changed.
Sourcepub fn move_selection(&mut self, delta: isize, cursive: &mut Cursive)
pub fn move_selection(&mut self, delta: isize, cursive: &mut Cursive)
Move selection by delta rows if possible.
If the selection is None will select the top row.
If the selection is changed will call handle_selection_changed.
Source§impl<BackendT> TreeView<BackendT>where
BackendT: TreeBackend,
impl<BackendT> TreeView<BackendT>where
BackendT: TreeBackend,
Sourcepub fn page(&self) -> usize
pub fn page(&self) -> usize
Page size for SelectUpPage/SelectDownPage.
Sourcepub fn set_page(&mut self, page: usize)
pub fn set_page(&mut self, page: usize)
Set page size for SelectUpPage/SelectDownPage.
Sourcepub fn with_page(self, page: usize) -> Self
pub fn with_page(self, page: usize) -> Self
Set page size for SelectUpPage/SelectDownPage.
Chainable.
Sourcepub fn with_debug(self, debug: bool) -> Self
pub fn with_debug(self, debug: bool) -> Self
Set debug mode.
Chainable.
Sourcepub fn actions_mut(&mut self) -> &mut Actions
pub fn actions_mut(&mut self) -> &mut Actions
Action map.
Sourcepub fn set_actions(&mut self, actions: Actions)
pub fn set_actions(&mut self, actions: Actions)
Set action map.
Sourcepub fn with_actions(self, actions: Actions) -> Self
pub fn with_actions(self, actions: Actions) -> Self
Set action map.
Chainable.
Sourcepub fn set_action(&mut self, action: Action, event: Event)
pub fn set_action(&mut self, action: Action, event: Event)
Set action.
Sourcepub fn with_action(self, action: Action, event: Event) -> Self
pub fn with_action(self, action: Action, event: Event) -> Self
Set action.
Chainable.
Sourcepub fn remove_action(&mut self, action: Action) -> bool
pub fn remove_action(&mut self, action: Action) -> bool
Remove action.
Return true if removed.
Sourcepub fn without_action(self, action: Action) -> Self
pub fn without_action(self, action: Action) -> Self
Remove action.
Chainable.
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>
Source§fn required_size(&mut self, _constraint: Vec2) -> Vec2
fn required_size(&mut self, _constraint: Vec2) -> Vec2
Source§fn important_area(&self, view_size: Vec2) -> Rect
fn important_area(&self, view_size: Vec2) -> Rect
Source§fn on_event(&mut self, event: Event) -> EventResult
fn on_event(&mut self, event: Event) -> EventResult
Source§fn draw(&self, printer: &Printer<'_, '_>)
fn draw(&self, printer: &Printer<'_, '_>)
Source§fn layout(&mut self, _: XY<usize>)
fn layout(&mut self, _: XY<usize>)
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)), )
Source§fn focus_view(&mut self, _: &Selector<'_>) -> Result<EventResult, ViewNotFound>
fn focus_view(&mut self, _: &Selector<'_>) -> Result<EventResult, ViewNotFound>
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
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)
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>
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>
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>
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>
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>
self into a fixed-size ResizedView.Source§fn fixed_width(self, width: usize) -> ResizedView<Self>
fn fixed_width(self, width: usize) -> ResizedView<Self>
self into a fixed-width ResizedView.Source§fn fixed_height(self, height: usize) -> ResizedView<Self>
fn fixed_height(self, height: usize) -> ResizedView<Self>
self into a fixed-width ResizedView.Source§fn full_screen(self) -> ResizedView<Self>
fn full_screen(self) -> ResizedView<Self>
self into a full-screen ResizedView.Source§fn full_width(self) -> ResizedView<Self>
fn full_width(self) -> ResizedView<Self>
self into a full-width ResizedView.Source§fn full_height(self) -> ResizedView<Self>
fn full_height(self) -> ResizedView<Self>
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>
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>
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>
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>
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>
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>
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>
self in a ScrollView.