17
|
1
|
#![deny(unsafe_code)] |
|
2
|
|
|
3
|
#[cfg(target_arch = "wasm32")] |
|
4
|
use wasm_bindgen::prelude::*; |
|
5
|
|
|
6
|
slint::include_modules!(); |
|
7
|
|
|
8
|
use std::rc::Rc; |
|
9
|
|
|
10
|
use slint::{Model, StandardListViewItem, VecModel}; |
|
11
|
|
|
12
|
#[cfg_attr(target_arch = "wasm32", wasm_bindgen(start))] |
|
13
|
pub fn run() { |
|
14
|
// This provides better error messages in debug mode. |
|
15
|
// It's disabled in release mode so it doesn't bloat up the file size. |
|
16
|
#[cfg(all(debug_assertions, target_arch = "wasm32"))] |
|
17
|
console_error_panic_hook::set_once(); |
|
18
|
|
|
19
|
let app = App::new().unwrap(); |
|
20
|
|
|
21
|
let row_data: Rc<VecModel<slint::ModelRc<StandardListViewItem>>> = Rc::new(VecModel::default()); |
|
22
|
|
|
23
|
for r in 1..101 { |
|
24
|
let items = Rc::new(VecModel::default()); |
|
25
|
|
|
26
|
for c in 1..5 { |
|
27
|
items.push(slint::format!("Item {r}.{c}").into()); |
|
28
|
} |
|
29
|
|
|
30
|
row_data.push(items.into()); |
|
31
|
} |
|
32
|
|
|
33
|
app.global::<TableViewPageAdapter>().set_row_data(row_data.clone().into()); |
|
34
|
|
|
35
|
app.global::<TableViewPageAdapter>().on_sort_ascending({ |
|
36
|
let app_weak = app.as_weak(); |
|
37
|
let row_data = row_data.clone(); |
|
38
|
move |index| { |
|
39
|
let row_data = row_data.clone(); |
|
40
|
|
|
41
|
let sort_model = Rc::new(row_data.sort_by(move |r_a, r_b| { |
|
42
|
let c_a = r_a.row_data(index as usize).unwrap(); |
|
43
|
let c_b = r_b.row_data(index as usize).unwrap(); |
|
44
|
|
|
45
|
c_a.text.cmp(&c_b.text) |
|
46
|
})); |
|
47
|
|
|
48
|
app_weak.unwrap().global::<TableViewPageAdapter>().set_row_data(sort_model.into()); |
|
49
|
} |
|
50
|
}); |
|
51
|
|
|
52
|
app.global::<TableViewPageAdapter>().on_sort_descending({ |
|
53
|
let app_weak = app.as_weak(); |
|
54
|
move |index| { |
|
55
|
let row_data = row_data.clone(); |
|
56
|
|
|
57
|
let sort_model = Rc::new(row_data.sort_by(move |r_a, r_b| { |
|
58
|
let c_a = r_a.row_data(index as usize).unwrap(); |
|
59
|
let c_b = r_b.row_data(index as usize).unwrap(); |
|
60
|
|
|
61
|
c_b.text.cmp(&c_a.text) |
|
62
|
})); |
|
63
|
|
|
64
|
app_weak.unwrap().global::<TableViewPageAdapter>().set_row_data(sort_model.into()); |
|
65
|
} |
|
66
|
}); |
|
67
|
|
|
68
|
app.run().unwrap(); |
|
69
|
} |