~aleteoryx/muditaos

ref: 5fae63df3ef0389eb0ba1bfea1a85e94a211d909 muditaos/module-apps/application-meditation/widgets/MeditationModel.cpp -rw-r--r-- 3.5 KiB
5fae63df — Radoslaw Wicik [EGD-6648] Fix Events Record tests 4 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// 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<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;
    }
}