Trait kas::event::SendEvent[][src]

pub trait SendEvent: Handler {
    fn send(
        &mut self,
        mgr: &mut Manager<'_>,
        id: WidgetId,
        event: Event
    ) -> Response<Self::Msg>; }
Expand description

Event routing

This trait is part of the Widget family and is derived by derive(Widget) unless #[handler(send = noauto)] or #[handler(noauto)] is used.

This trait is responsible for routing events to the correct widget. It is separate from Handler since it can be derived for many parent widgets, even when event handling must be implemented manually.

This trait is implemented by derive(Widget) when a #[handler] attribute is present (except with parameter send=noauto).

Required methods

Send an event

This method is responsible for routing events toward descendents. WidgetId values are assigned via depth-first search with parents ordered after all children. Disabling a widget is recursive, hence disabled widgets should not forward any events.

The following logic is recommended for routing events:

if self.is_disabled() {
    return Response::Unhandled;
}
if id <= self.child1.id() {
    self.child1.event(mgr, id, event).into()
} else if id <= self.child2.id() {
    self.child2.event(mgr, id, event).into()
} ... {
} else {
    debug_assert!(id == self.id(), "SendEvent::send: bad WidgetId");
    Manager::handle_generic(self, mgr, event)
}

Parents which don’t handle any events themselves may simplify this:

if !self.is_disabled() && id <= self.w.id() {
    return self.w.send(mgr, id, event);
}
Response::Unhandled

When the child’s Handler::Msg type is not VoidMsg, its response messages can be handled here (in place of .into() above).

The example above uses Manager::handle_generic, which is an optional tool able to perform some simplifications on events. It is also valid to call Handler::handle directly or simply to embed handling logic here.

Implementations on Foreign Types

Implementors