~aleteoryx/muditaos

ref: 07cc59d97869e83b319f930403112d2cbd321248 muditaos/module-apps/application-bell-settings/widgets/TimeSetListItem.cpp -rw-r--r-- 1.7 KiB
07cc59d9 — Mateusz Piesta [BH-708] Time and units 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
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "TimeSetListItem.hpp"
#include "BellSettingsStyle.hpp"

#include <gui/input/InputEvent.hpp>
#include <widgets/TimeSetFmtSpinner.hpp>

namespace gui
{
    TimeSetListItem::TimeSetListItem(
        gui::Length x, gui::Length y, gui::Length w, gui::Length h, std::string description)
        : SideListItem(std::move(description))
    {
        setMinimumSize(style::sidelistview::list_item::w, style::sidelistview::list_item::h);
        timeSetFmtSpinner = new TimeSetFmtSpinner(body);
        timeSetFmtSpinner->setMinimumSize(bell_settings_style::time_set_spinner_list_item::w,
                                          bell_settings_style::time_set_spinner_list_item::h);

        timeSetFmtSpinner->setMargins(calculateMargins());
        setFocusItem(body);

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

        focusChangedCallback = [&](Item &item) {
            setFocusItem(focus ? body : nullptr);
            return true;
        };

        inputCallback = [&](Item &, const InputEvent &inputEvent) -> bool { return body->onInput(inputEvent); };
    }
    Margins TimeSetListItem::calculateMargins() const noexcept
    {
        constexpr auto ratio = 4;
        constexpr Position availableHeight =
            style::sidelistview::list_item::h -
            (bell_settings_style::time_fmt_set_list_item::h + style::sidelistview::top_message::h);
        return Margins{0, availableHeight / ratio, 0, 0};
    }
} /* namespace gui */