Move all UI code into new 'ui' directory

This commit is contained in:
Vyn 2025-07-03 10:21:42 +02:00
parent 00d9cbe7ef
commit 0046cb9bbb
Signed by: vyn
GPG key ID: E1B2BE34E7A971E7
21 changed files with 94 additions and 93 deletions

View file

@ -9,7 +9,7 @@ set(CMAKE_BUILD_RPATH_USE_ORIGIN ON)
add_executable(mirai
src/main.cpp
src/app_logic.cpp
src/shared/Utils.cpp
src/ui/utils.cpp
)
# configure dependency: evalyte-cpp-common
@ -38,7 +38,7 @@ add_subdirectory(external/slint)
set_property(TARGET mirai PROPERTY SLINT_EMBED_RESOURCES embed-files)
target_link_libraries(mirai PRIVATE Slint::Slint)
slint_target_sources(
mirai src/ui.slint
mirai src/ui/ui.slint
NAMESPACE ui
LIBRARY_PATHS selenite=${CMAKE_CURRENT_SOURCE_DIR}/external/selenite/components/index.slint
)

2
external/selenite vendored

@ -1 +1 @@
Subproject commit 75b7d7cce4a61ff93e7369ab32ac988ac16f69b0
Subproject commit 099b5edb0fa7c2fb016a348af448ff6b715844c3

View file

