changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > demo / 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
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 }