mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-07-18 12:04:03 -04:00
119 lines
3.5 KiB
C++
119 lines
3.5 KiB
C++
// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved.
|
|
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
|
|
|
|
#include "MeditationModel.hpp"
|
|
|
|
#include "application-meditation/windows/Names.hpp"
|
|
#include "application-meditation/ApplicationMeditation.hpp"
|
|
#include "application-meditation/data/Style.hpp"
|
|
|
|
#include "ListView.hpp"
|
|
|
|
using namespace gui;
|
|
|
|
MeditationModel::MeditationModel(app::Application *app) : application(app)
|
|
{}
|
|
|
|
auto MeditationModel::requestRecordsCount() -> unsigned int
|
|
{
|
|
return internalData.size();
|
|
}
|
|
|
|
auto MeditationModel::getMinimalItemHeight() const -> unsigned int
|
|
{
|
|
return style::meditation::itemList::text::Height;
|
|
}
|
|
|
|
void MeditationModel::requestRecords(const uint32_t offset, const uint32_t limit)
|
|
{
|
|
setupModel(offset, limit);
|
|
list->onProviderDataUpdate();
|
|
}
|
|
|
|
auto MeditationModel::getItem(gui::Order order) -> gui::ListItem *
|
|
{
|
|
return getRecord(order);
|
|
}
|
|
|
|
void MeditationModel::clearData()
|
|
{
|
|
list->clear();
|
|
eraseInternalData();
|
|
}
|
|
|
|
PreparationTimeModel::PreparationTimeModel(app::Application *app) : MeditationModel(app)
|
|
{}
|
|
|
|
void PreparationTimeModel::clearData()
|
|
{
|
|
itemCurrentlySelected = nullptr;
|
|
MeditationModel::clearData();
|
|
}
|
|
|
|
namespace
|
|
{
|
|
using namespace std::chrono_literals;
|
|
std::vector<std::chrono::seconds> preparationTimeRecords{5s, 10s, 30s, 1min, 2min, 5min, 10min, 15min, 30min};
|
|
} // namespace
|
|
|
|
void PreparationTimeModel::createData()
|
|
{
|
|
auto app = static_cast<app::ApplicationMeditation *>(application);
|
|
|
|
for (auto record : ::preparationTimeRecords) {
|
|
auto item = new PreparationTimeItem(record);
|
|
// check if record was already selected by value or default initialized
|
|
if (app->state->preparationTime == item->getDuration()) {
|
|
item->select(true);
|
|
itemCurrentlySelected = item;
|
|
}
|
|
|
|
item->activatedCallback = [this, app, item](gui::Item &) {
|
|
LOG_DEBUG("Selecting meditation time period");
|
|
if (itemCurrentlySelected != nullptr) {
|
|
itemCurrentlySelected->select(false);
|
|
}
|
|
item->select(true);
|
|
itemCurrentlySelected = item;
|
|
|
|
app->state->preparationTime = item->getDuration();
|
|
application->refreshWindow(RefreshModes::GUI_REFRESH_FAST);
|
|
return true;
|
|
};
|
|
|
|
item->deleteByList = false;
|
|
internalData.push_back(item);
|
|
}
|
|
}
|
|
|
|
MeditationOptionsModel::MeditationOptionsModel(app::Application *app) : MeditationModel(app)
|
|
{}
|
|
|
|
void MeditationOptionsModel::createData()
|
|
{
|
|
auto app = static_cast<app::ApplicationMeditation *>(application);
|
|
|
|
MeditationListItem *item = new OptionItemMeditationCounter(app->state->showCounter);
|
|
item->activatedCallback = [this, app, item](gui::Item &) {
|
|
LOG_DEBUG("Meditation options: selecting OptionMeditationCounter");
|
|
app->state->showCounter = !app->state->showCounter;
|
|
item->select(app->state->showCounter);
|
|
application->refreshWindow(RefreshModes::GUI_REFRESH_FAST);
|
|
return true;
|
|
};
|
|
internalData.push_back(item);
|
|
|
|
item = new OptionItemPreparation();
|
|
item->activatedCallback = [this](gui::Item &) {
|
|
LOG_DEBUG("Meditation options: selecting OptionPreparation");
|
|
application->switchWindow(app::window::name::meditation_preparation);
|
|
application->refreshWindow(RefreshModes::GUI_REFRESH_FAST);
|
|
return true;
|
|
};
|
|
internalData.push_back(item);
|
|
|
|
for (auto item1 : internalData) {
|
|
item1->deleteByList = false;
|
|
}
|
|
}
|