forked from slint-ui/slint
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.rs
76 lines (54 loc) · 2.31 KB
/
main.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// Copyright © SixtyFPS GmbH <[email protected]>
// SPDX-License-Identifier: MIT
#![deny(unsafe_code)]
#[cfg(target_arch = "wasm32")]
use wasm_bindgen::prelude::*;
slint::include_modules!();
use std::rc::Rc;
use slint::{Model, StandardListViewItem, VecModel};
#[cfg_attr(target_arch = "wasm32", wasm_bindgen(start))]
pub fn main() {
// This provides better error messages in debug mode.
// It's disabled in release mode so it doesn't bloat up the file size.
#[cfg(all(debug_assertions, target_arch = "wasm32"))]
console_error_panic_hook::set_once();
// Disable gettext on macOS due to https://github.com/Koka/gettext-rs/issues/114
#[cfg(not(target_os = "macos"))]
slint::init_translations!(concat!(env!("CARGO_MANIFEST_DIR"), "/lang/"));
let app = App::new().unwrap();
let row_data: Rc<VecModel<slint::ModelRc<StandardListViewItem>>> = Rc::new(VecModel::default());
for r in 1..101 {
let items = Rc::new(VecModel::default());
for c in 1..5 {
items.push(slint::format!("Item {r}.{c}").into());
}
row_data.push(items.into());
}
app.global::<TableViewPageAdapter>().set_row_data(row_data.clone().into());
app.global::<TableViewPageAdapter>().on_sort_ascending({
let app_weak = app.as_weak();
let row_data = row_data.clone();
move |index| {
let row_data = row_data.clone();
let sort_model = Rc::new(row_data.sort_by(move |r_a, r_b| {
let c_a = r_a.row_data(index as usize).unwrap();
let c_b = r_b.row_data(index as usize).unwrap();
c_a.text.cmp(&c_b.text)
}));
app_weak.unwrap().global::<TableViewPageAdapter>().set_row_data(sort_model.into());
}
});
app.global::<TableViewPageAdapter>().on_sort_descending({
let app_weak = app.as_weak();
move |index| {
let row_data = row_data.clone();
let sort_model = Rc::new(row_data.sort_by(move |r_a, r_b| {
let c_a = r_a.row_data(index as usize).unwrap();
let c_b = r_b.row_data(index as usize).unwrap();
c_b.text.cmp(&c_a.text)
}));
app_weak.unwrap().global::<TableViewPageAdapter>().set_row_data(sort_model.into());
}
});
app.run().unwrap();
}