pub struct Adapt<A, W: Widget> { /* private fields */ }
Expand description
Data adaption node
Where Map
allows mapping to a sub-set of input data, Adapt
allows
mapping to a super-set (including internal storage). Further, Adapt
supports message handlers which mutate internal storage.
§Inner data type
Note that, at least for now, the type of state stored by Adapt
must
equal the data type of the inner widget: state: <W as Widget>::Data
.
Since W::Data
must outlive W
(for our purposes this is not much
different than if Widget::Data: 'static
), we cannot support W::Data
like (&A, &S)
where state: S
, so we might as well simply pass &S
to the inner widget W
. This implies that any state from A
which
needs to be passed into W
must be copied into state: W::Data
by
Adapt::on_update
.
(It is possible that the above restrictions will change in the future,
but they would require Rust to support generic associated types in
dyn-safe traits (also known as object safe GATs), at least for lifetime
parameters. There was an unstable feature for this,
generic_associated_types_extended
, but it was removed due to being
stale, experimental and unsound. But even if Rust did gain this feature,
it is not clear that Widget::Data
should be generic.)
Implementations§
Source§impl<A, W: Widget> Adapt<A, W>
impl<A, W: Widget> Adapt<A, W>
Sourcepub fn on_configure<F>(self, handler: F) -> Self
pub fn on_configure<F>(self, handler: F) -> Self
Add a handler to be called on configuration
Sourcepub fn on_update<F>(self, handler: F) -> Self
pub fn on_update<F>(self, handler: F) -> Self
Add a handler to be called on update of input data
Children will be updated after the handler is called.
Sourcepub fn on_timer<H>(self, timer_id: TimerHandle, handler: H) -> Self
pub fn on_timer<H>(self, timer_id: TimerHandle, handler: H) -> Self
Set a timer handler
It is assumed that state is modified by this timer. Frequent usage
of timers which don’t do anything may be inefficient; prefer usage
of EventState::send_async
.
Sourcepub fn on_message<M, H>(self, handler: H) -> Self
pub fn on_message<M, H>(self, handler: H) -> Self
Add a handler on message of type M
Children will be updated whenever this handler is invoked.
Where access to input data (from parent widgets) is required,
use Self::on_messages
instead.
Sourcepub fn on_messages<H>(self, handler: H) -> Self
pub fn on_messages<H>(self, handler: H) -> Self
Add a generic message handler
Trait Implementations§
Source§impl<A, W: Widget> Events for Adapt<A, W>
impl<A, W: Widget> Events for Adapt<A, W>
Source§fn handle_event(
&mut self,
cx: &mut EventCx<'_>,
data: &Self::Data,
event: Event<'_>,
) -> IsUsed
fn handle_event( &mut self, cx: &mut EventCx<'_>, data: &Self::Data, event: Event<'_>, ) -> IsUsed
Source§fn handle_messages(&mut self, cx: &mut EventCx<'_>, data: &A)
fn handle_messages(&mut self, cx: &mut EventCx<'_>, data: &A)
Source§const REDRAW_ON_MOUSE_OVER: bool = false
const REDRAW_ON_MOUSE_OVER: bool = false
Source§fn mouse_over_icon(&self) -> Option<CursorIcon>
fn mouse_over_icon(&self) -> Option<CursorIcon>
Source§fn configure_recurse(&mut self, cx: &mut ConfigCx<'_>, data: &Self::Data)
fn configure_recurse(&mut self, cx: &mut ConfigCx<'_>, data: &Self::Data)
Source§fn update_recurse(&mut self, cx: &mut ConfigCx<'_>, data: &Self::Data)
fn update_recurse(&mut self, cx: &mut ConfigCx<'_>, data: &Self::Data)
Source§impl<A, W: Widget> Layout for Adapt<A, W>
impl<A, W: Widget> Layout for Adapt<A, W>
Source§impl<A, W: Widget> MacroDefinedLayout for Adapt<A, W>
impl<A, W: Widget> MacroDefinedLayout for Adapt<A, W>
Source§impl<A, W> Scrollable for Adapt<A, W>where
W: Scrollable + Widget,
impl<A, W> Scrollable for Adapt<A, W>where
W: Scrollable + Widget,
Source§fn content_size(&self) -> Size
fn content_size(&self) -> Size
Source§fn max_scroll_offset(&self) -> Offset
fn max_scroll_offset(&self) -> Offset
Source§fn scroll_offset(&self) -> Offset
fn scroll_offset(&self) -> Offset
Source§impl<A, W: Widget> Tile for Adapt<A, W>
impl<A, W: Widget> Tile for Adapt<A, W>
Source§fn get_child(&self, index: usize) -> Option<&dyn Tile>
fn get_child(&self, index: usize) -> Option<&dyn Tile>
dyn Tile
, if available Read moreSource§fn child_indices(&self) -> ChildIndices
fn child_indices(&self) -> ChildIndices
Source§fn role_child_properties(&self, cx: &mut dyn RoleCx, index: usize)
fn role_child_properties(&self, cx: &mut dyn RoleCx, index: usize)
index
Read moreAuto Trait Implementations§
impl<A, W> Freeze for Adapt<A, W>
impl<A, W> !RefUnwindSafe for Adapt<A, W>
impl<A, W> !Send for Adapt<A, W>
impl<A, W> !Sync for Adapt<A, W>
impl<A, W> Unpin for Adapt<A, W>
impl<A, W> !UnwindSafe for Adapt<A, W>
Blanket Implementations§
Source§impl<W> AdaptWidget for Wwhere
W: Widget,
impl<W> AdaptWidget for Wwhere
W: Widget,
Source§fn pack(self, hints: AlignHints) -> Pack<Self>
fn pack(self, hints: AlignHints) -> Pack<Self>
Source§fn margins(self, dirs: Directions, style: MarginStyle) -> Margins<Self>
fn margins(self, dirs: Directions, style: MarginStyle) -> Margins<Self>
Source§fn on_configure<F>(self, f: F) -> AdaptEvents<Self>where
F: Fn(&mut AdaptConfigCx<'_, '_>, &mut Self) + 'static,
fn on_configure<F>(self, f: F) -> AdaptEvents<Self>where
F: Fn(&mut AdaptConfigCx<'_, '_>, &mut Self) + 'static,
Events::configure
Read moreSource§fn on_update<F>(self, f: F) -> AdaptEvents<Self>
fn on_update<F>(self, f: F) -> AdaptEvents<Self>
Events::update
Read moreSource§fn on_message<M, H>(self, handler: H) -> AdaptEvents<Self>
fn on_message<M, H>(self, handler: H) -> AdaptEvents<Self>
M
Read moreSource§fn map_message<M, N, H>(self, handler: H) -> AdaptEvents<Self>
fn map_message<M, N, H>(self, handler: H) -> AdaptEvents<Self>
Source§fn on_messages<H>(self, handler: H) -> AdaptEvents<Self>
fn on_messages<H>(self, handler: H) -> AdaptEvents<Self>
Source§fn with_min_size_px(self, w: i32, h: i32) -> Reserve<Self>
fn with_min_size_px(self, w: i32, h: i32) -> Reserve<Self>
Source§fn with_min_size_em(self, w: f32, h: f32) -> Reserve<Self>
fn with_min_size_em(self, w: f32, h: f32) -> Reserve<Self>
Source§fn with_label<D, T>(self, direction: D, label: T) -> WithLabel<Self, D>
fn with_label<D, T>(self, direction: D, label: T) -> WithLabel<Self, D>
Source§impl<W> AdaptWidgetAny for W
impl<W> AdaptWidgetAny for W
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<S, T> CastApprox<T> for Swhere
T: ConvApprox<S>,
impl<S, T> CastApprox<T> for Swhere
T: ConvApprox<S>,
Source§fn try_cast_approx(self) -> Result<T, Error>
fn try_cast_approx(self) -> Result<T, Error>
Source§fn cast_approx(self) -> T
fn cast_approx(self) -> T
Source§impl<S, T> CastFloat<T> for Swhere
T: ConvFloat<S>,
impl<S, T> CastFloat<T> for Swhere
T: ConvFloat<S>,
Source§fn cast_trunc(self) -> T
fn cast_trunc(self) -> T
Source§fn cast_nearest(self) -> T
fn cast_nearest(self) -> T
Source§fn cast_floor(self) -> T
fn cast_floor(self) -> T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<W> TileExt for W
impl<W> TileExt for W
Source§fn is_strict_ancestor_of(&self, id: &Id) -> bool
fn is_strict_ancestor_of(&self, id: &Id) -> bool
id
is not self and is a descendant Read more