mirror of
https://codeberg.org/vyn/mirai.git
synced 2025-07-02 01:13:19 +00:00
Move Calendar to its own view
This commit is contained in:
parent
a03e71890c
commit
d26f2f5a9f
19 changed files with 407 additions and 137 deletions
|
@ -34,15 +34,15 @@
|
|||
|
||||
AppWindow::AppWindow(mirai::Mirai *miraiInstance)
|
||||
: miraiInstance_(miraiInstance), addSourceWindow_(miraiInstance),
|
||||
editSourceWindow_(miraiInstance), settingsWindow_(miraiInstance), view_(miraiInstance)
|
||||
editSourceWindow_(miraiInstance), settingsWindow_(miraiInstance),
|
||||
editEventWindow_(miraiInstance), view_(miraiInstance)
|
||||
{
|
||||
sources_ = std::make_shared<slint::VectorModel<ui::Source>>();
|
||||
days_ = std::make_shared<slint::VectorModel<ui::Day>>();
|
||||
calendar_ = std::make_shared<slint::VectorModel<ui::CalendarDay>>();
|
||||
unscheduledTasks_ = std::make_shared<slint::VectorModel<ui::TaskData>>();
|
||||
auto sourcesNames = std::make_shared<slint::MapModel<ui::Source, slint::SharedString>>(
|
||||
sources_,
|
||||
[&](const ui::Source &a) {
|
||||
sources_, [&](const ui::Source &a) {
|
||||
return a.name;
|
||||
}
|
||||
);
|
||||
|
@ -125,6 +125,9 @@ void AppWindow::setupCallbacks()
|
|||
assert(source);
|
||||
editSourceWindow_.open(source);
|
||||
});
|
||||
actions().on_open_add_event_window([&]() {
|
||||
editEventWindow_.open();
|
||||
});
|
||||
|
||||
actions().on_task_clicked([&](int sourceId, int taskId) {
|
||||
auto source = miraiInstance_->getSourceById(sourceId);
|
||||
|
@ -217,7 +220,7 @@ void AppWindow::setupCallbacks()
|
|||
reloadTasks();
|
||||
});
|
||||
|
||||
actions().on_delete_event_clicked([&](int sourceId, int eventId) {
|
||||
actions().on_delete_event([&](int sourceId, int eventId) {
|
||||
auto source = miraiInstance_->getSourceById(sourceId);
|
||||
assert(source);
|
||||
auto event = source->getEventById(eventId);
|
||||
|
@ -228,10 +231,12 @@ void AppWindow::setupCallbacks()
|
|||
reloadTasks();
|
||||
});
|
||||
|
||||
actions().on_create_event([&](ui::NewEventParams newEventParams) {
|
||||
actions().on_create_event([&](ui::CreateEventParams newEventParams) {
|
||||
std::println("okkk");
|
||||
const ui::Date &date = newEventParams.date;
|
||||
const std::string dateStr = SlintDateToStdString(date);
|
||||
auto source = miraiInstance_->getSourceById(newEventParams.sourceId);
|
||||
const auto sourceId = models().get_default_source_index();
|
||||
auto source = miraiInstance_->getSourceById(sourceId == -1 ? 0 : sourceId);
|
||||
|
||||
source->createEvent({
|
||||
.title = std::string(newEventParams.title),
|
||||
|
@ -244,23 +249,23 @@ void AppWindow::setupCallbacks()
|
|||
reloadTasks();
|
||||
});
|
||||
|
||||
actions().on_save_event([&](ui::SaveEventParams newEventParams) {
|
||||
const ui::Date &date = newEventParams.date;
|
||||
const std::string dateStr = SlintDateToStdString(date);
|
||||
auto source = miraiInstance_->getSourceById(newEventParams.sourceId);
|
||||
assert(source);
|
||||
auto event = source->getEventById(newEventParams.id);
|
||||
assert(event);
|
||||
event->setTitle(std::string(newEventParams.title));
|
||||
event->setStartTime(SlintTimeToMiraiTime(newEventParams.startsAt));
|
||||
event->setEndTime(SlintTimeToMiraiTime(newEventParams.endsAt));
|
||||
/*actions().on_save_event([&](ui::SaveEventParams newEventParams) {*/
|
||||
/*const ui::Date &date = newEventParams.date;*/
|
||||
/*const std::string dateStr = SlintDateToStdString(date);*/
|
||||
/*auto source = miraiInstance_->getSourceById(newEventParams.sourceId);*/
|
||||
/*assert(source);*/
|
||||
/*auto event = source->getEventById(newEventParams.id);*/
|
||||
/*assert(event);*/
|
||||
/*event->setTitle(std::string(newEventParams.title));*/
|
||||
/*event->setStartTime(SlintTimeToMiraiTime(newEventParams.startsAt));*/
|
||||
/*event->setEndTime(SlintTimeToMiraiTime(newEventParams.endsAt));*/
|
||||
|
||||
// TODO we can't change the date of the event for now.
|
||||
/*// TODO we can't change the date of the event for now.*/
|
||||
|
||||
miraiInstance_->save();
|
||||
view_.update();
|
||||
reloadTasks();
|
||||
});
|
||||
/*miraiInstance_->save();*/
|
||||
/*view_.update();*/
|
||||
/*reloadTasks();*/
|
||||
/*});*/
|
||||
}
|
||||
|
||||
std::shared_ptr<slint::VectorModel<slint::SharedString>>
|
||||
|
@ -291,14 +296,16 @@ void AppWindow::reloadTasks()
|
|||
std::chrono::sys_days(todayDate.toStdChrono())
|
||||
)
|
||||
.count();
|
||||
slintDays->push_back(ui::Day{
|
||||
.date = MiraiDateToSlintDate(currentDate),
|
||||
.events = slintEvents,
|
||||
.tasks = slintDayTasks,
|
||||
.isLate = currentDate < todayDate,
|
||||
.isToday = currentDate == todayDate,
|
||||
.relativeDaysDiff = static_cast<int>(relativeDaysDiff)
|
||||
});
|
||||
slintDays->push_back(
|
||||
ui::Day{
|
||||
.date = MiraiDateToSlintDate(currentDate),
|
||||
.events = slintEvents,
|
||||
.tasks = slintDayTasks,
|
||||
.isLate = currentDate < todayDate,
|
||||
.isToday = currentDate == todayDate,
|
||||
.relativeDaysDiff = static_cast<int>(relativeDaysDiff)
|
||||
}
|
||||
);
|
||||
// Day's tasks
|
||||
const std::vector<mirai::Task> tasksForDate = view_.getTasksForDate(currentDate);
|
||||
for (int taskIndex = 0; taskIndex < tasksForDate.size(); ++taskIndex) {
|
||||
|
@ -317,14 +324,16 @@ void AppWindow::reloadTasks()
|
|||
for (int eventIndex = 0; eventIndex < eventsForDate.size(); ++eventIndex) {
|
||||
auto ¤tEvent = eventsForDate.at(eventIndex);
|
||||
auto slintTasks = std::make_shared<slint::VectorModel<ui::TaskData>>();
|
||||
slintEvents->push_back(ui::Event{
|
||||
.sourceId = currentEvent.sourceId(),
|
||||
.id = currentEvent.id(),
|
||||
.title = slint::SharedString(currentEvent.title()),
|
||||
.startsAt = MiraiTimeToSlintTime(currentEvent.startsAt()),
|
||||
.endsAt = MiraiTimeToSlintTime(currentEvent.endsAt()),
|
||||
.tasks = slintTasks,
|
||||
});
|
||||
slintEvents->push_back(
|
||||
ui::Event{
|
||||
.sourceId = currentEvent.sourceId(),
|
||||
.id = currentEvent.id(),
|
||||
.title = slint::SharedString(currentEvent.title()),
|
||||
.startsAt = MiraiTimeToSlintTime(currentEvent.startsAt()),
|
||||
.endsAt = MiraiTimeToSlintTime(currentEvent.endsAt()),
|
||||
.tasks = slintTasks,
|
||||
}
|
||||
);
|
||||
auto eventTasks = currentEvent.queryTasks();
|
||||
for (int taskIndex = 0; taskIndex < eventTasks.size(); ++taskIndex) {
|
||||
auto &task = eventTasks.at(taskIndex);
|
||||
|
@ -370,25 +379,29 @@ void AppWindow::reloadTasks()
|
|||
std::chrono::sys_days(todayDate.toStdChrono())
|
||||
)
|
||||
.count();
|
||||
if (relativeDaysDiff < 0 || relativeDaysDiff >= 3) {
|
||||
if (relativeDaysDiff < 0 || relativeDaysDiff >= 7) {
|
||||
continue;
|
||||
}
|
||||
const std::vector<mirai::Event> eventsForDate = view_.getEventsForDate(currentDate);
|
||||
for (int eventIndex = 0; eventIndex < eventsForDate.size(); ++eventIndex) {
|
||||
auto ¤tEvent = eventsForDate.at(eventIndex);
|
||||
slintEvents->push_back(ui::CalendarDayEvent{
|
||||
.title = slint::SharedString(currentEvent.title()),
|
||||
.startsAt = MiraiTimeToSlintTime(currentEvent.startsAt()),
|
||||
.endsAt = MiraiTimeToSlintTime(currentEvent.endsAt()),
|
||||
});
|
||||
slintEvents->push_back(
|
||||
ui::CalendarDayEvent{
|
||||
.sourceId = currentEvent.sourceId(),
|
||||
.id = currentEvent.id(),
|
||||
.title = slint::SharedString(currentEvent.title()),
|
||||
.startsAt = MiraiTimeToSlintTime(currentEvent.startsAt()),
|
||||
.endsAt = MiraiTimeToSlintTime(currentEvent.endsAt()),
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
auto calendarDay = ui::CalendarDay{
|
||||
.events = slintEvents,
|
||||
.date = MiraiDateToSlintDate(currentDate),
|
||||
.header =
|
||||
slint::SharedString(capitalize(formatDateRelative(MiraiDateToSlintDate(currentDate))
|
||||
))
|
||||
.header = slint::SharedString(
|
||||
capitalize(formatDateRelative(MiraiDateToSlintDate(currentDate)))
|
||||
)
|
||||
};
|
||||
calendar_->push_back(calendarDay);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue