pub struct ContextualizedVar<T> { /* private fields */ }
Expand description
Represents a variable that delays initialization until the first usage.
Usage that initializes the variable are all AnyVar
and Var<T>
methods except read_only
, downgrade
and boxed
.
The variable re-initializes when the ContextInitHandle::current
is different on usage.
This variable is used in the Var::map
and other mapping methods to support mapping from ContextVar<T>
.
let wgt = MyWgt! {
my_property = MY_CTX_VAR.map(|&b| !b);
};
In the example above the mapping var will bind with the MY_CTX_VAR
context inside the property node, not
the context at the moment the widget is instantiated.
§Clone
Note that a clone of this variable may call the init closure again for the same context, the inited actual var is only reused if it is already inited when clone is called and clone is called on the same context.
Implementations§
source§impl<T: VarValue> ContextualizedVar<T>
impl<T: VarValue> ContextualizedVar<T>
sourcepub fn new<V: Var<T>>(init: impl Fn() -> V + Send + Sync + 'static) -> Self
pub fn new<V: Var<T>>(init: impl Fn() -> V + Send + Sync + 'static) -> Self
New with initialization function.
The init
closure will be called on the first usage of the var, once after the var is cloned and any time
a parent contextualized var is initializing.
sourcepub fn new_value(init: impl Fn() -> T + Send + Sync + 'static) -> Self
pub fn new_value(init: impl Fn() -> T + Send + Sync + 'static) -> Self
New with initialization function that produces a value.
The init
closure will be called on the first usage of the var, once after the var is cloned and any time
a parent contextualized var is initializing.
sourcepub fn borrow_init(&self) -> MappedRwLockReadGuard<'_, BoxedVar<T>>
pub fn borrow_init(&self) -> MappedRwLockReadGuard<'_, BoxedVar<T>>
Borrow/initialize the actual var.
Trait Implementations§
source§impl<T: VarValue> AnyVar for ContextualizedVar<T>
impl<T: VarValue> AnyVar for ContextualizedVar<T>
source§fn clone_any(&self) -> BoxedAnyVar
fn clone_any(&self) -> BoxedAnyVar
source§fn as_unboxed_any(&self) -> &dyn Any
fn as_unboxed_any(&self) -> &dyn Any
dyn Any
methods, on the underlying variable type if boxed.source§fn var_type_id(&self) -> TypeId
fn var_type_id(&self) -> TypeId
source§fn get_any(&self) -> Box<dyn AnyVarValue>
fn get_any(&self) -> Box<dyn AnyVarValue>
source§fn with_any(&self, read: &mut dyn FnMut(&dyn AnyVarValue))
fn with_any(&self, read: &mut dyn FnMut(&dyn AnyVarValue))
source§fn with_new_any(&self, read: &mut dyn FnMut(&dyn AnyVarValue)) -> bool
fn with_new_any(&self, read: &mut dyn FnMut(&dyn AnyVarValue)) -> bool
is_new
.source§fn set_any(&self, value: Box<dyn AnyVarValue>) -> Result<(), VarIsReadOnlyError>
fn set_any(&self, value: Box<dyn AnyVarValue>) -> Result<(), VarIsReadOnlyError>
value
for the variable, it will be set in the end of the current app update. Read moresource§fn last_update(&self) -> VarUpdateId
fn last_update(&self) -> VarUpdateId
VARS.update_id
the variable is new.source§fn is_contextual(&self) -> bool
fn is_contextual(&self) -> bool
source§fn capabilities(&self) -> VarCapability
fn capabilities(&self) -> VarCapability
source§fn hook_any(
&self,
pos_modify_action: Box<dyn Fn(&AnyVarHookArgs<'_>) -> bool + Send + Sync>,
) -> VarHandle
fn hook_any( &self, pos_modify_action: Box<dyn Fn(&AnyVarHookArgs<'_>) -> bool + Send + Sync>, ) -> VarHandle
modify
closure. The closure can return if it is retained after each call. If you modify another variable in a
hook the modification applies in the same update, variable mapping and binding is implemented using hooks. Read moresource§fn hook_animation_stop(
&self,
handler: Box<dyn FnOnce() + Send>,
) -> Result<(), Box<dyn FnOnce() + Send>>
fn hook_animation_stop( &self, handler: Box<dyn FnOnce() + Send>, ) -> Result<(), Box<dyn FnOnce() + Send>>
handler
to be called when the current animation stops. Read moresource§fn strong_count(&self) -> usize
fn strong_count(&self) -> usize
source§fn weak_count(&self) -> usize
fn weak_count(&self) -> usize
source§fn actual_var_any(&self) -> BoxedAnyVar
fn actual_var_any(&self) -> BoxedAnyVar
ContextVar<T>
, gets a clone of self
for other var types.source§fn downgrade_any(&self) -> BoxedAnyWeakVar
fn downgrade_any(&self) -> BoxedAnyWeakVar
source§fn is_animating(&self) -> bool
fn is_animating(&self) -> bool
source§fn modify_importance(&self) -> usize
fn modify_importance(&self) -> usize
source§fn var_ptr(&self) -> VarPtr<'_>
fn var_ptr(&self) -> VarPtr<'_>
source§fn update(&self) -> Result<(), VarIsReadOnlyError>
fn update(&self) -> Result<(), VarIsReadOnlyError>
source§impl<T: VarValue> Clone for ContextualizedVar<T>
impl<T: VarValue> Clone for ContextualizedVar<T>
source§impl<T: VarValue> IntoVar<T> for ContextualizedVar<T>
impl<T: VarValue> IntoVar<T> for ContextualizedVar<T>
source§impl<T: VarValue> Var<T> for ContextualizedVar<T>
impl<T: VarValue> Var<T> for ContextualizedVar<T>
source§type ReadOnly = ReadOnlyVar<T, ContextualizedVar<T>>
type ReadOnly = ReadOnlyVar<T, ContextualizedVar<T>>
Var::read_only
.source§type ActualVar = Box<dyn VarBoxed<T>>
type ActualVar = Box<dyn VarBoxed<T>>
Var::actual_var
.source§type Downgrade = WeakContextualizedVar<T>
type Downgrade = WeakContextualizedVar<T>
Var::downgrade
.source§type MapBidi<O: VarValue> = ContextualizedVar<O>
type MapBidi<O: VarValue> = ContextualizedVar<O>
Var::map_bidi
.source§type FlatMap<O: VarValue, V: Var<O>> = ContextualizedVar<O>
type FlatMap<O: VarValue, V: Var<O>> = ContextualizedVar<O>
Var::flat_map
.source§type FilterMap<O: VarValue> = ContextualizedVar<O>
type FilterMap<O: VarValue> = ContextualizedVar<O>
Var::filter_map
.source§type FilterMapBidi<O: VarValue> = ContextualizedVar<O>
type FilterMapBidi<O: VarValue> = ContextualizedVar<O>
Var::filter_map_bidi
.source§type MapRef<O: VarValue> = MapRef<T, O, ContextualizedVar<T>>
type MapRef<O: VarValue> = MapRef<T, O, ContextualizedVar<T>>
Var::map_ref
.source§type MapRefBidi<O: VarValue> = MapRefBidi<T, O, ContextualizedVar<T>>
type MapRefBidi<O: VarValue> = MapRefBidi<T, O, ContextualizedVar<T>>
Var::map_ref_bidi
.source§type Easing = ContextualizedVar<T>
type Easing = ContextualizedVar<T>
Var::easing
.source§fn modify<F>(&self, modify: F) -> Result<(), VarIsReadOnlyError>
fn modify<F>(&self, modify: F) -> Result<(), VarIsReadOnlyError>
source§fn actual_var(self) -> Self::ActualVar
fn actual_var(self) -> Self::ActualVar
source§fn into_value(self) -> T
fn into_value(self) -> T
source§fn read_only(&self) -> Self::ReadOnly
fn read_only(&self) -> Self::ReadOnly
source§fn map<O, M>(&self, map: M) -> Self::Map<O>
fn map<O, M>(&self, map: M) -> Self::Map<O>
source§fn map_bidi<O, M, B>(&self, map: M, map_back: B) -> Self::MapBidi<O>
fn map_bidi<O, M, B>(&self, map: M, map_back: B) -> Self::MapBidi<O>
source§fn flat_map<O, V, M>(&self, map: M) -> Self::FlatMap<O, V>
fn flat_map<O, V, M>(&self, map: M) -> Self::FlatMap<O, V>
source§fn filter_map<O, M, I>(&self, map: M, fallback: I) -> Self::FilterMap<O>
fn filter_map<O, M, I>(&self, map: M, fallback: I) -> Self::FilterMap<O>
source§fn filter_map_bidi<O, M, B, I>(
&self,
map: M,
map_back: B,
fallback: I,
) -> Self::FilterMapBidi<O>
fn filter_map_bidi<O, M, B, I>( &self, map: M, map_back: B, fallback: I, ) -> Self::FilterMapBidi<O>
source§fn map_ref<O, M>(&self, map: M) -> Self::MapRef<O>
fn map_ref<O, M>(&self, map: M) -> Self::MapRef<O>
self
. The map
closure is called for each value access, it must reference the
value O
that already exists in T
.source§fn map_ref_bidi<O, M, B>(&self, map: M, map_mut: B) -> Self::MapRefBidi<O>
fn map_ref_bidi<O, M, B>(&self, map: M, map_mut: B) -> Self::MapRefBidi<O>
self
. The map
closure is called for each value access, it must reference the
value O
that already exists in T
, the map_mut
closure is called for every modify request, it must do the same
as map
but with mutable access.source§fn easing_with<F, SE>(
&self,
duration: Duration,
easing: F,
sampler: SE,
) -> Self::Easingwhere
T: Transitionable,
F: Fn(EasingTime) -> EasingStep + Send + Sync + 'static,
SE: Fn(&Transition<T>, EasingStep) -> T + Send + Sync + 'static,
fn easing_with<F, SE>(
&self,
duration: Duration,
easing: F,
sampler: SE,
) -> Self::Easingwhere
T: Transitionable,
F: Fn(EasingTime) -> EasingStep + Send + Sync + 'static,
SE: Fn(&Transition<T>, EasingStep) -> T + Send + Sync + 'static,
source§fn boxed(self) -> BoxedVar<T>where
Self: Sized,
fn boxed(self) -> BoxedVar<T>where
Self: Sized,
BoxedVar<T>
, does not double box.source§fn boxed_any(self) -> BoxedAnyVarwhere
Self: Sized,
fn boxed_any(self) -> BoxedAnyVarwhere
Self: Sized,
BoxedAnyVar
, does not double box.source§fn hook(
&self,
pos_modify_action: impl Fn(&VarHookArgs<'_, T>) -> bool + Send + Sync + 'static,
) -> VarHandle
fn hook( &self, pos_modify_action: impl Fn(&VarHookArgs<'_, T>) -> bool + Send + Sync + 'static, ) -> VarHandle
modify
closure. The closure can return if it is retained after each call. If you modify another variable in a
hook the modification applies in the same update, variable mapping and binding is implemented using hooks. Read moresource§fn wait_update(&self) -> impl Future<Output = VarUpdateId> + Send + Sync
fn wait_update(&self) -> impl Future<Output = VarUpdateId> + Send + Sync
last_update
to change. Read moresource§fn wait_value(
&self,
predicate: impl Fn(&T) -> bool + Send + Sync,
) -> impl Future<Output = ()> + Send + Sync
fn wait_value( &self, predicate: impl Fn(&T) -> bool + Send + Sync, ) -> impl Future<Output = ()> + Send + Sync
predicate
.source§fn with_new<R, F>(&self, read: F) -> Option<R>
fn with_new<R, F>(&self, read: F) -> Option<R>
is_new
.source§fn get_ne(&self, value: &mut T) -> bool
fn get_ne(&self, value: &mut T) -> bool
value
if the current value is not equal to it.source§fn get_new_into(&self, value: &mut T) -> bool
fn get_new_into(&self, value: &mut T) -> bool
value
if the current value is_new
.source§fn get_new_ne(&self, value: &mut T) -> bool
fn get_new_ne(&self, value: &mut T) -> bool
value
if the variable value is_new
and not equal to the value
.source§fn set<I>(&self, value: I) -> Result<(), VarIsReadOnlyError>where
I: Into<T>,
fn set<I>(&self, value: I) -> Result<(), VarIsReadOnlyError>where
I: Into<T>,
value
for the variable, it will be set in the end of the current app update.source§fn set_from<I>(&self, other: &I) -> Result<(), VarIsReadOnlyError>where
I: Var<T>,
fn set_from<I>(&self, other: &I) -> Result<(), VarIsReadOnlyError>where
I: Var<T>,
value
for the variable, it will be set in the end of the current app update to the updated
value of other
, so if the other var has already scheduled an update, the updated value will be used. Read moresource§fn set_from_map<Iv, I, M>(
&self,
other: &I,
map: M,
) -> Result<(), VarIsReadOnlyError>
fn set_from_map<Iv, I, M>( &self, other: &I, map: M, ) -> Result<(), VarIsReadOnlyError>
other
value at the time of update, mapped to the type of self
.source§fn filter_try_into<O, I>(&self, fallback: I) -> Self::FilterMap<O>
fn filter_try_into<O, I>(&self, fallback: I) -> Self::FilterMap<O>
source§fn bind_filter_map<T2, V2, F>(&self, other: &V2, map: F) -> VarHandle
fn bind_filter_map<T2, V2, F>(&self, other: &V2, map: F) -> VarHandle
other
with the new values of self
transformed by map
, if the closure returns a value. Read moresource§fn bind_map_bidi<T2, V2, M, B>(
&self,
other: &V2,
map: M,
map_back: B,
) -> VarHandles
fn bind_map_bidi<T2, V2, M, B>( &self, other: &V2, map: M, map_back: B, ) -> VarHandles
source§fn bind_filter_map_bidi<T2, V2, M, B>(
&self,
other: &V2,
map: M,
map_back: B,
) -> VarHandles
fn bind_filter_map_bidi<T2, V2, M, B>( &self, other: &V2, map: M, map_back: B, ) -> VarHandles
self
to other
and back with the new values of self
transformed by map
and the new values of other
transformed
by map_back
, the value is assigned in a update only if the closures returns a value. Read moresource§fn set_bind<V2>(&self, other: &V2) -> VarHandlewhere
V2: Var<T>,
fn set_bind<V2>(&self, other: &V2) -> VarHandlewhere
V2: Var<T>,
other.set_from(self)
and self.bind(other)
.source§fn bind_bidi<V2>(&self, other: &V2) -> VarHandleswhere
V2: Var<T>,
fn bind_bidi<V2>(&self, other: &V2) -> VarHandleswhere
V2: Var<T>,
other
with the new values of self
and self
with the new values of other
. Read moresource§fn trace_value<E, S>(&self, enter_value: E) -> VarHandle
fn trace_value<E, S>(&self, enter_value: E) -> VarHandle
source§fn animate<A>(&self, animate: A) -> AnimationHandle
fn animate<A>(&self, animate: A) -> AnimationHandle
source§fn sequence<A>(&self, animate: A) -> VarHandle
fn sequence<A>(&self, animate: A) -> VarHandle
animate
, the closure is called once at the start to begin, then again every time
the variable stops animating. Read moresource§fn step_oci<N>(&self, new_value: N, delay: Duration) -> AnimationHandlewhere
N: Into<T>,
fn step_oci<N>(&self, new_value: N, delay: Duration) -> AnimationHandlewhere
N: Into<T>,
new_value
, every time the delay
elapses the variable is set to the next value.source§fn set_step_oci<V0, V1>(
&self,
from: V0,
to: V1,
delay: Duration,
) -> AnimationHandle
fn set_step_oci<V0, V1>( &self, from: V0, to: V1, delay: Duration, ) -> AnimationHandle
from
and to
, the variable is set to from
to start and every time the delay
elapses
the variable is set to the next value.source§fn steps<F>(
&self,
steps: Vec<(Factor, T)>,
duration: Duration,
easing: F,
) -> AnimationHandle
fn steps<F>( &self, steps: Vec<(Factor, T)>, duration: Duration, easing: F, ) -> AnimationHandle
duration
elapses. Read moresource§fn debug(&self) -> VarDebug<'_, T, Self>
fn debug(&self) -> VarDebug<'_, T, Self>
fmt::Debug
to write the var value.Auto Trait Implementations§
impl<T> !Freeze for ContextualizedVar<T>
impl<T> !RefUnwindSafe for ContextualizedVar<T>
impl<T> Send for ContextualizedVar<T>where
T: Send,
impl<T> Sync for ContextualizedVar<T>where
T: Sync,
impl<T> Unpin for ContextualizedVar<T>where
T: Unpin,
impl<T> !UnwindSafe for ContextualizedVar<T>
Blanket Implementations§
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<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more