@ -12,11 +12,11 @@
#include "mirai-core/source.h"
#include "selenite/palette.h"
#include "selenite/selenite.h"
#include "shared/Utils.h"
#include "slint_color.h"
#include "slint_models.h"
#include "slint_string.h"
#include "ui.h"
#include "ui/utils.h"
#include <algorithm>
#include <bits/chrono.h>
#include <cassert>
@ -52,7 +52,7 @@ app_logic::app_logic(mirai::core *miraiInstance) : _mirai_core(miraiInstance)
);
}
bindSlintUtils(_main_window->global<ui::Utils>());
bind_slint_utils(_main_window->global<ui::Utils>());
models().set_sidebar_view(_sidebar_view);
models().set_calendar_view(_calendar_view);
@ -193,7 +193,7 @@ void app_logic::setupCallbacks()
assert(source);
auto task = source->get_task_by_id(newTaskData.id);
assert(task.has_value());
const mirai::date &date = SlintDateToMiraiDate(newTaskData.date);
const mirai::date &date = slint_date_to_mirai_date(newTaskData.date);
// const auto dayOpt = source->get_day_by_date(date);
task->set_title(std::string(newTaskData.title));
@ -206,7 +206,7 @@ void app_logic::setupCallbacks()
actions().on_create_task([&](ui::NewTaskData newTaskData) {
std::optional<mirai::date> date = std::nullopt;
if (newTaskData.date.year != 0) {
date = SlintDateToMiraiDate(newTaskData.date);
date = slint_date_to_mirai_date(newTaskData.date);
}
auto source = _mirai_core->getSourceById(newTaskData.sourceId);
@ -240,14 +240,14 @@ void app_logic::setupCallbacks()
actions().on_create_event([&](ui::CreateEventParams newEventParams) {
const ui::Date &date = newEventParams.date;
const std::string dateStr = SlintDateToStdString(date);
const std::string dateStr = slint_date_to_std_string(date);
auto source = _mirai_core->getSourceById(newEventParams.source_id);
source->create_event({
.title = std::string(newEventParams.title),
.date = SlintDateToMiraiDate(newEventParams.date),
.starts_at = SlintTimeToMiraiTime(newEventParams.starts_at),
.ends_at = SlintTimeToMiraiTime(newEventParams.ends_at),
.date = slint_date_to_mirai_date(newEventParams.date),
.starts_at = slint_time_to_mirai_time(newEventParams.starts_at),
.ends_at = slint_time_to_mirai_time(newEventParams.ends_at),
});
_mirai_core->save();
update_views();
@ -527,17 +527,17 @@ void app_logic::update_calendar_view()
.source_id = current_event.source_id(),
.id = current_event.id(),
.title = slint::SharedString(current_event.title()),
.starts_at = MiraiTimeToSlintTime(current_event.starts_at()),
.ends_at = MiraiTimeToSlintTime(current_event.ends_at()),
.starts_at = mirai_time_to_slint_time(current_event.starts_at()),
.ends_at = mirai_time_to_slint_time(current_event.ends_at()),
}
);
}
auto new_slint_date = ui::CalendarViewDate{
.events = new_slint_events,
.date = MiraiDateToSlintDate(current_date),
.date = mirai_date_to_slint_date(current_date),
.header = slint::SharedString(
capitalize(formatDateRelative(MiraiDateToSlintDate(current_date)))
capitalize(format_date_relative(mirai_date_to_slint_date(current_date)))
)
};
new_slint_dates->push_back(new_slint_date);
@ -667,7 +667,7 @@ void app_logic::update_tasks_view()
};
if (current_date.has_value()) {
new_slint_date.due_date = MiraiDateToSlintDate(current_date.value());
new_slint_date.due_date = mirai_date_to_slint_date(current_date.value());
new_slint_date.is_late = current_date.value() < today;
} else {
new_slint_date.no_date = true;

View file

@ -1,22 +0,0 @@
/*
* Mirai. Copyright (C) 2024 Vyn
* This file is licensed under version 3 of the GNU General Public License (GPL-3.0-only)
* The license can be found in the LICENSE file or at https://www.gnu.org/licenses/gpl-3.0.txt
*/
#pragma once
#include "mirai-core/date.h"
#include "ui.h"
#include <string>
void bindSlintUtils(const ui::Utils &utils);
std::string formatZeroPadding(const int number);
std::string formatDateRelative(const ui::Date &date);
std::string capitalize(std::string str);
std::string SlintDateToStdString(const ui::Date &date);
mirai::date SlintDateToMiraiDate(const ui::Date &date);
ui::Date MiraiDateToSlintDate(const mirai::date &date);
ui::Time MiraiTimeToSlintTime(const mirai::time &time);
mirai::time SlintTimeToMiraiTime(const ui::Time &time);

View file

@ -1,7 +1,7 @@
import { ScrollView, Date, Time } from "std-widgets.slint";
import { VCheckBox, VButton, VActionButton, Svg, VTag, VPopupIconMenu, VText, Palette } from "@selenite";
import { Utils } from "../shared/Utils.slint";
import { AppModels, CalendarViewDate, CalendarDateDisplayFormat } from "../shared/Models.slint";
import { Utils } from "../Utils.slint";
import { AppModels, CalendarViewDate, CalendarDateDisplayFormat } from "../Models.slint";
export component Calendar inherits Rectangle {
in property<[CalendarViewDate]> days;

View file

@ -1,4 +1,4 @@
import { AppModels } from "../shared/Models.slint";
import { AppModels } from "../Models.slint";
import { Date, Time, Button, VerticalBox, CheckBox, ScrollView, ComboBox } from "std-widgets.slint";
import { VPopupIconMenu, VDatePicker, VTimePicker, VCheckBox, VButton, VActionButton, VTag, VText, Svg, VTextInput, Palette } from "@selenite";

View file

@ -2,7 +2,7 @@ import { ToggleButton } from "@selenite";
import { VPopupIconMenu, VTag, VText, VButton, VActionButton, VCheckBox, Svg, Palette } from "@selenite";
import { TaskEdit } from "./TaskEdit.slint";
import { Date } from "std-widgets.slint";
import { AppModels } from "../shared/Models.slint";
import { AppModels } from "../Models.slint";
export struct TaskLineEditData {
title: string,

View file

@ -1,11 +1,11 @@
import { Palette } from "@selenite";
import { VTextInput } from "../../external/selenite/components/TextInput.slint";
import { VButton, VText, VDatePicker } from "../../external/selenite/components/index.slint";
import { AppActions } from "../shared/Actions.slint";
import { Modal } from "../../external/selenite/components/Modal.slint";
import { VTimePicker } from "../../external/selenite/components/TimePicker.slint";
import { VTextInput } from "@selenite";
import { VButton, VText, VDatePicker } from "@selenite";
import { AppActions } from "../Actions.slint";
import { Modal } from "@selenite";
import { VTimePicker } from "@selenite";
import { ComboBox } from "std-widgets.slint";
import { AppModels } from "../shared/Models.slint";
import { AppModels } from "../Models.slint";
export component AddEventModal inherits Modal {
public function open() {

View file

@ -1,9 +1,9 @@
import { Palette } from "@selenite";
import { VTextInput } from "../../external/selenite/components/TextInput.slint";
import { VButton } from "../../external/selenite/components/index.slint";
import { AppModels } from "../shared/Models.slint";
import { AppActions } from "../shared/Actions.slint";
import { Modal } from "../../external/selenite/components/Modal.slint";
import { VTextInput } from "@selenite";
import { VButton } from "@selenite";
import { Modal } from "@selenite";
import { AppModels } from "../Models.slint";
import { AppActions } from "../Actions.slint";
export component AddSourceModal inherits Modal {
private property <int> source-id-to-edit: -1;

View file

@ -1,9 +1,9 @@
import { Palette } from "@selenite";
import { VTextInput } from "../../external/selenite/components/TextInput.slint";
import { VButton } from "../../external/selenite/components/index.slint";
import { AppModels } from "../shared/Models.slint";
import { AppActions } from "../shared/Actions.slint";
import { Modal } from "../../external/selenite/components/Modal.slint";
import { VTextInput } from "@selenite";
import { VButton } from "@selenite";
import { AppModels } from "../Models.slint";
import { AppActions } from "../Actions.slint";
import { Modal } from "@selenite";
export component EditSourceModal inherits Modal {
private property <int> source-id-to-edit: -1;

View file

@ -1,7 +1,7 @@
import { AppModels } from "shared/Models.slint";
import { AppActions } from "shared/Actions.slint";
import { AppModels } from "Models.slint";
import { AppActions } from "Actions.slint";
import { AppWindow } from "windows/AppWindow/AppWindow.slint";
import { Utils } from "shared/Utils.slint";
import { Utils } from "Utils.slint";
import { Palette } from "@selenite";
export { Utils, Palette, AppWindow, AppModels, AppActions }

View file

@ -4,13 +4,13 @@
* The license can be found in the LICENSE file or at https://www.gnu.org/licenses/gpl-3.0.txt
*/
#include "Utils.h"
#include "utils.h"
#include <cctype>
#include <chrono>
#include <format>
#include <string>
void bindSlintUtils(const ui::Utils &utils)
void bind_slint_utils(const ui::Utils &utils)
{
utils.on_format_date([&](const ui::Date &date) {
std::chrono::year_month_day chronoDate{
@ -21,14 +21,14 @@ void bindSlintUtils(const ui::Utils &utils)
return std::format("{:%B %d}", chronoDate);
});
auto currentDate = MiraiDateToSlintDate(mirai::date(std::chrono::system_clock::now()));
auto currentDate = mirai_date_to_slint_date(mirai::date(std::chrono::system_clock::now()));
utils.set_current_date(currentDate);
auto currentTime = MiraiTimeToSlintTime(mirai::time(std::chrono::system_clock::now()));
auto currentTime = mirai_time_to_slint_time(mirai::time(std::chrono::system_clock::now()));
utils.set_current_time(currentTime);
}
std::string formatZeroPadding(const int number)
std::string format_zero_padding(const int number)
{
if (number < 10) {
return "0" + std::to_string(number);
@ -36,11 +36,12 @@ std::string formatZeroPadding(const int number)
return std::to_string(number);
}
std::string formatDateRelative(const ui::Date &date)
std::string format_date_relative(const ui::Date &date)
{
auto todayDate = mirai::date(std::chrono::system_clock::now());
auto relativeDaysDiff = std::chrono::duration_cast<std::chrono::days>(
std::chrono::sys_days(SlintDateToMiraiDate(date).to_std_chrono())
auto relativeDaysDiff =
std::chrono::duration_cast<std::chrono::days>(
std::chrono::sys_days(slint_date_to_mirai_date(date).to_std_chrono())
- std::chrono::sys_days(todayDate.to_std_chrono())
)
.count();
@ -59,20 +60,20 @@ std::string capitalize(std::string str)
return str;
};
std::string SlintDateToStdString(const ui::Date &date)
std::string slint_date_to_std_string(const ui::Date &date)
{
return std::to_string(date.year) + "-" + formatZeroPadding(date.month) + "-"
+ formatZeroPadding(date.day);
return std::to_string(date.year) + "-" + format_zero_padding(date.month) + "-"
+ format_zero_padding(date.day);
}
mirai::date SlintDateToMiraiDate(const ui::Date &date)
mirai::date slint_date_to_mirai_date(const ui::Date &date)
{
return mirai::date(
date.year, static_cast<unsigned>(date.month), static_cast<unsigned>(date.day)
);
}
ui::Date MiraiDateToSlintDate(const mirai::date &date)
ui::Date mirai_date_to_slint_date(const mirai::date &date)
{
return {
.year = date.year,
@ -81,12 +82,12 @@ ui::Date MiraiDateToSlintDate(const mirai::date &date)
};
}
ui::Time MiraiTimeToSlintTime(const mirai::time &time)
ui::Time mirai_time_to_slint_time(const mirai::time &time)
{
return {.hour = time.hour, .minute = time.minute, .second = 0};
}
mirai::time SlintTimeToMiraiTime(const ui::Time &time)
mirai::time slint_time_to_mirai_time(const ui::Time &time)
{
return mirai::time{time.hour, time.minute};
}

22
src/ui/utils.h Normal file
View file

@ -0,0 +1,22 @@
/*
* Mirai. Copyright (C) 2024 Vyn
* This file is licensed under version 3 of the GNU General Public License (GPL-3.0-only)
* The license can be found in the LICENSE file or at https://www.gnu.org/licenses/gpl-3.0.txt
*/
#pragma once
#include "mirai-core/date.h"
#include "ui.h"
#include <string>
void bind_slint_utils(const ui::Utils &utils);
std::string format_zero_padding(const int number);
std::string format_date_relative(const ui::Date &date);
std::string capitalize(std::string str);
std::string slint_date_to_std_string(const ui::Date &date);
mirai::date slint_date_to_mirai_date(const ui::Date &date);
ui::Date mirai_date_to_slint_date(const mirai::date &date);
ui::Time mirai_time_to_slint_time(const mirai::time &time);
mirai::time slint_time_to_mirai_time(const ui::Time &time);

View file

@ -1,12 +1,12 @@
import { AppModels } from "../../shared/Models.slint";
import { AppModels } from "../../Models.slint";
import { Button, VerticalBox, CheckBox } from "std-widgets.slint";
import { MainView } from "views/TasksView.slint";
import { Palette } from "@selenite";
import { CalendarView } from "views/CalendarView.slint";
import { VButton } from "../../../external/selenite/components/Button.slint";
import { ToggleButton, Svg } from "../../../external/selenite/components/index.slint";
import { VTextInput } from "../../../external/selenite/components/TextInput.slint";
import { AppActions } from "../../shared/Actions.slint";
import { VButton } from "@selenite";
import { ToggleButton, Svg } from "@selenite";
import { VTextInput } from "@selenite";
import { AppActions } from "../../Actions.slint";
import { SideBar } from "views/SideBar.slint";
export component AppWindow inherits Window {

View file

@ -1,12 +1,12 @@
import { AppModels } from "../../../shared/Models.slint";
import { AppActions, NewTaskData, SaveTaskData } from "../../../shared/Actions.slint";
import { AppModels } from "../../../Models.slint";
import { AppActions, NewTaskData, SaveTaskData } from "../../../Actions.slint";
import { Button, VerticalBox, CheckBox, ScrollView, ComboBox } from "std-widgets.slint";
import { TaskLine } from "../../../components/TaskLine.slint";
import { Calendar } from "../../../components/Calendar.slint";
import { VDatePicker, VTimePicker, VCheckBox, VButton, VTag, VText, VTextInput, Svg, Palette } from "@selenite";
import { CreateTaskOrEvent } from "../../../components/CreateTaskOrEvent.slint";
import { Utils } from "../../../shared/Utils.slint";
import { VActionButton } from "../../../../external/selenite/components/index.slint";
import { Utils } from "../../../Utils.slint";
import { VActionButton } from "@selenite";
import { AddEventModal } from "../../../modals/AddEventModal.slint";
export component CalendarView inherits Rectangle {

View file

@ -1,5 +1,5 @@
import { AppModels } from "../../../shared/Models.slint";
import { AppActions } from "../../../shared/Actions.slint";
import { AppModels } from "../../../Models.slint";
import { AppActions } from "../../../Actions.slint";
import { VButton, ToggleButton, VActionButton, VText, Svg, Palette } from "@selenite";
import { EditSourceModal } from "../../../modals/EditSourceModal.slint";
import { AddSourceModal } from "../../../modals/AddSourceModal.slint";

View file

@ -1,11 +1,11 @@
import { AppModels } from "../../../shared/Models.slint";
import { AppActions, NewTaskData, SaveTaskData } from "../../../shared/Actions.slint";
import { AppModels } from "../../../Models.slint";
import { AppActions, NewTaskData, SaveTaskData } from "../../../Actions.slint";
import { Button, VerticalBox, CheckBox, ScrollView, ComboBox } from "std-widgets.slint";
import { TaskLine } from "../../../components/TaskLine.slint";
import { Calendar } from "../../../components/Calendar.slint";
import { VPopupIconMenu, VDatePicker, VTimePicker, VCheckBox, VButton, VTag, VText, VTextInput, Svg, Palette } from "@selenite";
import { CreateTaskOrEvent } from "../../../components/CreateTaskOrEvent.slint";
import { Utils } from "../../../shared/Utils.slint";
import { Utils } from "../../../Utils.slint";
export component MainView inherits Rectangle {