~aleteoryx/muditaos

ref: c4ce4467b227a996c4fbc6dc72be1e87066c6ed1 muditaos/module-apps/application-settings/widgets/display-keypad/QuoteWidget.cpp -rw-r--r-- 4.1 KiB
c4ce4467 — Wojciech Rzepecki [EGD-8212] Fixes for quotes edit UI 3 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
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "QuoteWidget.hpp"

#include <i18n/i18n.hpp>

namespace style::quotes
{
    namespace widget
    {
        inline constexpr uint32_t w = style::window::default_body_width;
        inline constexpr uint32_t h = 50;

        inline constexpr uint32_t input_box_w           = 55;
        inline constexpr uint32_t input_box_h           = h;
        inline constexpr int32_t input_box_right_margin = 20;

        inline constexpr uint32_t description_label_w           = style::window::default_body_width;
        inline constexpr uint32_t description_label_h           = 33;
        inline constexpr int32_t description_label_right_margin = 40;

        inline constexpr int32_t tick_image_left_margin  = -64;
        inline constexpr int32_t tick_image_right_margin = 21;

    } // namespace widget

} // namespace style::quotes

namespace gui
{

    QuoteWidget::QuoteWidget(const Quotes::QuoteRecord &quoteRecord,
                             std::function<void(bool)> enableQuoteCallback,
                             std::function<void(const UTF8 &)> navBarTemporaryMode,
                             std::function<void()> navBarRestoreFromTemporaryMode)
        : quote(quoteRecord), enableQuote(std::move(enableQuoteCallback)),
          navBarTemporaryMode(std::move(navBarTemporaryMode)),
          navBarRestoreFromTemporaryMode(std::move(navBarRestoreFromTemporaryMode))
    {

        setMinimumSize(style::quotes::widget::w, style::quotes::widget::h);

        setMargins(gui::Margins(0, style::margins::big, 0, 0));

        hBox = new gui::HBox(this, 0, 0, 0, 0);
        hBox->setEdges(gui::RectangleEdge::None);
        hBox->setPenFocusWidth(style::window::default_border_focus_w);
        hBox->setPenWidth(style::window::default_border_rect_no_focus);

        tickImage = new ImageBox(
            hBox, 0, 0, style::widgets::iconsSize, style::widgets::iconsSize, new Image("small_tick_32px_W_M"));
        tickImage->setVisible(true);
        tickImage->setMargins(gui::Margins(0, 0, style::quotes::widget::tick_image_right_margin, 0));
        tickImage->showImage(quote.enabled);
        tickImage->setEdges(RectangleEdge::Bottom);

        descriptionLabel = new gui::Label(hBox, 0, 0, 0, 0);
        descriptionLabel->setMaximumSize(style::quotes::widget::description_label_w,
                                         style::quotes::widget::description_label_h);
        descriptionLabel->setEdges(gui::RectangleEdge::None);
        descriptionLabel->setAlignment(Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center));
        descriptionLabel->setFont(style::window::font::medium);
        descriptionLabel->activeItem = false;

        descriptionLabel->setText(quote.quote);

        focusChangedCallback = [&](gui::Item &item) {
            if (item.focus) {
                descriptionLabel->setFont(style::window::font::mediumbold);
                auto bottorBarText =
                    quote.enabled ? utils::translate("common_uncheck") : utils::translate("common_check");
                this->navBarTemporaryMode(bottorBarText);
            }
            else {
                descriptionLabel->setFont(style::window::font::medium);
                setFocusItem(nullptr);
                this->navBarRestoreFromTemporaryMode();
            }
            return true;
        };

        activatedCallback = [&](gui::Item &item) {
            quote.enabled = !quote.enabled;
            enableQuote(quote.enabled);
            tickImage->showImage(quote.enabled);
            auto bottorBarText = quote.enabled ? utils::translate("common_uncheck") : utils::translate("common_check");
            this->navBarTemporaryMode(bottorBarText);
            hBox->resizeItems();
            return true;
        };

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

        setEdges(gui::RectangleEdge::None);
    }
} /* namespace gui */