// Copyright (c) 2017-2021, 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->reset(); eraseInternalData(); } PreparationTimeModel::PreparationTimeModel(app::Application *app) : MeditationModel(app) {} void PreparationTimeModel::clearData() { itemCurrentlySelected = nullptr; MeditationModel::clearData(); } namespace { using namespace std::chrono_literals; std::vector preparationTimeRecords{5s, 10s, 30s, 1min, 2min, 5min, 10min, 15min, 30min}; } // namespace void PreparationTimeModel::createData() { auto app = static_cast(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(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; } }