From 28c569d5475d8bc7d5bdec623827c6f0ec25fa70 Mon Sep 17 00:00:00 2001 From: doryan Date: Mon, 12 Aug 2024 12:16:28 +0400 Subject: [PATCH] feat(sorter): add sorter model --- src/view/pages/signal_reducing.rs | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/view/pages/signal_reducing.rs b/src/view/pages/signal_reducing.rs index 703a633..63fd2f2 100644 --- a/src/view/pages/signal_reducing.rs +++ b/src/view/pages/signal_reducing.rs @@ -67,7 +67,7 @@ pub fn signal_reducing_page(wrapper: &Box) { let result_table_headers_labels: [&str; 4] = ["f, МГц", "Xc, Ом", "Vп, мВ", "ζ"]; - let model = gio::ListStore::new::(); + let model = ListStore::new::(); let model_for_events = model.clone(); for number in (0..=100).step_by(5) { @@ -78,7 +78,16 @@ pub fn signal_reducing_page(wrapper: &Box) { } } - let selection_model = NoSelection::new(Some(model)); + let numeric_sorter = CustomSorter::new(|a, b| { + let a = a.downcast_ref::().unwrap().frequency(); + let b = b.downcast_ref::().unwrap().frequency(); + + a.total_cmp(&b).into() + }); + + let sorted_model = SortListModel::new(Some(model), Some(numeric_sorter.clone())); + + let selection_model = NoSelection::new(Some(sorted_model)); let result_table = ColumnView::builder() .reorderable(true) @@ -86,6 +95,14 @@ pub fn signal_reducing_page(wrapper: &Box) { .model(&selection_model) .build(); + result_table.connect_activate(clone!( + #[strong] + numeric_sorter, + move |_, _| { + numeric_sorter.changed(SorterChange::Different); + } + )); + for label in result_table_headers_labels { let factory = SignalListItemFactory::new();