1// Copyright © SixtyFPS GmbH <info@slint.dev>
2// SPDX-License-Identifier: MIT
3
4use slint::*;
5
6use crate::{
7 mvc::{
8 {CreateTaskController, TaskListController}, {DateModel, TimeModel},
9 },
10 ui,
11};
12
13// a helper function to make adapter and controller connection a little bit easier
14fn connect_with_controller(
15 view_handle: &ui::MainWindow,
16 controller: &CreateTaskController,
17 connect_adapter_controller: impl FnOnce(ui::CreateTaskAdapter, CreateTaskController) + 'static,
18) {
19 connect_adapter_controller(view_handle.global::<ui::CreateTaskAdapter>(), controller.clone());
20}
21
22// a helper function to make adapter and controller connection a little bit easier
23fn connect_with_task_list_controller(
24 view_handle: &ui::MainWindow,
25 controller: &TaskListController,
26 connect_adapter_controller: impl FnOnce(ui::CreateTaskAdapter, TaskListController) + 'static,
27) {
28 connect_adapter_controller(view_handle.global::<ui::CreateTaskAdapter>(), controller.clone());
29}
30
31// one place to implement connection between adapter (view) and controller
32pub fn connect(view_handle: &ui::MainWindow, controller: CreateTaskController) {
33 connect_with_controller(view_handle, &controller, {
34 move |adapter, controller| {
35 adapter.on_back(move || {
36 controller.back();
37 })
38 }
39 });
40
41 connect_with_controller(view_handle, &controller, {
42 move |adapter, controller| {
43 adapter.on_current_date(move || map_date_model_to_date(controller.current_date()))
44 }
45 });
46
47 connect_with_controller(view_handle, &controller, {
48 move |adapter, controller| {
49 adapter.on_current_time(move || map_time_model_to_time(controller.current_time()))
50 }
51 });
52
53 connect_with_controller(view_handle, &controller, {
54 move |adapter, controller| {
55 adapter.on_date_string(move |date| {
56 controller.date_string(map_date_to_date_model(date)).into()
57 })
58 }
59 });
60
61 connect_with_controller(view_handle, &controller, {
62 move |adapter, controller| {
63 adapter.on_time_string(move |time| {
64 controller.time_string(map_time_to_time_model(time)).into()
65 })
66 }
67 });
68
69 connect_with_controller(view_handle, &controller, {
70 move |adapter, controller| {
71 adapter.on_time_stamp(move |date, time| {
72 controller
73 .time_stamp(map_date_to_date_model(date), map_time_to_time_model(time))
74 .into()
75 })
76 }
77 });
78}
79
80pub fn connect_task_list_controller(view_handle: &ui::MainWindow, controller: TaskListController) {
81 connect_with_task_list_controller(view_handle, &controller, {
82 move |adapter: CreateTaskAdapter<'_>, controller: TaskListController| {
83 adapter.on_create(move |title: SharedString, time_stamp: i32| {
84 controller.create_task(title.as_str(), due_date:time_stamp as i64)
85 })
86 }
87 });
88}
89
90fn map_time_model_to_time(time_model: TimeModel) -> ui::Time {
91 ui::Time {
92 hour: time_model.hour as i32,
93 minute: time_model.minute as i32,
94 second: time_model.second as i32,
95 }
96}
97
98fn map_time_to_time_model(time: ui::Time) -> TimeModel {
99 TimeModel { hour: time.hour as u32, minute: time.minute as u32, second: time.second as u32 }
100}
101
102fn map_date_model_to_date(date_model: DateModel) -> ui::Date {
103 ui::Date { year: date_model.year, month: date_model.month as i32, day: date_model.day as i32 }
104}
105
106fn map_date_to_date_model(date: ui::Date) -> DateModel {
107 DateModel { year: date.year, month: date.month as u32, day: date.day as u32 }
108}
109

Provided by KDAB

Privacy Policy
Learn Rust with the experts
Find out more