From f45aa601c746ee205b6598889f7c0e56e5471e13 Mon Sep 17 00:00:00 2001 From: Vyn Date: Tue, 15 Oct 2024 16:41:22 +0200 Subject: [PATCH] Remove PNG images, replace them with SVGs --- external/slint-vynui/BurgerIcon.slint | 9 --- external/slint-vynui/DatePicker.slint | 3 +- external/slint-vynui/Svg.slint | 12 ++++ external/slint-vynui/index.slint | 2 +- src/UiState.cpp | 26 ++----- ui/Backend.slint | 32 ++++----- ui/MainView.slint | 28 +++----- ui/Utils.slint | 6 +- ui/appwindow.slint | 6 +- ui/components/CreateTaskOrEvent.slint | 4 +- ui/{ => components}/EventGroup.slint | 31 ++++---- ui/{ => components}/SideBar.slint | 18 +---- ui/{ => components}/TaskLine.slint | 22 +++--- ui/images/add.png | Bin 5823 -> 0 bytes ui/images/calendar.png | Bin 4439 -> 0 bytes ui/images/delete.png | Bin 2005 -> 0 bytes ui/images/edit.png | Bin 1186 -> 0 bytes ui/images/not-visible.png | Bin 2381 -> 0 bytes ui/images/settings.png | Bin 3784 -> 0 bytes ui/images/task.png | Bin 13498 -> 0 bytes ui/images/visible.png | Bin 2386 -> 0 bytes ui/windows/EventWindow.slint | 100 -------------------------- ui/windows/TaskWindow.slint | 93 ------------------------ 23 files changed, 84 insertions(+), 308 deletions(-) delete mode 100644 external/slint-vynui/BurgerIcon.slint create mode 100644 external/slint-vynui/Svg.slint rename ui/{ => components}/EventGroup.slint (66%) rename ui/{ => components}/SideBar.slint (59%) rename ui/{ => components}/TaskLine.slint (77%) delete mode 100644 ui/images/add.png delete mode 100644 ui/images/calendar.png delete mode 100644 ui/images/delete.png delete mode 100644 ui/images/edit.png delete mode 100644 ui/images/not-visible.png delete mode 100644 ui/images/settings.png delete mode 100644 ui/images/task.png delete mode 100644 ui/images/visible.png delete mode 100644 ui/windows/EventWindow.slint delete mode 100644 ui/windows/TaskWindow.slint diff --git a/external/slint-vynui/BurgerIcon.slint b/external/slint-vynui/BurgerIcon.slint deleted file mode 100644 index 23393dd..0000000 --- a/external/slint-vynui/BurgerIcon.slint +++ /dev/null @@ -1,9 +0,0 @@ -import { Palette } from "./Palette.slint"; - -export component BurgerIcon inherits Path { - width: 32px; - height: 32px; - commands: "M3 6h18M3 12h18M3 18h18"; - stroke: Palette.foreground; - stroke-width: 2px; -} diff --git a/external/slint-vynui/DatePicker.slint b/external/slint-vynui/DatePicker.slint index f6c5d00..0a6a10a 100644 --- a/external/slint-vynui/DatePicker.slint +++ b/external/slint-vynui/DatePicker.slint @@ -2,6 +2,7 @@ import { Button, DatePickerPopup, Date, Palette } from "std-widgets.slint"; import { VLabeledComponent } from "LabeledComponent.slint"; import { VActionButton } from "ActionButton.slint"; import { VButton } from "Button.slint"; +import { Svg } from "Svg.slint"; export component VDatePicker inherits VLabeledComponent { in-out property date; @@ -34,7 +35,7 @@ export component VDatePicker inherits VLabeledComponent { clicked => { taskDateInput.show() } } VActionButton { - icon-svg: "M18 28A12 12 0 1 0 6 16v6.2l-3.6-3.6L1 20l6 6l6-6l-1.4-1.4L8 22.2V16a10 10 0 1 1 10 10Z"; + icon-svg: Svg.reset; icon-svg-stroke-width: 1px; enabled: root.enabled; clicked => { resetDate() } diff --git a/external/slint-vynui/Svg.slint b/external/slint-vynui/Svg.slint new file mode 100644 index 0000000..7d216de --- /dev/null +++ b/external/slint-vynui/Svg.slint @@ -0,0 +1,12 @@ +export global Svg { + out property burger: "M3 6h18M3 12h18M3 18h18"; + out property play: "M240 128a15.74 15.74 0 0 1-7.6 13.51L88.32 229.65a16 16 0 0 1-16.2.3A15.86 15.86 0 0 1 64 216.13V39.87a15.86 15.86 0 0 1 8.12-13.82a16 16 0 0 1 16.2.3l144.08 88.14A15.74 15.74 0 0 1 240 128"; + out property pause: "M216 48v160a16 16 0 0 1-16 16h-40a16 16 0 0 1-16-16V48a16 16 0 0 1 16-16h40a16 16 0 0 1 16 16M96 32H56a16 16 0 0 0-16 16v160a16 16 0 0 0 16 16h40a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16"; + out property reset: "M18 28A12 12 0 1 0 6 16v6.2l-3.6-3.6L1 20l6 6l6-6l-1.4-1.4L8 22.2V16a10 10 0 1 1 10 10Z"; + out property trash: "M19 4h-3.5l-1-1h-5l-1 1H5v2h14M6 19a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V7H6z"; + out property plus: "M11 13H5v-2h6V5h2v6h6v2h-6v6h-2z"; + out property pen: "M3 17.46v3.04c0 .28.22.5.5.5h3.04c.13 0 .26-.05.35-.15L17.81 9.94l-3.75-3.75L3.15 17.1q-.15.15-.15.36M20.71 7.04a.996.996 0 0 0 0-1.41l-2.34-2.34a.996.996 0 0 0-1.41 0l-1.83 1.83l3.75 3.75z"; + out property visible: "M2.933 3.491C4.056 2.681 5.456 2 7 2s2.944.682 4.067 1.491c1.128.812 2.02 1.784 2.56 2.437l.005.005c.241.3.368.681.368 1.067s-.127.766-.368 1.067l-.005.005c-.54.653-1.432 1.625-2.56 2.437C9.944 11.32 8.544 12 7 12s-2.944-.682-4.067-1.49C1.805 9.696.913 8.724.373 8.071l-.005-.005A1.7 1.7 0 0 1 0 7c0-.386.127-.766.368-1.067l.005-.005c.54-.653 1.432-1.625 2.56-2.437M7 9.25a2.25 2.25 0 1 0 0-4.5a2.25 2.25 0 0 0 0 4.5"; + out property not-visible: "M.264 1.324a.75.75 0 0 1 1.06-1.06l2.629 2.628C4.86 2.393 5.893 2.04 7 2.04c1.532 0 2.92.677 4.035 1.48c1.118.805 2.003 1.769 2.539 2.417l.004.005c.24.298.366.675.366 1.058s-.126.76-.366 1.058l-.004.006a14.5 14.5 0 0 1-2.249 2.2l2.411 2.412a.75.75 0 0 1-1.06 1.06zm8.753 6.633a2.232 2.232 0 0 0-2.974-2.974zm-8.59-2.02c.319-.387.762-.885 1.305-1.395l7.104 7.104A5.7 5.7 0 0 1 7 11.96c-1.532 0-2.92-.676-4.035-1.479C1.847 9.675.962 8.711.426 8.064l-.004-.006A1.7 1.7 0 0 1 .056 7c0-.383.126-.76.366-1.058l.004-.005Z"; + +} diff --git a/external/slint-vynui/index.slint b/external/slint-vynui/index.slint index 1fa9f0c..fb7e304 100644 --- a/external/slint-vynui/index.slint +++ b/external/slint-vynui/index.slint @@ -12,4 +12,4 @@ export { VTextInput } from "TextInput.slint"; export { VSlider } from "Slider.slint"; export { ToggleButton } from "ToggleButton.slint"; -export { BurgerIcon } from "BurgerIcon.slint"; +export { Svg } from "Svg.slint"; diff --git a/src/UiState.cpp b/src/UiState.cpp index 984f564..641484c 100644 --- a/src/UiState.cpp +++ b/src/UiState.cpp @@ -79,7 +79,7 @@ std::optional stringToDate(const std::string &dateStr) void UiState::setupUtilsCallbacks() { - mainWindow_->global().on_formatDate([&](const Date &date) { + mainWindow_->global().on_format_date([&](const Date &date) { std::chrono::year_month_day chronoDate{ std::chrono::year(date.year), std::chrono::month(date.month), @@ -116,18 +116,6 @@ void UiState::setupCallbacks() reloadTasks(); }); - /*mainWindow_->global().on_tag_clicked([&](int index) {*/ - /*const std::string &tag = miraiInstance_->getTags().at(index);*/ - /*if (std::ranges::find(view_.getActiveTagsFilter(), tag) ==*/ - /*view_.getActiveTagsFilter().end()) {*/ - /*view_.addTagFilter(tag);*/ - /*} else {*/ - /*view_.removeTagFilter(tag);*/ - /*}*/ - /*view_.update();*/ - /*reloadTasks();*/ - /*});*/ - mainWindow_->global().on_delete_task_clicked([&](int sourceId, int taskId) { auto source = miraiInstance_->getSourceById(sourceId); assert(source); @@ -147,9 +135,9 @@ void UiState::setupCallbacks() mainWindow_->global().set_sources_selected(sources_); mainWindow_->global().set_tags(tags_); - mainWindow_->global().set_visible_tasks(days_); + mainWindow_->global().set_days(days_); - mainWindow_->global().on_saveTask([&](SaveTaskData newTaskData) { + mainWindow_->global().on_save_task([&](SaveTaskData newTaskData) { auto source = miraiInstance_->getSourceById(newTaskData.sourceId); assert(source); auto task = source->getTaskById(newTaskData.id); @@ -167,7 +155,7 @@ void UiState::setupCallbacks() reloadTasks(); }); - mainWindow_->global().on_createTask([&](NewTaskData newTaskData) { + mainWindow_->global().on_create_task([&](NewTaskData newTaskData) { std::optional date = std::nullopt; if (newTaskData.date.year != 0) { date = SlintDateToMiraiDate(newTaskData.date); @@ -201,7 +189,7 @@ void UiState::setupCallbacks() reloadTasks(); }); - mainWindow_->global().on_createEvent([&](NewEventParams newEventParams) { + mainWindow_->global().on_create_event([&](NewEventParams newEventParams) { const Date &date = newEventParams.date; const std::string dateStr = SlintDateToStdString(date); auto source = miraiInstance_->getSourceById(newEventParams.sourceId); @@ -217,7 +205,7 @@ void UiState::setupCallbacks() reloadTasks(); }); - mainWindow_->global().on_saveEvent([&](SaveEventParams newEventParams) { + mainWindow_->global().on_save_event([&](SaveEventParams newEventParams) { const Date &date = newEventParams.date; const std::string dateStr = SlintDateToStdString(date); auto source = miraiInstance_->getSourceById(newEventParams.sourceId); @@ -311,7 +299,7 @@ void UiState::reloadTasks() } } days_ = slintDays; - mainWindow_->global().set_visible_tasks(days_); + mainWindow_->global().set_days(days_); auto unscheduledTasksView = view_.getUnscheduledTasks(); unscheduledTasks_->clear(); diff --git a/ui/Backend.slint b/ui/Backend.slint index fa7a279..b727134 100644 --- a/ui/Backend.slint +++ b/ui/Backend.slint @@ -77,25 +77,25 @@ export global Backend { in-out property<[string]> sources; in-out property no-source-selected; in-out property<[string]> tags; - in-out property<[Day]> visible_tasks; + in-out property<[Day]> days; in-out property<[TaskData]> unscheduled-tasks; - callback task_clicked(int, int); - callback source_clicked(int); - callback tag_clicked(int); + callback task-clicked(int, int); + callback source-clicked(int); + callback tag-clicked(int); - callback open_new_task_form(OpenNewTaskFormParams); - callback open_edit_task_form(int, int); - callback open_new_event_form(); - callback open_edit_event_form(int, int); - callback toggle_show_completed_tasks(); - callback delete_task_clicked(int, int); - callback delete_event_clicked(int, int); + callback open-new-task-form(OpenNewTaskFormParams); + callback open-edit-task-form(int, int); + callback open-new-event-form(); + callback open-edit-event-form(int, int); + callback toggle-show-completed-tasks(); + callback delete-task-clicked(int, int); + callback delete-event-clicked(int, int); - callback createTask(NewTaskData); - callback saveTask(SaveTaskData); - callback createEvent(NewEventParams); - callback saveEvent(SaveEventParams); + callback create-task(NewTaskData); + callback save-task(SaveTaskData); + callback create-event(NewEventParams); + callback save-event(SaveEventParams); - pure callback formatDate(Date) -> string; + pure callback format-date(Date) -> string; } diff --git a/ui/MainView.slint b/ui/MainView.slint index 86185fe..5e1c810 100644 --- a/ui/MainView.slint +++ b/ui/MainView.slint @@ -1,26 +1,18 @@ import { Backend, TaskData } from "Backend.slint"; import { Button, VerticalBox, CheckBox, ScrollView, ComboBox } from "std-widgets.slint"; -import { SideBar } from "SideBar.slint"; -import { TaskLine } from "TaskLine.slint"; -import { EventGroup } from "EventGroup.slint"; -import { VPopupIconMenu, VDatePicker, VTimePicker, VCheckBox, VButton, VTag, VText, VTextInput, Palette } from "@vynui"; +import { TaskLine } from "./components/TaskLine.slint"; +import { EventGroup } from "./components/EventGroup.slint"; +import { VPopupIconMenu, VDatePicker, VTimePicker, VCheckBox, VButton, VTag, VText, VTextInput, Svg, Palette } from "@vynui"; import { NewTaskData, SaveTaskData } from "Backend.slint"; import { CreateTaskOrEvent } from "components/CreateTaskOrEvent.slint"; export component MainView inherits Rectangle { background: Palette.background; - private property icon-visible: @image-url("./images/visible.png"); - private property icon-not-visible: @image-url("./images/not-visible.png"); + private property icon-visible: Svg.visible; + private property icon-not-visible: Svg.not-visible; private property completed-tasks-visible: false; - pure function formatZeroPadding(number: int) -> string { - if (number < 10) { - return "0\{number}"; - } - return number; - } - VerticalLayout { horizontal-stretch: 1; padding: 16px; @@ -33,10 +25,10 @@ export component MainView inherits Rectangle { VButton { text: "Show/Hide completed tasks"; clicked => { - Backend.toggle_show_completed_tasks(); + Backend.toggle-show-completed-tasks(); completed-tasks-visible = !completed-tasks-visible; } - icon-source: completed-tasks-visible ? icon-visible : icon-not-visible; + icon-svg: completed-tasks-visible ? icon-visible : icon-not-visible; icon-colorize: Palette.control-foreground; } } @@ -55,12 +47,12 @@ export component MainView inherits Rectangle { VerticalLayout { alignment: start; spacing: 16px; - if Backend.visible_tasks.length == 0 && Backend.unscheduled-tasks.length == 0 : VText { + if Backend.days.length == 0 && Backend.unscheduled-tasks.length == 0 : VText { text: "There is no task to show"; horizontal-alignment: center; vertical-alignment: center; } - for day[dayIndex] in Backend.visible_tasks: VerticalLayout { + for day[dayIndex] in Backend.days: VerticalLayout { Rectangle { background: Palette.card-background; border-radius: 8px; @@ -69,7 +61,7 @@ export component MainView inherits Rectangle { HorizontalLayout { alignment: start; VText { - text: Backend.formatDate(day.date); + text: Backend.format-date(day.date); color: day.isLate ? Palette.orange : Palette.foreground; font-size: 1.2rem; } diff --git a/ui/Utils.slint b/ui/Utils.slint index f6a514e..4800524 100644 --- a/ui/Utils.slint +++ b/ui/Utils.slint @@ -1,14 +1,14 @@ import { Time } from "std-widgets.slint"; export global Utils { - pure function formatZeroPadding(number: int) -> string { + pure function format-zero-padding(number: int) -> string { if (number < 10) { return "0\{number}"; } return number; } - public pure function timeToString(time: Time) -> string { - return "\{formatZeroPadding(time.hour)}h\{formatZeroPadding(time.minute)}"; + public pure function time-to-string(time: Time) -> string { + return "\{format-zero-padding(time.hour)}h\{format-zero-padding(time.minute)}"; } } diff --git a/ui/appwindow.slint b/ui/appwindow.slint index 658417b..bfaa45a 100644 --- a/ui/appwindow.slint +++ b/ui/appwindow.slint @@ -1,9 +1,7 @@ import { Backend } from "Backend.slint"; import { Button, VerticalBox, CheckBox, Palette } from "std-widgets.slint"; -import { SideBar } from "SideBar.slint"; +import { SideBar } from "./components/SideBar.slint"; import { MainView } from "MainView.slint"; -import { TaskWindow } from "windows/TaskWindow.slint"; -import { EventWindow } from "windows/EventWindow.slint"; export component AppWindow inherits Window { @@ -23,4 +21,4 @@ export component AppWindow inherits Window { } -export { Backend, TaskWindow, EventWindow } // Export to make it visible to the C++ backend +export { Backend } // Export to make it visible to the C++ backend diff --git a/ui/components/CreateTaskOrEvent.slint b/ui/components/CreateTaskOrEvent.slint index d1f4032..879ba1a 100644 --- a/ui/components/CreateTaskOrEvent.slint +++ b/ui/components/CreateTaskOrEvent.slint @@ -26,7 +26,7 @@ export component CreateTaskOrEvent inherits Rectangle { } accepted => { if (task-or-event == 1) { - Backend.createTask({ + Backend.create-task({ sourceId: sourceInput.current-index, eventId: -1, title: newTaskTitleInput.text, @@ -34,7 +34,7 @@ export component CreateTaskOrEvent inherits Rectangle { date: taskDateInput.date }) } else { - Backend.createEvent({ + Backend.create-event({ sourceId: sourceInput.current-index, title: newTaskTitleInput.text, date: taskDateInput.date, diff --git a/ui/EventGroup.slint b/ui/components/EventGroup.slint similarity index 66% rename from ui/EventGroup.slint rename to ui/components/EventGroup.slint index 60d31cd..657df89 100644 --- a/ui/EventGroup.slint +++ b/ui/components/EventGroup.slint @@ -1,38 +1,37 @@ -import { Backend, TaskData, Event } from "Backend.slint"; +import { Backend, TaskData, Event } from "../Backend.slint"; import { ScrollView } from "std-widgets.slint"; -import { SideBar } from "SideBar.slint"; -import { VCheckBox, VButton, VTag, VPopupIconMenu, VText, Palette } from "@vynui"; -import { TaskLine } from "TaskLine.slint"; -import { Utils } from "Utils.slint"; +import { VCheckBox, VButton, VActionButton, Svg, VTag, VPopupIconMenu, VText, Palette } from "@vynui"; +import { TaskLine } from "./TaskLine.slint"; +import { Utils } from "../Utils.slint"; export component EventGroup { in property event; eventPopup := VPopupIconMenu { - VButton { - icon-source: @image-url("./images/add.png"); + VActionButton { + icon-svg: Svg.plus; icon-colorize: Colors.greenyellow; icon-size: 1.5rem; border-radius: 0; - clicked => { Backend.open_new_task_form({ + clicked => { Backend.open-new-task-form({ eventSourceId: event.sourceId, eventId: event.id, })} } - VButton { - icon-source: @image-url("./images/edit.png"); + VActionButton { + icon-svg: Svg.pen; icon-colorize: Colors.grey; icon-size: 1.5rem; border-radius: 0; - clicked => { Backend.open_edit_event_form(event.sourceId, event.id) } + clicked => { Backend.open-edit-event-form(event.sourceId, event.id) } } - VButton { - icon-source: @image-url("./images/delete.png"); + VActionButton { + icon-svg: Svg.trash; icon-colorize: Colors.pink; icon-size: 1.5rem; border-radius: 0; - clicked => { Backend.delete_event_clicked(event.sourceId, event.id) } + clicked => { Backend.delete-event-clicked(event.sourceId, event.id) } } } @@ -48,7 +47,7 @@ export component EventGroup { VerticalLayout { spacing: 4px; VText { - text: Utils.timeToString(event.startsAt); + text: Utils.time-to-string(event.startsAt); color: Palette.accent; } HorizontalLayout { @@ -61,7 +60,7 @@ export component EventGroup { } } VText { - text: Utils.timeToString(event.endsAt); + text: Utils.time-to-string(event.endsAt); color: Palette.accent; font-size: 0.8rem; horizontal-alignment: center; diff --git a/ui/SideBar.slint b/ui/components/SideBar.slint similarity index 59% rename from ui/SideBar.slint rename to ui/components/SideBar.slint index 4c0a59f..3f8f980 100644 --- a/ui/SideBar.slint +++ b/ui/components/SideBar.slint @@ -1,4 +1,4 @@ -import { Backend } from "Backend.slint"; +import { Backend } from "../Backend.slint"; import { ToggleButton, VText, Palette } from "@vynui"; export component SideBar inherits Rectangle { @@ -18,26 +18,14 @@ export component SideBar inherits Rectangle { text: "All"; text-alignment: left; active: Backend.no-source-selected; - clicked => { Backend.source_clicked(-1) } + clicked => { Backend.source-clicked(-1) } } for item[index] in Backend.sources-selected: ToggleButton { text: item.name; text-alignment: left; active: item.selected; - clicked => { Backend.source_clicked(index) } + clicked => { Backend.source-clicked(index) } } } - /*VText { - text: "Tags"; - font-size: 1.5rem; - } - VerticalLayout { - spacing: 4px; - for item[index] in Backend.tags: ToggleButton { - text: item; - text-alignment: left; - clicked => { Backend.tag_clicked(index) } - } - }*/ } } diff --git a/ui/TaskLine.slint b/ui/components/TaskLine.slint similarity index 77% rename from ui/TaskLine.slint rename to ui/components/TaskLine.slint index 3e188ae..58c0a4a 100644 --- a/ui/TaskLine.slint +++ b/ui/components/TaskLine.slint @@ -1,7 +1,7 @@ -import { Backend, TaskData } from "Backend.slint"; +import { Backend, TaskData } from "../Backend.slint"; import { ToggleButton } from "@vynui"; -import { VPopupIconMenu, VTag, VButton, VCheckBox, Palette } from "@vynui"; -import { TaskEdit } from "components/TaskEdit.slint"; +import { VPopupIconMenu, VTag, VButton, VActionButton, VCheckBox, Svg, Palette } from "@vynui"; +import { TaskEdit } from "./TaskEdit.slint"; import { Date } from "std-widgets.slint"; export component TaskLine inherits VerticalLayout { @@ -22,7 +22,7 @@ export component TaskLine inherits VerticalLayout { taskEdit := TaskEdit { accepted(task) => { - Backend.saveTask({ + Backend.save-task({ id: task.id, sourceId: task.sourceId, title: task.title, @@ -35,8 +35,8 @@ export component TaskLine inherits VerticalLayout { if !taskEdit.should-show : Rectangle { popup := VPopupIconMenu { - VButton { - icon-source: @image-url("./images/edit.png"); + VActionButton { + icon-svg: Svg.pen; icon-colorize: Colors.grey; icon-size: 1.5rem; border-radius: 0; @@ -51,13 +51,13 @@ export component TaskLine inherits VerticalLayout { } } - VButton { - icon-source: @image-url("./images/delete.png"); + VActionButton { + icon-svg: Svg.trash; icon-colorize: Colors.pink; icon-size: 1.5rem; border-radius: 0; clicked => { - Backend.delete_task_clicked(source-index, task-index) + Backend.delete-task-clicked(source-index, task-index) } } } @@ -65,7 +65,7 @@ export component TaskLine inherits VerticalLayout { ta := TouchArea { clicked => { checkbox.checked = !checkbox.checked; - Backend.task_clicked(source-index, task-index); + Backend.task-clicked(source-index, task-index); } pointer-event(e) => { if (e.button == PointerEventButton.right && e.kind == PointerEventKind.up) { @@ -84,7 +84,7 @@ export component TaskLine inherits VerticalLayout { text: task.title; checked: task.checked; toggled => { - Backend.task_clicked(source-index, task-index) + Backend.task-clicked(source-index, task-index) } } for tag[tag-index] in task.tags: VTag { diff --git a/ui/images/add.png b/ui/images/add.png deleted file mode 100644 index 7fece2f3c675f5ecd48cca89c2a1c7b3c540e825..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5823 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 diff --git a/ui/images/calendar.png b/ui/images/calendar.png deleted file mode 100644 index 3e2f37dcfeae24341971a806fd24beb93682a0cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4439 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 C!EH?d diff --git a/ui/images/delete.png b/ui/images/delete.png deleted file mode 100644 index fd50d08b394586be5e18ce17417642f599f76bd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2005 zcmV;`2P*i9P)znK9A!52e}f)6m7Xw+yhh6FUaA&APL zAu(a$LUG|jWArajcerqA6fx?5U?7MQA1gI3OnikzA{anGgaP9~l$l|0Q5PBE-s-tk zb*lSxoiC|`(9@@@tA4kt`kZ&`$QEULKv4zBQ}naNP3?P3;|34g(K|;xEfdiEbja}hMOy{Zvd7@K4Yfj$jb@fAn;Y^->O&xe2R0%)a{+q zp2mTlI44x&S&aK0ue;FNns(CQPt1F9O;+87)b{inuxy5Pl8u{yBh+6wrKDq2k3+IC z3;2%u3#GL5E!BasN>Y3VJ`3EPz>d)$%Ydh2jl_Da27!IR^|2W-g4ho%!L`48#gxb>#g9ESOF}Fyx)jtNzBc$0=PEvej}bJ$55;QE{(k3h$pHJ zEE-riCV;|;6~LJ!xiDggs)JYo{1SP;5zp?Jn`1qJOM&lk%e0OBoC5Bl<{#pNR4>@D zls@h4lzkMbX0Hz60zzsQL?~wz_yHS(8HQmPhG7_n(Kix{80P{j1?(E|CGdAjgAxK5 z#!Xu`(ldpANKJlmMz0moz!lTs2S&Jx4(7vszLBp_#5Kq$UfXDsM#z zAhZQA0bEQ`U4RMTVu}*L!iwunc8FBvt?J!+p;7=bV*sB=PIC(odT2&bV}RMfe9v{Q z0=NPPOi}?fHC|5qq-Q!AE+u)08;UQq$^|-p)L*p z&20fRdIQyY0in49&=?O;7Y6_nKuSyiT_|ZzfQ$CZ4^S5efIO>BBnE<|2ta(1Z4LoQID@nappi}> zXtn^X1!#!?B)Wj(xD~!lVG93X&ANa9e1$dz{26Fhf)n@!S#%3ff-^{^69`NIsW1U} z2<^u-g@mO-!8Qi)U@brbOaN&x0eA?F2V8|akg^wA1TX|#8DLX94gh%s5E>5{#J`qK zivSi7R?gya0LZuVRNLbLD&qijG%EGf1ry2y~ADpxpwnF#u%?pj9n^37~&kC4kU) zfQFE;L?}2*902kOAT%DJVb4H`y#cet0U+-w6d{8e4SNPk>gx%NbWy^+9c zA$fQ-z#g>p+{NbzKjv+17kldnJLavIy%F5vju3m@gcF*-vz@YP9qS1{itP;U5Xli- z!M;u08Glo_BjVO|(iXxhe|rAjnr82V$o#DjEaOJ=0O18vTDm{5jQd8z7@$P#Gq7;7 zl~t<4l4rsoaEh=`x03h=x1m&)C#^-6}Co=ARko!dHA2UBsBU#HRw*WrM z{5*}MI3Rn*^3qqURU4^YKi;2~fQupBp~>KejN-L9K) n-1M$Pz&F4S;0v6;zY+Wke~>vSbk3W&00000NkvXXu0mjf7u4nJ zFmD85#;?t9J%NIfC9V-A!TD(=<%vb94CUqJdYO6I#mR{Use1WE>9gP2NC6F!_jGX# zshIQj?%8b7aEap|^RI|GDwhU|ZVnd65{-8KBYuZt9ZPJNcC3c(Kjw8^yH;qtUB}95 zuCy=5<%qb7l)$C{N0$;+uf-gXR?Sk|H6xB!(R|*_>T{Ln&V2rT;HHO1+OywtcAng8 zF6aUTM^0HiFi((~!4SvH-*CTiK5xIb&~GsdMjs~m-)k}-@NBs9LPB+7;sdq6htJ1- zZ=9;;u60p&Vceg4RXl6VEaEy>WY+LHvhzsAJ6}lJ_$ZqrN}~)Y(7mK9GJmo+5lJQ(<+Dys)+r8wQG!ud!8&5kwjbZzY-%9(L%-HJY zDLzPP)vhn3ukAHC(9I@6ZxeZKqc_gW!&zBm)h%J;9{ z{MlJ{r@t{io#V&ihu1k{lYR9X(tXS7PL?+*f7Ne{H+(eRghjq#>(=#6!OeHRdDmK4 zg#9=AF-2+LSAiJzeJg8KWx6VF>py*%FePinQ|+Q7=WSWK_4|6tPG zm)!M!#v|)%M}Ji1*-v<6J?;1V51Mt3BKHlCmiv5^4X!y(3UilKedL+$E1_UBm;LC2 z84qJdh(EsX`mtGuVO^5EkM;c%es7vJ_bu$c;oiNq{Y_Ey{sr4N$y)m+njSFu z<|t~vh}G1t%>3&Akeg!32g)AI{n}V^)cH;Mma=^l536x@-^joAN87wa`RI?mIfw1G zJ(9L+tNk!Do9F2HRZHIgTfgu}QK=^(xDMTU@<;)(x17&*ZaK-uv-W#)9$Bl;>MiuGn32t>>P@R>r_xJa@ts z;osZq>=~x7j0=gH^U-F>LUA6szxD|t79L+GDCu4*VOaJmdKI;Vst07UpMQUCw| diff --git a/ui/images/not-visible.png b/ui/images/not-visible.png deleted file mode 100644 index 02386ad932485c96f25bc56ebccd2a16dfe0078c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2381 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 diff --git a/ui/images/visible.png b/ui/images/visible.png deleted file mode 100644 index a5190e35adb0923294e6b591acf45331d5d72271..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2386 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 diff --git a/ui/windows/EventWindow.slint b/ui/windows/EventWindow.slint deleted file mode 100644 index 1b42a32..0000000 --- a/ui/windows/EventWindow.slint +++ /dev/null @@ -1,100 +0,0 @@ -import { Date, Time, ComboBox } from "std-widgets.slint"; -import { VTimePicker, VDatePicker, VButton, VTextInput, VText, Palette } from "@vynui"; -import { Backend } from "../Backend.slint"; - -struct NewEventParams { - sourceId: int, - title: string, - date: Date, - startsAt: Time, - endsAt: Time -} - -struct SaveEventParams { - sourceId: int, - id: int, - title: string, - date: Date, - startsAt: Time, - endsAt: Time -} - -export component EventWindow inherits Window { - title: "Mirai - " + (eventId == -1 ? "New event" : "Edit event"); - min-width: 100px; - max-width: 1920px; - preferred-width: 512px; - min-height: 100px; - max-height: 4000px; - default-font-size: 16px; - background: Palette.background; - - in-out property sourceId <=> sourceInput.current-index; - in-out property eventId: -1; - in-out property taskDate <=> taskDateInput.date; - in-out property taskTitle <=> taskTitleInput.text; - in-out property