~aleteoryx/muditaos

ref: cd0cc6dc1a24355eb8637e8b3af1c07dde272c3e muditaos/module-apps/application-alarm-clock/widgets/AlarmItem.cpp -rw-r--r-- 3.1 KiB
cd0cc6dc — Mateusz Piesta [BH-890] Home screen alarm popups 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
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "AlarmItem.hpp"
#include "AlarmClockStyle.hpp"
#include "application-alarm-clock/data/AlarmsData.hpp"
#include <InputEvent.hpp>
#include <time/dateCommon.hpp>
#include <time/time_conversion.hpp>

namespace gui
{
    AlarmItem::AlarmItem(app::alarmClock::AlarmPresenter p) : AlarmEventItem(p)
    {
        setMinimumSize(style::window::default_body_width, style::alarmClock::window::item::height);
        setMargins(gui::Margins(0, style::margins::small, 0, style::alarmClock::window::item::botMargin));

        hBox = new gui::HBox(this, 0, 0, 0, 0);
        hBox->setEdges(gui::RectangleEdge::None);

        vBox = new gui::VBox(hBox, 0, 0, 0, 0);
        vBox->setEdges(gui::RectangleEdge::None);
        vBox->setMinimumSize(style::alarmClock::window::item::vBoxWidth, style::alarmClock::window::item::height);
        vBox->setMargins(gui::Margins(style::alarmClock::window::item::vBoxLeftMargin, 0, 0, 0));

        timeLabel = new gui::Label(vBox, 0, 0, 0, 0);
        timeLabel->setEdges(gui::RectangleEdge::None);
        timeLabel->setMinimumSize(style::alarmClock::window::item::vBoxWidth,
                                  style::alarmClock::window::item::timeHeight);
        timeLabel->setMargins(gui::Margins(0, style::margins::small, 0, 0));
        timeLabel->setAlignment(gui::Alignment{gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center});
        timeLabel->setFont(style::window::font::largelight);

        periodLabel = new gui::Label(vBox, 0, 0, 0, 0);
        periodLabel->setEdges(gui::RectangleEdge::None);
        periodLabel->setMinimumSize(style::alarmClock::window::item::vBoxWidth,
                                    style::alarmClock::window::item::periodHeight);
        periodLabel->setAlignment(gui::Alignment{gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Top});
        periodLabel->setFont(style::window::font::small);

        onOffImage = new gui::ButtonOnOff(hBox, ButtonState::On);
        onOffImage->setMargins(gui::Margins(style::alarmClock::window::item::imageMargin, 0, 0, 0));

        setAlarm();

        dimensionChangedCallback = [&](gui::Item &, const BoundingBox &newDim) -> bool {
            hBox->setArea({0, 0, newDim.w, newDim.h});
            return true;
        };
    }

    void AlarmItem::setAlarm()
    {
        timeLabel->setText(TimePointToLocalizedTimeString(presenter().getAlarm()->startDate));
        onOffImage->switchState(presenter().getAlarm()->enabled ? ButtonState::Off : ButtonState::On);

        if (presenter().hasRecurrence()) {
            periodLabel->setText(presenter().getDescription());
        }

        if (periodLabel->getText().empty()) {
            periodLabel->setMaximumSize(0, 0);
            timeLabel->setMinimumSize(style::alarmClock::window::item::vBoxWidth,
                                      style::alarmClock::window::item::timeHeight +
                                          style::alarmClock::window::item::periodHeight);
            vBox->resizeItems();
        }
    }
} // namespace gui