Skip to main content

TreeView

Struct TreeView 

Source
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: usize

Page size for PgUp/PgDown.

§debug: bool

Whether we want to display debug information.

Implementations§

Source§

impl<BackendT> TreeView<BackendT>
where BackendT: TreeBackend,

Source

pub fn selected_node(&self) -> Option<&Node<BackendT>>

The selected node.

Source

pub fn selected_path(&self) -> Option<NodePath>

The selected path.

Source

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    }
Source

pub fn is_selected(&self, row: usize) -> bool

Whether the row is selected.

Source

pub fn select_top(&mut self)

Select top row.

Source

pub fn select_bottom(&mut self)

Select bottom row.

Source

pub fn move_selection(&mut self, delta: isize)

Move selection by delta rows.

Trait Implementations§

Source§

impl<BackendT> From<TreeModel<BackendT>> for TreeView<BackendT>
where BackendT: TreeBackend,

Source§

fn from(model: TreeModel<BackendT>) -> Self

Converts to this type from the input type.
Source§

impl<BackendT> View for TreeView<BackendT>
where BackendT: 'static + TreeBackend + Send + Sync, BackendT::Context: Clone + Send + Sync, BackendT::Error: Send + Sync, BackendT::ID: Send + Sync, BackendT::Data: Send + Sync,

Source§

fn type_name(&self) -> &'static str

Returns the type of this view. Read more
Source§

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

Returns the minimum size the view requires with the given restrictions. Read more
Source§

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

Called when an event is received (key press, mouse event, …). Read more
Source§

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>)

Called once the size for this view has been decided. Read more
Source§

fn needs_relayout(&self) -> bool

Should return true if the view content changed since the last call to layout(). Read more
Source§

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>

Moves the focus to the view identified by the given selector. Read more

Auto Trait Implementations§

§

impl<BackendT> Freeze for TreeView<BackendT>
where <BackendT as TreeBackend>::Context: Freeze,

§

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>
where <BackendT as TreeBackend>::Context: UnsafeUnpin,

§

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> AnyView for T
where T: View,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Downcast self to a Any.

Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Downcast self to a mutable Any.

Source§

fn as_boxed_any(self: Box<T>) -> Box<dyn Any>

Returns a boxed any from a boxed self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Finder for T
where T: View,

Source§

fn call_on_all<V, F>(&mut self, sel: &Selector<'_>, callback: F)
where V: View, F: FnMut(&mut V),

Runs a callback on all views identified by sel. Read more
Source§

fn call_on<V, F, R>(&mut self, sel: &Selector<'_>, callback: F) -> Option<R>
where V: View, F: FnOnce(&mut V) -> R,

Runs a callback on the view identified by sel. Read more
Source§

fn call_on_name<V, F, R>(&mut self, name: &str, callback: F) -> Option<R>
where V: View, F: FnOnce(&mut V) -> R,

Convenient method to use call_on with a view::Selector::Name.
Source§

fn find_name<V>(&mut self, name: &str) -> Option<ViewRef<V>>
where V: View,

Convenient method to find a view wrapped in an NamedView.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoBoxedView for T
where T: View,

Source§

fn into_boxed_view(self) -> Box<dyn View>

Returns a Box<View>.
Source§

impl<T> Nameable for T
where T: View,

Source§

fn with_name<S>(self, name: S) -> NamedView<Self>
where S: Into<String>,

Wraps this view into an NamedView with the given id. Read more
Source§

impl<T> Resizable for T
where T: View,

Source§

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>
where S: Into<XY<usize>>,

Wraps self into a fixed-size ResizedView.
Source§

fn fixed_width(self, width: usize) -> ResizedView<Self>

Wraps self into a fixed-width ResizedView.
Source§

fn fixed_height(self, height: usize) -> ResizedView<Self>

Wraps self into a fixed-width ResizedView.
Source§

fn full_screen(self) -> ResizedView<Self>

Wraps self into a full-screen ResizedView.
Source§

fn full_width(self) -> ResizedView<Self>

Wraps self into a full-width ResizedView.
Source§

fn full_height(self) -> ResizedView<Self>

Wraps self into a full-height ResizedView.
Source§

fn max_size<S>(self, size: S) -> ResizedView<Self>
where S: Into<XY<usize>>,

Wraps self into a limited-size ResizedView.
Source§

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>

Wraps self into a limited-height ResizedView.
Source§

fn min_size<S>(self, size: S) -> ResizedView<Self>
where S: Into<XY<usize>>,

Wraps self into a ResizedView at least sized size.
Source§

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>

Wraps self in a ResizedView at least min_height tall.
Source§

impl<T> Scrollable for T
where T: View,

Source§

fn scrollable(self) -> ScrollView<Self>

Wraps self in a ScrollView.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> With for T

Source§

fn wrap_with<U, F>(self, f: F) -> U
where F: FnOnce(Self) -> U,

Calls the given closure and return the result. Read more
Source§

fn with<F>(self, f: F) -> Self
where F: FnOnce(&mut Self),

Calls the given closure on self.
Source§

fn try_with<E, F>(self, f: F) -> Result<Self, E>
where F: FnOnce(&mut Self) -> Result<(), E>,

Calls the given closure on self.
Source§

fn with_if<F>(self, condition: bool, f: F) -> Self
where F: FnOnce(&mut Self),

Calls the given closure if condition == true.