~aleteoryx/muditaos

ref: 6665a43d2b901b89809c4f18338d8ea6c0b08df7 muditaos/module-apps/application-phonebook/widgets/ContactFlagIconWidget.cpp -rw-r--r-- 2.9 KiB
6665a43d — Lefucjusz [BH-1780] Fix uncaught std::filesystem::file_size exception 2 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
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "ContactFlagIconWidget.hpp"

#include "ContactFlagsStyle.hpp"
#include "tools/Common.hpp"

namespace gui
{

    ContactFlagIconWidget::ContactFlagIconWidget(const std::string &iconName, const std::string &itemText, Item *parent)
        : Rect(parent, 0, 0, style::widget::ContactFlag::itemWidth, style::widget::ContactFlag::itemHeight),
          iconName(iconName), itemText(itemText)
    {
        buildItemWithIcon();
        buildItem();
    }

    ContactFlagIconWidget::ContactFlagIconWidget(uint8_t iconNumber, const std::string &itemText, Item *parent)
        : Rect(parent, 0, 0, style::widget::ContactFlag::itemWidth, style::widget::ContactFlag::itemHeight),
          number(iconNumber), itemText(itemText), numericIcon(true)
    {
        buildItemWithText();
        buildItem();
    }

    void ContactFlagIconWidget::setIconNumber(uint8_t iconNumber)
    {
        if ((numericLabel != nullptr) && (number != iconNumber)) {
            number = iconNumber;
            numericLabel->setText(std::to_string(number));
        }
    }

    void ContactFlagIconWidget::buildItemWithIcon()
    {
        icon = new Image(
            this, 0, 0, style::widget::ContactFlag::iconsSize, style::widget::ContactFlag::iconsSize, iconName);
        icon->setEdges(RectangleEdge::None);
    }

    void ContactFlagIconWidget::buildItemWithText()
    {
        numericLabel =
            new Label(this, 0, 0, style::widget::ContactFlag::iconsSize, style::widget::ContactFlag::iconsSize);
        numericLabel->setFont(style::window::font::bigbold);
        numericLabel->setText(std::to_string(number));
        numericLabel->setAlignment(Alignment(Alignment::Horizontal::Center, gui::Alignment::Vertical::Center));
        numericLabel->setEdges(RectangleEdge::None);
    }

    void ContactFlagIconWidget::buildItem()
    {
        setEdges(RectangleEdge::None);

        label = new Label(this);
        label->setFilled(false);
        label->setFont(style::window::font::verysmall);
        label->setText(itemText);
        label->setMinimumWidthToFitText();
        label->setMinimumHeightToFitText();
        label->setTextEllipsisType(gui::TextEllipsis::None);
        label->setEdges(RectangleEdge::None);
        label->setAlignment(Alignment(Alignment::Horizontal::Center, gui::Alignment::Vertical::Center));

        mainBox = new VBox(this, 0, 0, style::widget::ContactFlag::itemWidth, style::widget::ContactFlag::itemHeight);
        mainBox->setAlignment(Alignment(Alignment::Horizontal::Center, Alignment::Vertical::Center));
        mainBox->setEdges(RectangleEdge::None);
        if (numericIcon) {
            mainBox->addWidget(numericLabel);
        }
        else {
            mainBox->addWidget(icon);
        }
        mainBox->addWidget(label);
        mainBox->resizeItems();
    }

} // namespace gui