Files
MuditaOS/module-apps/application-settings-new/windows/DateAndTimeMainWindow.cpp
Radoslaw Wicik 4ebfd8ebbb [EGD-5702] Fix focus reset in Time And Date
In "Time and Date" window focus where reseting on window update, this
commit fixes it.
2021-02-11 15:53:33 +01:00

120 lines
5.5 KiB
C++

// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
#include "application-settings-new/ApplicationSettings.hpp"
#include "DateAndTimeMainWindow.hpp"
#include "module-apps/application-desktop/windows/Names.hpp"
#include <module-utils/time/DateAndTimeSettings.hpp>
#include "OptionSetting.hpp"
#include "service-appmgr/Controller.hpp"
namespace gui
{
DateAndTimeMainWindow::DateAndTimeMainWindow(app::Application *app)
: BaseSettingsWindow(app, window::name::date_and_time)
{
setTitle(utils::localize.get("app_settings_date_and_time"));
automaticDateAndTimeIsOn = utils::dateAndTimeSettings.isAutomaticDateAndTimeOn();
automaticTimeZoneIsOn = utils::dateAndTimeSettings.isAutomaticTimeZoneOn();
timeFormat = utils::dateAndTimeSettings.getTimeFormat();
dateFormat = utils::dateAndTimeSettings.getDateFormat();
}
auto DateAndTimeMainWindow::buildOptionsList() -> std::list<Option>
{
std::list<Option> optionList;
auto addOption = [&](const std::string &text, std::function<bool(Item &)> activatedCallback) {
optionList.emplace_back(std::make_unique<option::OptionSettings>(
text, activatedCallback, nullptr, nullptr, option::SettingRightItem::ArrowWhite));
};
auto addSwitchOption = [&](const std::string &text,
std::function<bool(Item &)> activatedCallback,
option::SettingRightItem rightItem,
UTF8 textOnRight = UTF8()) {
optionList.emplace_back(std::make_unique<option::OptionSettings>(
text,
activatedCallback,
[=](Item &item) {
if (item.focus) {
this->setBottomBarText(utils::localize.get(style::strings::common::Switch),
BottomBar::Side::CENTER);
}
else {
this->setBottomBarText(utils::localize.get(style::strings::common::select),
BottomBar::Side::CENTER);
}
return true;
},
nullptr,
rightItem,
false,
std::move(textOnRight)));
};
addSwitchOption(
utils::translateI18("app_settings_date_and_time_automatic_date_and_time"),
[=](Item &item) {
automaticDateAndTimeIsOn = !automaticDateAndTimeIsOn;
app::manager::Controller::changeAutomaticDateAndTimeIsOn(application, automaticDateAndTimeIsOn);
refreshOptionsList();
return true;
},
automaticDateAndTimeIsOn ? option::SettingRightItem::On : option::SettingRightItem::Off);
if (!automaticDateAndTimeIsOn) {
addOption(utils::translateI18("app_settings_date_and_time_change_date_and_time"), [=](Item &item) {
LOG_INFO("switching to %s page", window::name::change_date_and_time);
application->switchWindow(window::name::change_date_and_time, nullptr);
return true;
});
}
addSwitchOption(
utils::translateI18("app_settings_date_and_time_automatic_time_zone"),
[=](Item &item) {
automaticTimeZoneIsOn = !automaticTimeZoneIsOn;
app::manager::Controller::changeAutomaticTimeZoneIsOn(application, automaticTimeZoneIsOn);
refreshOptionsList();
return true;
},
automaticTimeZoneIsOn ? option::SettingRightItem::On : option::SettingRightItem::Off);
if (!automaticTimeZoneIsOn) {
addOption(utils::translateI18("app_settings_date_and_time_change_time_zone"), [=](Item &item) {
LOG_INFO("switching to %s page", window::name::change_time_zone);
application->switchWindow(window::name::change_time_zone, nullptr);
return true;
});
}
addSwitchOption(
utils::translateI18("app_settings_date_and_time_time_format"),
[=](Item &item) {
timeFormat = (timeFormat == utils::time::Locale::TimeFormat::FormatTime12H)
? utils::time::Locale::TimeFormat::FormatTime24H
: utils::time::Locale::TimeFormat::FormatTime12H;
app::manager::Controller::changeTimeFormat(application, timeFormat);
refreshOptionsList();
return true;
},
option::SettingRightItem::Text,
utils::time::Locale::get_time_format(timeFormat).data());
addSwitchOption(
utils::translateI18("app_settings_date_and_time_date_format"),
[=](Item &item) {
dateFormat = (dateFormat == utils::time::Locale::DateFormat::DD_MM_YYYY)
? utils::time::Locale::DateFormat::MM_DD_YYYY
: utils::time::Locale::DateFormat::DD_MM_YYYY;
app::manager::Controller::changeDateFormat(application, dateFormat);
refreshOptionsList();
return true;
},
option::SettingRightItem::Text,
utils::time::Locale::get_date_format(dateFormat).data());
return optionList;
}
} // namespace gui