Struct slint::FilterModel
pub struct FilterModel<M, F>(_)
where
M: 'static + Model,
F: 'static + Fn(&<M as Model>::Data) -> bool;
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 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: 'static + Model,
F: 'static + Fn(&<M as Model>::Data) -> bool,
impl<M, F> FilterModel<M, F>where
M: 'static + Model,
F: 'static + Fn(&<M as Model>::Data) -> bool,
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: 'static + Model,
F: 'static + Fn(&<M as Model>::Data) -> bool,
impl<M, F> Model for FilterModel<M, F>where
M: 'static + Model,
F: 'static + Fn(&<M as Model>::Data) -> bool,
ยง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ยง
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: 'static + Sized,
F: 'static + Fn(Self::Data) -> U,
fn map<F, U>(self, map_function: F) -> MapModel<Self, F>where
Self: 'static + Sized,
F: 'static + Fn(Self::Data) -> U,
map_function
.
This is a shortcut for MapModel::new()
. Read moreยงfn filter<F>(self, filter_function: F) -> FilterModel<Self, F>where
Self: 'static + Sized,
F: 'static + Fn(&Self::Data) -> bool,
fn filter<F>(self, filter_function: F) -> FilterModel<Self, F>where
Self: 'static + Sized,
F: 'static + Fn(&Self::Data) -> bool,
filter_function
.
This is a shortcut for FilterModel::new()
. Read more