changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > demo / src/crates/ui/lib.rs

changeset 29: 7e640cebeada
parent: ba323d8c0f93
author: ellis <ellis@rwest.io>
date: Thu, 15 Jun 2023 21:42:39 -0400
permissions: -rw-r--r--
description: containerfile, refactoring
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
34  .global::<TableViewPageAdapter>()
35  .set_row_data(row_data.clone().into());
36 
37  app.global::<TableViewPageAdapter>().on_sort_ascending({
38  let app_weak = app.as_weak();
39  let row_data = row_data.clone();
40  move |index| {
41  let row_data = row_data.clone();
42 
43  let sort_model = Rc::new(row_data.sort_by(move |r_a, r_b| {
44  let c_a = r_a.row_data(index as usize).unwrap();
45  let c_b = r_b.row_data(index as usize).unwrap();
46 
47  c_a.text.cmp(&c_b.text)
48  }));
49 
50  app_weak
51  .unwrap()
52  .global::<TableViewPageAdapter>()
53  .set_row_data(sort_model.into());
54  }
55  });
56 
57  app.global::<TableViewPageAdapter>().on_sort_descending({
58  let app_weak = app.as_weak();
59  move |index| {
60  let row_data = row_data.clone();
61 
62  let sort_model = Rc::new(row_data.sort_by(move |r_a, r_b| {
63  let c_a = r_a.row_data(index as usize).unwrap();
64  let c_b = r_b.row_data(index as usize).unwrap();
65 
66  c_b.text.cmp(&c_a.text)
67  }));
68 
69  app_weak
70  .unwrap()
71  .global::<TableViewPageAdapter>()
72  .set_row_data(sort_model.into());
73  }
74  });
75 
76  app.run().unwrap();
77 }