mirror of
https://codeberg.org/vyn/mirai.git
synced 2025-07-03 01:33:19 +00:00
Add new 'Add task/event' bar directly in the main view
This commit is contained in:
parent
534da46a26
commit
2aa039e5fc
18 changed files with 399 additions and 51 deletions
|
@ -34,14 +34,22 @@
|
|||
|
||||
UiState::UiState(mirai::Mirai *miraiInstance) : miraiInstance_(miraiInstance), view_(miraiInstance)
|
||||
{
|
||||
sources_ = std::make_shared<slint::VectorModel<slint::SharedString>>();
|
||||
sources_ = std::make_shared<slint::VectorModel<Source>>();
|
||||
days_ = std::make_shared<slint::VectorModel<Day>>();
|
||||
unscheduledTasks_ = std::make_shared<slint::VectorModel<TaskData>>();
|
||||
tags_ = std::make_shared<slint::VectorModel<slint::SharedString>>();
|
||||
auto sourcesNames = std::make_shared<slint::MapModel<Source, slint::SharedString>>(
|
||||
sources_,
|
||||
[&](const Source &a) {
|
||||
return a.name;
|
||||
}
|
||||
);
|
||||
|
||||
taskWindow_->global<Backend>().set_sources(sources_);
|
||||
mainWindow_->global<Backend>().set_sources(sourcesNames);
|
||||
taskWindow_->global<Backend>().set_sources_selected(sources_);
|
||||
taskWindow_->global<Backend>().set_sources(sourcesNames);
|
||||
taskWindow_->global<Backend>().set_tags(tags_);
|
||||
eventWindow_->global<Backend>().set_sources(sources_);
|
||||
eventWindow_->global<Backend>().set_sources_selected(sources_);
|
||||
eventWindow_->global<Backend>().set_tags(tags_);
|
||||
|
||||
view_.update();
|
||||
|
@ -76,7 +84,7 @@ std::optional<Date> stringToDate(const std::string &dateStr)
|
|||
|
||||
void UiState::setupTaskWindowCallbacks()
|
||||
{
|
||||
taskWindow_->on_save([&](SaveTaskData newTaskData) {
|
||||
mainWindow_->global<Backend>().on_saveTask([&](SaveTaskData newTaskData) {
|
||||
auto source = miraiInstance_->getSourceById(newTaskData.sourceId);
|
||||
assert(source);
|
||||
auto task = source->getTaskById(newTaskData.id);
|
||||
|
@ -103,7 +111,7 @@ void UiState::setupTaskWindowCallbacks()
|
|||
taskWindow_->hide();
|
||||
});
|
||||
|
||||
taskWindow_->on_create([&](NewTaskData newTaskData) {
|
||||
mainWindow_->global<Backend>().on_createTask([&](NewTaskData newTaskData) {
|
||||
const Date &date = newTaskData.date;
|
||||
const std::string dateStr = SlintDateToStdString(date);
|
||||
auto source = miraiInstance_->getSourceById(newTaskData.sourceId);
|
||||
|
@ -152,7 +160,7 @@ void UiState::setupEventWindowCallbacks()
|
|||
assert(source);
|
||||
auto event = source->getEventById(eventId);
|
||||
assert(event);
|
||||
eventWindow_->global<Backend>().set_sources(sources_);
|
||||
eventWindow_->global<Backend>().set_sources_selected(sources_);
|
||||
eventWindow_->global<Backend>().set_tags(tags_);
|
||||
|
||||
eventWindow_->set_sourceId(sourceId);
|
||||
|
@ -177,7 +185,7 @@ void UiState::setupEventWindowCallbacks()
|
|||
reloadTasks();
|
||||
});
|
||||
|
||||
eventWindow_->on_create([&](NewEventParams newEventParams) {
|
||||
mainWindow_->global<Backend>().on_createEvent([&](NewEventParams newEventParams) {
|
||||
const Date &date = newEventParams.date;
|
||||
const std::string dateStr = SlintDateToStdString(date);
|
||||
auto source = miraiInstance_->getSourceById(newEventParams.sourceId);
|
||||
|
@ -195,7 +203,7 @@ void UiState::setupEventWindowCallbacks()
|
|||
eventWindow_->hide();
|
||||
});
|
||||
|
||||
eventWindow_->on_save([&](SaveEventParams newEventParams) {
|
||||
mainWindow_->global<Backend>().on_saveEvent([&](SaveEventParams newEventParams) {
|
||||
const Date &date = newEventParams.date;
|
||||
const std::string dateStr = SlintDateToStdString(date);
|
||||
auto source = miraiInstance_->getSourceById(newEventParams.sourceId);
|
||||
|
@ -239,15 +247,28 @@ void UiState::setupCallbacks()
|
|||
});
|
||||
|
||||
mainWindow_->global<Backend>().on_source_clicked([&](int index) {
|
||||
const auto &source = miraiInstance_->getSourceById(index);
|
||||
const auto &sourceName = source->getName();
|
||||
if (std::ranges::find(view_.getActiveFilesFilter(), sourceName) ==
|
||||
view_.getActiveFilesFilter().end()) {
|
||||
view_.addSourceFilter(sourceName);
|
||||
// index with value -1 is equal to no selection, aka "All"
|
||||
if (index == -1) {
|
||||
view_.removeFilters();
|
||||
} else {
|
||||
view_.removeSourceFilter(sourceName);
|
||||
view_.removeFilters();
|
||||
const auto &source = miraiInstance_->getSourceById(index);
|
||||
const auto &sourceName = source->getName();
|
||||
view_.addSourceFilter(sourceName);
|
||||
/*
|
||||
// Old behavior, I keep it here for now
|
||||
const auto &source = miraiInstance_->getSourceById(index);
|
||||
const auto &sourceName = source->getName();
|
||||
if (std::ranges::find(view_.getActiveFilesFilter(), sourceName) ==
|
||||
view_.getActiveFilesFilter().end()) {
|
||||
view_.addSourceFilter(sourceName);
|
||||
} else {
|
||||
view_.removeSourceFilter(sourceName);
|
||||
}
|
||||
*/
|
||||
}
|
||||
view_.update();
|
||||
reloadSources();
|
||||
reloadTasks();
|
||||
});
|
||||
|
||||
|
@ -294,7 +315,7 @@ void UiState::setupCallbacks()
|
|||
});
|
||||
|
||||
mainWindow_->global<Backend>().on_open_new_task_form([&](OpenNewTaskFormParams params) {
|
||||
taskWindow_->global<Backend>().set_sources(sources_);
|
||||
taskWindow_->global<Backend>().set_sources_selected(sources_);
|
||||
taskWindow_->global<Backend>().set_tags(tags_);
|
||||
|
||||
auto todayDate = std::chrono::year_month_day{
|
||||
|
@ -329,7 +350,7 @@ void UiState::setupCallbacks()
|
|||
reloadTasks();
|
||||
});
|
||||
|
||||
mainWindow_->global<Backend>().set_sources(sources_);
|
||||
mainWindow_->global<Backend>().set_sources_selected(sources_);
|
||||
mainWindow_->global<Backend>().set_tags(tags_);
|
||||
mainWindow_->global<Backend>().set_visible_tasks(days_);
|
||||
|
||||
|
@ -450,9 +471,17 @@ void UiState::reloadTasks()
|
|||
void UiState::reloadSources()
|
||||
{
|
||||
sources_->clear();
|
||||
bool noSourceSelected = true;
|
||||
for (const auto &source : miraiInstance_->getSources()) {
|
||||
sources_->push_back(slint::SharedString(source->getName()));
|
||||
bool isSourceSelected = view_.isSourceFilterActive(source->getName());
|
||||
sources_->push_back(
|
||||
{.name = slint::SharedString(source->getName()), .selected = isSourceSelected}
|
||||
);
|
||||
if (isSourceSelected) {
|
||||
noSourceSelected = false;
|
||||
}
|
||||
}
|
||||
mainWindow_->global<Backend>().set_no_source_selected(noSourceSelected);
|
||||
}
|
||||
|
||||
void UiState::reloadTags()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue