Struct cursive_core::views::OnEventView
source · pub struct OnEventView<T> { /* private fields */ }
Expand description
A wrapper view that can react to events.
This view registers a set of callbacks tied to specific events, to be run in certain conditions.
-
Some callbacks are called only for events ignored by the wrapped view.
(those registered by
on_event
oron_event_inner
) -
Others are processed first, and can control whether the child view should be given the event (those registered by
on_pre_event
oron_pre_event_inner
).
“Inner” callbacks (on_event_inner
and on_pre_event_inner
) are given
a reference to the inner wrapped view (but not to the Cursive
root). They
can then return another callback, taking only a &mut Cursive
root as
argument.
“Simple” callbacks (on_event
and on_pre_event
) skip this first
phase and are only called with a &mut Cursive
.
Examples
let view = OnEventView::new(TextView::new("This view has an event!"))
.on_event('q', |s| s.quit())
.on_event(event::Key::Esc, |s| s.quit());
Implementations§
source§impl<T> OnEventView<T>
impl<T> OnEventView<T>
sourcepub fn clear_event<E>(&mut self, event: E)where
E: Into<Event>,
pub fn clear_event<E>(&mut self, event: E)where
E: Into<Event>,
Remove all callbacks associated with the given event.
sourcepub fn on_event<F, E>(self, trigger: E, cb: F) -> Selfwhere
E: Into<EventTrigger>,
F: 'static + Fn(&mut Cursive),
pub fn on_event<F, E>(self, trigger: E, cb: F) -> Selfwhere
E: Into<EventTrigger>,
F: 'static + Fn(&mut Cursive),
Registers a callback when the given event is ignored by the child.
Chainable variant.
Examples
let view = OnEventView::new(DummyView)
.on_event('q', |s| s.quit())
.on_event(Key::Esc, |s| {
s.pop_layer();
})
.on_event(EventTrigger::mouse(), |s| {
s.add_layer(DummyView);
});
sourcepub fn on_pre_event<F, E>(self, trigger: E, cb: F) -> Selfwhere
E: Into<EventTrigger>,
F: 'static + Fn(&mut Cursive),
pub fn on_pre_event<F, E>(self, trigger: E, cb: F) -> Selfwhere
E: Into<EventTrigger>,
F: 'static + Fn(&mut Cursive),
Registers a callback when the given event is received.
The child will never receive this event.
Chainable variant.
sourcepub fn on_pre_event_inner<F, E>(self, trigger: E, cb: F) -> Selfwhere
E: Into<EventTrigger>,
F: Fn(&mut T, &Event) -> Option<EventResult> + 'static,
pub fn on_pre_event_inner<F, E>(self, trigger: E, cb: F) -> Selfwhere
E: Into<EventTrigger>,
F: Fn(&mut T, &Event) -> Option<EventResult> + 'static,
Registers a callback when the given event is received.
The given callback will be run before the child view sees the event.
- If the result is
None
, then the child view is given the event as usual. - Otherwise, it bypasses the child view and directly processes the result.
Chainable variant.
sourcepub fn on_event_inner<F, E>(self, trigger: E, cb: F) -> Selfwhere
E: Into<EventTrigger>,
F: Fn(&mut T, &Event) -> Option<EventResult> + 'static,
pub fn on_event_inner<F, E>(self, trigger: E, cb: F) -> Selfwhere
E: Into<EventTrigger>,
F: Fn(&mut T, &Event) -> Option<EventResult> + 'static,
Registers a callback when the given event is ignored by the child.
This is an advanced method to get more control.
on_event
may be easier to use.
If the child view ignores the event, cb
will be called with the
child view as argument.
If the result is not None
, it will be processed as well.
Chainable variant.
Examples
let view = OnEventView::new(DummyView)
.on_event_inner(
EventTrigger::mouse(),
|d: &mut DummyView, e: &Event| {
if let &Event::Mouse { event: MouseEvent::Press(_), .. } = e {
// Do something on mouse press
Some(EventResult::with_cb(|s| {
s.pop_layer();
}))
} else {
// Otherwise, don't do anything
None
}
}
);
sourcepub fn set_on_event<F, E>(&mut self, trigger: E, cb: F)where
E: Into<EventTrigger>,
F: Fn(&mut Cursive) + 'static,
pub fn set_on_event<F, E>(&mut self, trigger: E, cb: F)where
E: Into<EventTrigger>,
F: Fn(&mut Cursive) + 'static,
Registers a callback when the given event is ignored by the child.
sourcepub fn set_on_pre_event<F, E>(&mut self, trigger: E, cb: F)where
E: Into<EventTrigger>,
F: 'static + Fn(&mut Cursive),
pub fn set_on_pre_event<F, E>(&mut self, trigger: E, cb: F)where
E: Into<EventTrigger>,
F: 'static + Fn(&mut Cursive),
Registers a callback when the given event is received.
The child will never receive this event.
sourcepub fn set_on_pre_event_inner<F, E>(&mut self, trigger: E, cb: F)where
E: Into<EventTrigger>,
F: Fn(&mut T, &Event) -> Option<EventResult> + 'static,
pub fn set_on_pre_event_inner<F, E>(&mut self, trigger: E, cb: F)where
E: Into<EventTrigger>,
F: Fn(&mut T, &Event) -> Option<EventResult> + 'static,
Registers a callback when the given event is received.
The given callback will be run before the child view sees the event.
- If the result is
None
, then the child view is given the event as usual. - Otherwise, it bypasses the child view and directly processes the result.
sourcepub fn set_on_event_inner<F, E>(&mut self, trigger: E, cb: F)where
E: Into<EventTrigger>,
F: Fn(&mut T, &Event) -> Option<EventResult> + 'static,
pub fn set_on_event_inner<F, E>(&mut self, trigger: E, cb: F)where
E: Into<EventTrigger>,
F: Fn(&mut T, &Event) -> Option<EventResult> + 'static,
Registers a callback when the given event is ignored by the child.
If the child view ignores the event, cb
will be called with the
child view as argument.
If the result is not None
, it will be processed as well.
sourcepub fn clear_callbacks(&mut self)
pub fn clear_callbacks(&mut self)
Remove any callbacks defined for this view.
sourcepub fn get_inner_mut(&mut self) -> &mut T
pub fn get_inner_mut(&mut self) -> &mut T
Gets mutable access to the inner view.
Trait Implementations§
source§impl<T> Default for OnEventView<T>where
T: Default,
impl<T> Default for OnEventView<T>where
T: Default,
source§impl<T: View> ViewWrapper for OnEventView<T>
impl<T: View> ViewWrapper for OnEventView<T>
source§fn with_view<F, R>(&self, f: F) -> Option<R>where
F: FnOnce(&Self::V) -> R,
fn with_view<F, R>(&self, f: F) -> Option<R>where
F: FnOnce(&Self::V) -> R,
source§fn with_view_mut<F, R>(&mut self, f: F) -> Option<R>where
F: FnOnce(&mut Self::V) -> R,
fn with_view_mut<F, R>(&mut self, f: F) -> Option<R>where
F: FnOnce(&mut Self::V) -> R,
source§fn into_inner(self) -> Result<Self::V, Self>where
Self::V: Sized,
fn into_inner(self) -> Result<Self::V, Self>where
Self::V: Sized,
source§fn wrap_on_event(&mut self, event: Event) -> EventResult
fn wrap_on_event(&mut self, event: Event) -> EventResult
on_event
method.source§fn wrap_required_size(&mut self, req: Vec2) -> Vec2
fn wrap_required_size(&mut self, req: Vec2) -> Vec2
required_size
method.source§fn wrap_layout(&mut self, size: Vec2)
fn wrap_layout(&mut self, size: Vec2)
layout
method.source§fn wrap_take_focus(
&mut self,
source: Direction
) -> Result<EventResult, CannotFocus>
fn wrap_take_focus(
&mut self,
source: Direction
) -> Result<EventResult, CannotFocus>
take_focus
method.source§fn wrap_call_on_any<'a>(&mut self, selector: &Selector<'_>, callback: AnyCb<'a>)
fn wrap_call_on_any<'a>(&mut self, selector: &Selector<'_>, callback: AnyCb<'a>)
find
method.source§fn wrap_focus_view(
&mut self,
selector: &Selector<'_>
) -> Result<EventResult, ViewNotFound>
fn wrap_focus_view(
&mut self,
selector: &Selector<'_>
) -> Result<EventResult, ViewNotFound>
focus_view
method.source§fn wrap_needs_relayout(&self) -> bool
fn wrap_needs_relayout(&self) -> bool
needs_relayout
method.source§fn wrap_important_area(&self, size: Vec2) -> Rect
fn wrap_important_area(&self, size: Vec2) -> Rect
important_area
method.