Struct slint::FilterModel
pub struct FilterModel<M, F>(_)
where
M: Model + 'static,
F: Fn(&<M as Model>::Data) -> bool + 'static;
Expand description
Provides a filtered subset of rows by another Model
.
When the other Model is updated, the FilterModel
is updated accordingly.
Generic parameters:
M
the type of the wrappedModel
.F
the filter function.
Example
Here we have a VecModel
holding crate::SharedString
s.
It is then filtered into a FilterModel
.
let model = VecModel::from(vec![
SharedString::from("Lorem"),
SharedString::from("ipsum"),
SharedString::from("dolor"),
]);
let filtered_model = FilterModel::new(model, |s| s.contains('o'));
assert_eq!(filtered_model.row_data(0).unwrap(), SharedString::from("Lorem"));
assert_eq!(filtered_model.row_data(1).unwrap(), SharedString::from("dolor"));
Alternatively you can use the shortcut ModelExt::filter
.
let filtered_model = VecModel::from(vec![
SharedString::from("Lorem"),
SharedString::from("ipsum"),
SharedString::from("dolor"),
]).filter(|s| s.contains('o'));
If you want to modify the underlying VecModel
you can give it a Rc
of the FilterModel:
let model = Rc::new(VecModel::from(vec![
SharedString::from("Lorem"),
SharedString::from("ipsum"),
SharedString::from("dolor"),
]));
let filtered_model = FilterModel::new(model.clone(), |s| s.contains('o'));
assert_eq!(filtered_model.row_data(0).unwrap(), SharedString::from("Lorem"));
assert_eq!(filtered_model.row_data(1).unwrap(), SharedString::from("dolor"));
model.set_row_data(1, SharedString::from("opsom"));
assert_eq!(filtered_model.row_data(0).unwrap(), SharedString::from("Lorem"));
assert_eq!(filtered_model.row_data(1).unwrap(), SharedString::from("opsom"));
assert_eq!(filtered_model.row_data(2).unwrap(), SharedString::from("dolor"));
Implementationsยง
ยงimpl<M, F> FilterModel<M, F>where
M: Model + 'static,
F: Fn(&<M as Model>::Data) -> bool + 'static,
impl<M, F> FilterModel<M, F>where
M: Model + 'static,
F: Fn(&<M as Model>::Data) -> bool + 'static,
pub fn new(wrapped_model: M, filter_function: F) -> FilterModel<M, F>
pub fn new(wrapped_model: M, filter_function: F) -> FilterModel<M, F>
Creates a new FilterModel based on the given wrapped_model
and filtered by filter_function
.
Alternativly you can use ModelExt::filter
on your Model.
pub fn apply_filter(&self)
๐Deprecated: Use reset() instead
pub fn apply_filter(&self)
Manually reapply the filter. You need to run this e.g. if the filtering function depends on
mutable state and it has changed. This method is deprecated use reset
instead.
pub fn reset(&self)
pub fn reset(&self)
Manually reapply the filter. You need to run this e.g. if the filtering function depends on mutable state and it has changed.
pub fn unfiltered_row(&self, filtered_row: usize) -> usize
pub fn unfiltered_row(&self, filtered_row: usize) -> usize
Gets the row index of the underlying unfiltered model for a given filtered row index.
Trait Implementationsยง
ยงimpl<M, F> Model for FilterModel<M, F>where
M: Model + 'static,
F: Fn(&<M as Model>::Data) -> bool + 'static,
impl<M, F> Model for FilterModel<M, F>where
M: Model + 'static,
F: Fn(&<M as Model>::Data) -> bool + 'static,
ยงfn row_data(&self, row: usize) -> Option<<FilterModel<M, F> as Model>::Data>
fn row_data(&self, row: usize) -> Option<<FilterModel<M, F> as Model>::Data>
row < row_count()
. Read moreยงfn set_row_data(&self, row: usize, data: <FilterModel<M, F> as Model>::Data)
fn set_row_data(&self, row: usize, data: <FilterModel<M, F> as Model>::Data)
ยงfn model_tracker(&self) -> &dyn ModelTracker
fn model_tracker(&self) -> &dyn ModelTracker
ModelNotify
field. Read moreAuto Trait Implementationsยง
impl<M, F> !RefUnwindSafe for FilterModel<M, F>
impl<M, F> !Send for FilterModel<M, F>
impl<M, F> !Sync for FilterModel<M, F>
impl<M, F> Unpin for FilterModel<M, F>
impl<M, F> !UnwindSafe for FilterModel<M, F>
Blanket Implementationsยง
ยงimpl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
ยงfn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
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
.ยงfn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.ยง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.ยง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>
ยงimpl<T> ModelExt for Twhere
T: Model,
impl<T> ModelExt for Twhere
T: Model,
ยงfn row_data_tracked(&self, row: usize) -> Option<Self::Data>
fn row_data_tracked(&self, row: usize) -> Option<Self::Data>
ModelTracker::track_row_data_changes
before returning Model::row_data
. Read moreยงfn map<F, U>(self, map_function: F) -> MapModel<Self, F>where
Self: Sized + 'static,
F: Fn(Self::Data) -> U + 'static,
fn map<F, U>(self, map_function: F) -> MapModel<Self, F>where
Self: Sized + 'static,
F: Fn(Self::Data) -> U + 'static,
map_function
.
This is a shortcut for MapModel::new()
.ยงfn filter<F>(self, filter_function: F) -> FilterModel<Self, F>where
Self: Sized + 'static,
F: Fn(&Self::Data) -> bool + 'static,
fn filter<F>(self, filter_function: F) -> FilterModel<Self, F>where
Self: Sized + 'static,
F: Fn(&Self::Data) -> bool + 'static,
filter_function
.
This is a shortcut for FilterModel::new()
.