mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-04-18 22:18:38 -04:00
132 lines
4.8 KiB
C++
132 lines
4.8 KiB
C++
// Copyright (c) 2017-2023, Mudita Sp. z.o.o. All rights reserved.
|
|
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
|
|
|
|
#include "ApplicationMeditation.hpp"
|
|
#include "MeditationOptionsWindows.hpp"
|
|
#include "Names.hpp"
|
|
|
|
#include <Constants.hpp>
|
|
#include <OptionSetting.hpp>
|
|
#include <i18n/i18n.hpp>
|
|
|
|
using namespace gui;
|
|
|
|
namespace
|
|
{
|
|
std::string toString(std::chrono::seconds duration)
|
|
{
|
|
if (duration.count() >= 60) {
|
|
return std::to_string(static_cast<int>((duration.count()) / 60)) + " m";
|
|
}
|
|
return std::to_string(static_cast<int>(duration.count())) + " s";
|
|
}
|
|
} // namespace
|
|
|
|
MeditationOptionsWindow::MeditationOptionsWindow(app::ApplicationCommon *app)
|
|
: OptionWindow(app, app::window::name::meditation_options)
|
|
{
|
|
setTitle(utils::translate("common_options_title"));
|
|
addOptions(buildOptionsList());
|
|
}
|
|
|
|
std::list<Option> MeditationOptionsWindow::buildOptionsList()
|
|
{
|
|
std::list<Option> options;
|
|
addCounterOption(options);
|
|
addPreparationTimeOption(options);
|
|
return options;
|
|
}
|
|
|
|
void MeditationOptionsWindow::addCounterOption(std::list<Option> &options)
|
|
{
|
|
auto app = static_cast<app::ApplicationMeditation *>(application);
|
|
options.emplace_back(std::make_unique<option::OptionSettings>(
|
|
utils::translate("app_meditation_option_show_counter"),
|
|
[=](Item &item) {
|
|
app->state->setCounterVisible(!app->state->isCounterVisible());
|
|
refreshOptions(buildOptionsList());
|
|
return true;
|
|
},
|
|
[=](gui::Item &item) {
|
|
if (item.focus) {
|
|
setNavBarText(utils::translate(style::strings::common::Switch), nav_bar::Side::Center);
|
|
}
|
|
return true;
|
|
},
|
|
nullptr,
|
|
app->state->isCounterVisible() ? option::SettingRightItem::On : option::SettingRightItem::Off));
|
|
}
|
|
|
|
void MeditationOptionsWindow::addPreparationTimeOption(std::list<Option> &options)
|
|
{
|
|
options.emplace_back(std::make_unique<option::OptionSettings>(
|
|
utils::translate("app_meditation_preparation_time"),
|
|
[=](Item &item) {
|
|
application->switchWindow(app::window::name::meditation_preparation);
|
|
return true;
|
|
},
|
|
[=](gui::Item &item) {
|
|
if (item.focus) {
|
|
setNavBarText(utils::translate(style::strings::common::select), nav_bar::Side::Center);
|
|
}
|
|
return true;
|
|
},
|
|
nullptr,
|
|
option::SettingRightItem::ArrowBlack));
|
|
}
|
|
|
|
PreparationTimeWindow::PreparationTimeWindow(app::ApplicationCommon *app)
|
|
: OptionWindow(app, app::window::name::meditation_preparation)
|
|
{
|
|
setTitle(utils::translate("app_meditation_preparation_time"));
|
|
navBar->setText(nav_bar::Side::Center, utils::translate(style::strings::common::select));
|
|
navBar->setText(nav_bar::Side::Right, utils::translate(style::strings::common::back));
|
|
addOptions(buildOptionsList());
|
|
}
|
|
|
|
std::list<Option> PreparationTimeWindow::buildOptionsList()
|
|
{
|
|
auto app = static_cast<app::ApplicationMeditation *>(application);
|
|
std::list<Option> options;
|
|
for (auto &&duration : Constants::Params::preparationTimes) {
|
|
addPreparationTimeOption(duration, app, options);
|
|
}
|
|
return options;
|
|
}
|
|
|
|
void PreparationTimeWindow::addPreparationTimeOption(std::chrono::seconds duration,
|
|
app::ApplicationMeditation *app,
|
|
std::list<Option> &options)
|
|
{
|
|
options.emplace_back(std::make_unique<gui::option::OptionSettings>(
|
|
toString(duration),
|
|
[=](const gui::Item &item) {
|
|
if (!app->state->setPreparationTime(duration)) {
|
|
LOG_ERROR("Incorrect preparation time value! The default value is set.");
|
|
}
|
|
refreshOptions(buildOptionsList());
|
|
return true;
|
|
},
|
|
nullptr,
|
|
this,
|
|
app->state->getPreparationTime() == duration ? gui::option::SettingRightItem::Checked
|
|
: gui::option::SettingRightItem::Disabled));
|
|
}
|
|
|
|
void PreparationTimeWindow::onBeforeShow([[maybe_unused]] ShowMode mode, [[maybe_unused]] SwitchData *data)
|
|
{
|
|
selectedItemIndex = getSelectedItemIndex();
|
|
refreshOptions(buildOptionsList(), selectedItemIndex);
|
|
}
|
|
|
|
std::size_t PreparationTimeWindow::getSelectedItemIndex() const
|
|
{
|
|
auto app = static_cast<app::ApplicationMeditation *>(application);
|
|
const auto selectedTime = app->state->getPreparationTime();
|
|
const auto it = std::find(
|
|
std::begin(Constants::Params::preparationTimes), std::end(Constants::Params::preparationTimes), selectedTime);
|
|
return it == std::end(Constants::Params::preparationTimes)
|
|
? 0
|
|
: std::distance(std::begin(Constants::Params::preparationTimes), it);
|
|
}
|