Files
MuditaOS/module-apps/application-alarm-clock/models/CustomRepeatModel.cpp
Przemyslaw Brudny e3a057e15c [EGD-7310] Alarm GUI and features update
Updated AlarmOptionsItem to use UTF8Spinner.
Created specialized widgets to cover options
sets. Updated GenericSpinner to handle Pure
navigation and content swap. Updated Alarm
RRule code to work with Custom Days selection
and new widgets. Added Tests. General GUI
stylistic fixes. Increased app Alarm Clock
and service Time stack sizes.
2021-09-21 14:11:21 +03:00

84 lines
2.3 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 "CustomRepeatModel.hpp"
#include <application-alarm-clock/widgets/AlarmClockStyle.hpp>
#include <ListView.hpp>
#include <time/time_locale.hpp>
namespace app::alarmClock
{
CustomRepeatModel::CustomRepeatModel(app::ApplicationCommon *app,
std::shared_ptr<alarmClock::AlarmRRulePresenter> rRulePresenter)
: application(app), rRulePresenter(rRulePresenter)
{}
unsigned int CustomRepeatModel::requestRecordsCount()
{
return internalData.size();
}
unsigned int CustomRepeatModel::getMinimalItemSpaceRequired() const
{
return style::window::label::big_h + style::margins::big;
}
void CustomRepeatModel::requestRecords(uint32_t offset, uint32_t limit)
{
setupModel(offset, limit);
list->onProviderDataUpdate();
}
gui::ListItem *CustomRepeatModel::getItem(gui::Order order)
{
return getRecord(order);
}
void CustomRepeatModel::createData()
{
auto app = application;
for (auto const &[day, selected] : rRulePresenter->getCustomDays()) {
internalData.push_back(new gui::CustomCheckBoxWithLabel(
utils::translate(day),
selected,
[app](const UTF8 &text) { app->getCurrentWindow()->bottomBarTemporaryMode(text, false); },
[app]() { app->getCurrentWindow()->bottomBarRestoreFromTemporaryMode(); }));
}
for (auto &item : internalData) {
item->deleteByList = false;
}
}
void CustomRepeatModel::loadData()
{
list->reset();
eraseInternalData();
createData();
list->rebuildList();
}
void CustomRepeatModel::saveCheckedData()
{
std::list<utl::Day> days = {};
for (unsigned int i = 0; i < internalData.size(); i++) {
if (internalData[i]->isChecked()) {
days.emplace_back(magic_enum::enum_cast<utl::Day>(i).value());
}
}
rRulePresenter->setOption(AlarmRRulePresenter::RRuleOptions::Custom, days);
}
void CustomRepeatModel::eraseData()
{
list->reset();
eraseInternalData();
}
} // namespace app::alarmClock