changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > demo / annotate ui/lib.rs

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