1 | // Copyright © SixtyFPS GmbH <info@slint.dev> |
2 | // SPDX-License-Identifier: MIT |
3 | |
4 | #include "todo.h" |
5 | |
6 | int main() |
7 | { |
8 | auto demo = todo_ui::MainWindow::create(); |
9 | using todo_ui::TodoItem; |
10 | |
11 | auto todo_model = std::make_shared<slint::VectorModel<TodoItem>>(std::vector { |
12 | TodoItem { "Implement the .slint file" , true }, |
13 | TodoItem { "Do the Rust part" , false }, |
14 | TodoItem { "Make the C++ code" , true }, |
15 | TodoItem { "Write some JavaScript code" , false }, |
16 | TodoItem { "Test the application" , false }, |
17 | TodoItem { "Ship to customer" , false }, |
18 | TodoItem { "???" , false }, |
19 | TodoItem { "Profit" , false }, |
20 | }); |
21 | demo->set_todo_model(todo_model); |
22 | |
23 | demo->on_todo_added([todo_model](const slint::SharedString &s) { |
24 | todo_model->push_back(TodoItem { s, false }); |
25 | }); |
26 | |
27 | demo->on_remove_done([todo_model] { |
28 | int offset = 0; |
29 | int count = todo_model->row_count(); |
30 | for (int i = 0; i < count; ++i) { |
31 | if (todo_model->row_data(i - offset)->checked) { |
32 | todo_model->erase(i - offset); |
33 | offset += 1; |
34 | } |
35 | } |
36 | }); |
37 | |
38 | demo->on_popup_confirmed( |
39 | [demo = slint::ComponentWeakHandle(demo)] { (*demo.lock())->window().hide(); }); |
40 | |
41 | demo->window().on_close_requested([todo_model, demo = slint::ComponentWeakHandle(demo)] { |
42 | int count = todo_model->row_count(); |
43 | for (int i = 0; i < count; ++i) { |
44 | if (!todo_model->row_data(i)->checked) { |
45 | (*demo.lock())->invoke_show_confirm_popup(); |
46 | return slint::CloseRequestResponse::KeepWindowShown; |
47 | } |
48 | } |
49 | return slint::CloseRequestResponse::HideWindow; |
50 | }); |
51 | |
52 | demo->set_show_header(true); |
53 | |
54 | demo->on_apply_sorting_and_filtering([todo_model, demo = slint::ComponentWeakHandle(demo)] { |
55 | auto demo_lock = demo.lock(); |
56 | (*demo_lock)->set_todo_model(todo_model); |
57 | |
58 | if ((*demo_lock)->get_hide_done_items()) { |
59 | (*demo_lock) |
60 | ->set_todo_model(std::make_shared<slint::FilterModel<TodoItem>>( |
61 | (*demo_lock)->get_todo_model(), [](auto e) { return !e.checked; })); |
62 | } |
63 | |
64 | if ((*demo_lock)->get_is_sort_by_name()) { |
65 | (*demo_lock) |
66 | ->set_todo_model(std::make_shared<slint::SortModel<TodoItem>>( |
67 | (*demo_lock)->get_todo_model(), |
68 | [](auto lhs, auto rhs) { return lhs.title < rhs.title; })); |
69 | } |
70 | }); |
71 | |
72 | demo->run(); |
73 | } |
74 | |