[][src]Trait cursive::view::View

pub trait View: Any + AnyView {
    fn draw(&self, printer: &Printer);

    fn layout(&mut self, _: Vec2) { ... }
fn needs_relayout(&self) -> bool { ... }
fn required_size(&mut self, constraint: Vec2) -> Vec2 { ... }
fn on_event(&mut self, _: Event) -> EventResult { ... }
fn call_on_any<'a>(&mut self, _: &Selector, _: AnyCb<'a>) { ... }
fn focus_view(&mut self, _: &Selector) -> Result<(), ()> { ... }
fn take_focus(&mut self, source: Direction) -> bool { ... }
fn important_area(&self, view_size: Vec2) -> Rect { ... } }

Main trait defining a view behaviour.

This is what you should implement to define a custom View.

Required methods

fn draw(&self, printer: &Printer)

Draws the view with the given printer (includes bounds) and focus.

This is the only required method to implement.

Loading content...

Provided methods

fn layout(&mut self, _: Vec2)

Called once the size for this view has been decided.

It can be used to pre-compute the configuration of child views.

View groups should propagate the information to their children.

At this point, the given size is final and cannot be negociated. It is guaranteed to be the size available for the call to draw().

fn needs_relayout(&self) -> bool

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

This is mostly an optimisation for views where the layout phase is expensive.

  • Views can ignore it and always return true (default implementation). They will always be assumed to have changed.
  • View Groups can ignore it and always re-layout their children.
    • If they call required_size or layout with stable parameters, the children may cache the result themselves and speed up the process anyway.

fn required_size(&mut self, constraint: Vec2) -> Vec2

Returns the minimum size the view requires with the given restrictions.

This is the main way a view communicate its size to its parent.

Some views have a fixed size, and will ignore the constraint parameter entirely.

Some views are flexible, and may adapt fully or partially to the constraints.

Default implementation always return (1,1).

fn on_event(&mut self, _: Event) -> EventResult

Called when an event is received (key press, mouse event, ...).

You can return an EventResult:

  • EventResult::Ignored means the event was not processed and may be sent to another view.
  • EventResult::Consumed means the event was consumed and should not be sent to any other view. It may in addition include a callback to be run.

The default implementation just ignores any event.

fn call_on_any<'a>(&mut self, _: &Selector, _: AnyCb<'a>)

Runs a closure on the view identified by the given selector.

See Finder::call_on for a nicer interface, implemented for all views.

If the selector doesn't find a match, the closure will not be run.

View groups should implement this to forward the call to each children.

Default implementation is a no-op.

fn focus_view(&mut self, _: &Selector) -> Result<(), ()>

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

Returns Ok(()) if the view was found and selected.

Default implementation simply returns Err(()).

fn take_focus(&mut self, source: Direction) -> bool

This view is offered focus. Will it take it?

source indicates where the focus comes from. When the source is unclear, Front is usually used.

Default implementation always return false.

fn important_area(&self, view_size: Vec2) -> Rect

What part of the view is important and should be visible?

When only part of this view can be visible, this helps determine which part.

It is given the view size (same size given to layout).

Default implementation return the entire view.

Loading content...

Implementors

impl View for Button[src]

fn call_on_any<'a>(&mut self, _: &Selector, _: AnyCb<'a>)[src]

fn focus_view(&mut self, _: &Selector) -> Result<(), ()>[src]

impl View for Checkbox[src]

fn layout(&mut self, _: Vec2)[src]

fn needs_relayout(&self) -> bool[src]

fn call_on_any<'a>(&mut self, _: &Selector, _: AnyCb<'a>)[src]

fn focus_view(&mut self, _: &Selector) -> Result<(), ()>[src]

fn important_area(&self, view_size: Vec2) -> Rect[src]

impl View for DebugView[src]

fn needs_relayout(&self) -> bool[src]

fn on_event(&mut self, _: Event) -> EventResult[src]

fn call_on_any<'a>(&mut self, _: &Selector, _: AnyCb<'a>)[src]

fn focus_view(&mut self, _: &Selector) -> Result<(), ()>[src]

fn take_focus(&mut self, source: Direction) -> bool[src]

fn important_area(&self, view_size: Vec2) -> Rect[src]

impl View for Dialog[src]

impl View for DummyView[src]

fn layout(&mut self, _: Vec2)[src]

fn required_size(&mut self, constraint: Vec2) -> Vec2[src]

fn on_event(&mut self, _: Event) -> EventResult[src]

fn call_on_any<'a>(&mut self, _: &Selector, _: AnyCb<'a>)[src]

fn focus_view(&mut self, _: &Selector) -> Result<(), ()>[src]

fn take_focus(&mut self, source: Direction) -> bool[src]

fn important_area(&self, view_size: Vec2) -> Rect[src]

impl View for EditView[src]

fn needs_relayout(&self) -> bool[src]

fn required_size(&mut self, constraint: Vec2) -> Vec2[src]

fn call_on_any<'a>(&mut self, _: &Selector, _: AnyCb<'a>)[src]

fn focus_view(&mut self, _: &Selector) -> Result<(), ()>[src]

impl View for LinearLayout[src]

impl View for ListView[src]

fn needs_relayout(&self) -> bool[src]

impl View for MenuPopup[src]

fn needs_relayout(&self) -> bool[src]

fn call_on_any<'a>(&mut self, _: &Selector, _: AnyCb<'a>)[src]

fn focus_view(&mut self, _: &Selector) -> Result<(), ()>[src]

fn take_focus(&mut self, source: Direction) -> bool[src]

impl View for Menubar[src]

fn layout(&mut self, _: Vec2)[src]

fn needs_relayout(&self) -> bool[src]

fn call_on_any<'a>(&mut self, _: &Selector, _: AnyCb<'a>)[src]

fn focus_view(&mut self, _: &Selector) -> Result<(), ()>[src]

impl View for ProgressBar[src]

fn layout(&mut self, _: Vec2)[src]

fn needs_relayout(&self) -> bool[src]

fn required_size(&mut self, constraint: Vec2) -> Vec2[src]

fn on_event(&mut self, _: Event) -> EventResult[src]

fn call_on_any<'a>(&mut self, _: &Selector, _: AnyCb<'a>)[src]

fn focus_view(&mut self, _: &Selector) -> Result<(), ()>[src]

fn take_focus(&mut self, source: Direction) -> bool[src]

fn important_area(&self, view_size: Vec2) -> Rect[src]

impl View for SliderView[src]

fn layout(&mut self, _: Vec2)[src]

fn needs_relayout(&self) -> bool[src]

fn call_on_any<'a>(&mut self, _: &Selector, _: AnyCb<'a>)[src]

fn focus_view(&mut self, _: &Selector) -> Result<(), ()>[src]

fn important_area(&self, view_size: Vec2) -> Rect[src]

impl View for StackView[src]

fn needs_relayout(&self) -> bool[src]

fn important_area(&self, view_size: Vec2) -> Rect[src]

impl View for TextArea[src]

fn needs_relayout(&self) -> bool[src]

fn call_on_any<'a>(&mut self, _: &Selector, _: AnyCb<'a>)[src]

fn focus_view(&mut self, _: &Selector) -> Result<(), ()>[src]

impl View for TextView[src]

fn on_event(&mut self, _: Event) -> EventResult[src]

fn call_on_any<'a>(&mut self, _: &Selector, _: AnyCb<'a>)[src]

fn focus_view(&mut self, _: &Selector) -> Result<(), ()>[src]

fn take_focus(&mut self, source: Direction) -> bool[src]

fn important_area(&self, view_size: Vec2) -> Rect[src]

impl<T: 'static> View for Canvas<T>[src]

impl<T: 'static> View for RadioButton<T>[src]

fn layout(&mut self, _: Vec2)[src]

fn needs_relayout(&self) -> bool[src]

fn call_on_any<'a>(&mut self, _: &Selector, _: AnyCb<'a>)[src]

fn focus_view(&mut self, _: &Selector) -> Result<(), ()>[src]

fn important_area(&self, view_size: Vec2) -> Rect[src]

impl<T: 'static> View for SelectView<T>[src]

fn needs_relayout(&self) -> bool[src]

fn call_on_any<'a>(&mut self, _: &Selector, _: AnyCb<'a>)[src]

fn focus_view(&mut self, _: &Selector) -> Result<(), ()>[src]

impl<T: ViewWrapper> View for T[src]

impl<V> View for ScrollView<V> where
    V: View
[src]

Loading content...