Struct i_slint_core::model::SortModel
source · pub struct SortModel<M, F>(_)
where
M: Model + 'static,
F: SortHelper<M::Data>;Expand description
Provides a sorted view of rows by another Model.
When the other Model is updated, the Sorted is updated accordingly.
Generic parameters:
Mthe type of the wrappedModel.Fa type that provides an order to model rows. It is constrained by the internal traitSortHelper, which is used to sort the model in ascending order if the model data supports it, or by a given sort function.
Example
Here we have a VecModel holding crate::SharedStrings.
It is then sorted into a SortModel.
let model = VecModel::from(vec![
SharedString::from("Lorem"),
SharedString::from("ipsum"),
SharedString::from("dolor"),
]);
let sorted_model = SortModel::new(model, |lhs, rhs| lhs.to_lowercase().cmp(&rhs.to_lowercase()));
assert_eq!(sorted_model.row_data(0).unwrap(), SharedString::from("dolor"));
assert_eq!(sorted_model.row_data(1).unwrap(), SharedString::from("ipsum"));
assert_eq!(sorted_model.row_data(2).unwrap(), SharedString::from("Lorem"));Alternatively you can use the shortcut ModelExt::sort_by.
let sorted_model = VecModel::from(vec![
SharedString::from("Lorem"),
SharedString::from("ipsum"),
SharedString::from("dolor"),
]).sort_by(|lhs, rhs| lhs.to_lowercase().cmp(&rhs.to_lowercase()));It is also possible to get a ascending sorted SortModel order for core::cmp::Ord type items.
let model = VecModel::from(vec![
5,
1,
3,
]);
let sorted_model = SortModel::new_ascending(model);
assert_eq!(sorted_model.row_data(0).unwrap(), 1);
assert_eq!(sorted_model.row_data(1).unwrap(), 3);
assert_eq!(sorted_model.row_data(2).unwrap(), 5);Alternatively you can use the shortcut ModelExt::sort.
let sorted_model = VecModel::from(vec![
5,
1,
3,
]).sort();If you want to modify the underlying VecModel you can give it a Rc of the SortModel:
let model = Rc::new(VecModel::from(vec![
SharedString::from("Lorem"),
SharedString::from("ipsum"),
SharedString::from("dolor"),
]));
let sorted_model = SortModel::new(model.clone(), |lhs, rhs| lhs.to_lowercase().cmp(&rhs.to_lowercase()));
assert_eq!(sorted_model.row_data(0).unwrap(), SharedString::from("dolor"));
assert_eq!(sorted_model.row_data(1).unwrap(), SharedString::from("ipsum"));
assert_eq!(sorted_model.row_data(2).unwrap(), SharedString::from("Lorem"));
model.set_row_data(1, SharedString::from("opsom"));
assert_eq!(sorted_model.row_data(0).unwrap(), SharedString::from("dolor"));
assert_eq!(sorted_model.row_data(1).unwrap(), SharedString::from("Lorem"));
assert_eq!(sorted_model.row_data(2).unwrap(), SharedString::from("opsom"));Implementations§
source§impl<M, F> SortModel<M, F>where
M: Model + 'static,
F: FnMut(&M::Data, &M::Data) -> Ordering + 'static,
impl<M, F> SortModel<M, F>where M: Model + 'static, F: FnMut(&M::Data, &M::Data) -> Ordering + 'static,
source§impl<M> SortModel<M, AscendingSortHelper>where
M: Model + 'static,
M::Data: Ord,
impl<M> SortModel<M, AscendingSortHelper>where M: Model + 'static, M::Data: Ord,
sourcepub fn new_ascending(wrapped_model: M) -> Selfwhere
M::Data: Ord,
pub fn new_ascending(wrapped_model: M) -> Selfwhere M::Data: Ord,
Creates a new SortModel based on the given wrapped_model and sorted in ascending order.
Alternativly you can use ModelExt::sort on your Model.
sourcepub fn reset(&self)
pub fn reset(&self)
Manually reapply the sorting. You need to run this e.g. if the sort function depends on mutable state and it has changed.
sourcepub fn unsorted_row(&self, sorted_row: usize) -> usize
pub fn unsorted_row(&self, sorted_row: usize) -> usize
Gets the row index of the underlying unsorted model for a given sorted row index.
Trait Implementations§
source§impl<M, S> Model for SortModel<M, S>where
M: Model + 'static,
S: SortHelper<M::Data>,
impl<M, S> Model for SortModel<M, S>where M: Model + 'static, S: SortHelper<M::Data>,
source§fn row_data(&self, row: usize) -> Option<Self::Data>
fn row_data(&self, row: usize) -> Option<Self::Data>
row < row_count(). Read moresource§fn set_row_data(&self, row: usize, data: Self::Data)
fn set_row_data(&self, row: usize, data: Self::Data)
source§fn model_tracker(&self) -> &dyn ModelTracker
fn model_tracker(&self) -> &dyn ModelTracker
ModelNotify field. Read moreAuto Trait Implementations§
impl<M, F> !RefUnwindSafe for SortModel<M, F>
impl<M, F> !Send for SortModel<M, F>
impl<M, F> !Sync for SortModel<M, F>
impl<M, F> Unpin for SortModel<M, F>
impl<M, F> !UnwindSafe for SortModel<M, F>
Blanket Implementations§
source§impl<T> ModelExt for Twhere
T: Model,
impl<T> ModelExt for Twhere T: Model,
source§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 moresource§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().source§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().