~aleteoryx/muditaos

4dd045f30f88027a4767e9530b5191e4c85c7b67 — Przemyslaw Brudny 4 years ago 999ca7a
[EGD-3544] Label replacement with OneLine text

Label replacement with OneLine text. Style and usage fixes.
63 files changed, 293 insertions(+), 743 deletions(-)

M module-apps/application-antenna/windows/AlgoParamsWindow.cpp
M module-apps/application-antenna/windows/AntennaMainWindow.cpp
M module-apps/application-antenna/windows/ScanModesWindow.cpp
M module-apps/application-calculator/widgets/MathOperationsBox.cpp
M module-apps/application-calendar/widgets/DayLabel.cpp
M module-apps/application-call/windows/NumberWindow.cpp
M module-apps/application-calllog/widgets/CalllogItem.cpp
M module-apps/application-desktop/windows/MenuWindow.cpp
M module-apps/application-meditation/data/Style.hpp
M module-apps/application-meditation/widgets/IntervalBox.hpp
M module-apps/application-meditation/widgets/TimerProperty.hpp
M module-apps/application-messages/widgets/BaseThreadItem.cpp
M module-apps/application-messages/widgets/SMSTemplateItem.cpp
M module-apps/application-messages/windows/SMSTemplatesWindow.hpp
M module-apps/application-music-player/widgets/SongItem.cpp
M module-apps/application-music-player/windows/MusicPlayerMainWindow.cpp
M module-apps/application-notes/widgets/NotesItem.hpp
M module-apps/application-notes/windows/NoteEditWindow.hpp
M module-apps/application-notes/windows/NotePreviewWindow.hpp
M module-apps/application-onboarding/windows/ConfigurationSuccessfulDialogWindow.hpp
M module-apps/application-onboarding/windows/EULALicenseWindow.hpp
M module-apps/application-onboarding/windows/NoConfigurationDialogWindow.hpp
M module-apps/application-phonebook/widgets/ContactFlagIconWidget.cpp
M module-apps/application-phonebook/widgets/ContactFlagsStyle.hpp
M module-apps/application-phonebook/widgets/InformationWidget.cpp
M module-apps/application-phonebook/widgets/InformationWidget.hpp
M module-apps/application-phonebook/widgets/InputLinesWithLabelWidget.cpp
M module-apps/application-phonebook/widgets/OutputLinesTextWithLabelWidget.cpp
M module-apps/application-phonebook/widgets/OutputLinesTextWithLabelWidget.hpp
M module-apps/application-phonebook/widgets/PhonebookItem.cpp
M module-apps/application-phonebook/widgets/PhonebookItem.hpp
M module-apps/application-phonebook/widgets/PhonebookListView.cpp
M module-apps/application-phonebook/widgets/PhonebookListView.hpp
M module-apps/application-settings/widgets/advanced/ColorTestListItem.cpp
M module-apps/application-special-input/windows/SpecialInputMainWindow.hpp
M module-apps/apps-common/widgets/AlarmSetSpinner.cpp
M module-apps/apps-common/widgets/ButtonOnOff.cpp
M module-apps/apps-common/widgets/ButtonOnOff.hpp
M module-apps/apps-common/widgets/InputBox.cpp
M module-apps/apps-common/widgets/InputBox.hpp
M module-apps/apps-common/widgets/ModesBox.hpp
M module-apps/apps-common/widgets/TextWithIconsWidget.cpp
M module-apps/apps-common/widgets/TextWithIconsWidget.hpp
M module-apps/apps-common/widgets/TimeSetSpinner.cpp
D module-gui/gui/core/Ellipsis.hpp
M module-gui/gui/core/RawFont.cpp
M module-gui/gui/core/RawFont.hpp
M module-gui/gui/widgets/CMakeLists.txt
D module-gui/gui/widgets/Label.cpp
D module-gui/gui/widgets/Label.hpp
M module-gui/gui/widgets/NavBar.cpp
M module-gui/gui/widgets/header/Header.cpp
M module-gui/gui/widgets/status-bar/PhoneMode.cpp
M module-gui/gui/widgets/text/CMakeLists.txt
A module-gui/gui/widgets/text/Label.cpp
A module-gui/gui/widgets/text/Label.hpp
M module-gui/gui/widgets/text/Text.cpp
M module-gui/gui/widgets/text/Text.hpp
M module-gui/gui/widgets/text/TextFixedSize.cpp
M module-gui/test/test-catch/test-gui-callbacks.cpp
M module-gui/test/test-catch/test-gui.cpp
M products/BellHybrid/apps/application-bell-main/widgets/SnoozeTimer.cpp
M products/BellHybrid/apps/application-bell-settings/widgets/TimeFormatSetListItem.cpp
M module-apps/application-antenna/windows/AlgoParamsWindow.cpp => module-apps/application-antenna/windows/AlgoParamsWindow.cpp +2 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "AlgoParamsWindow.hpp"


@@ 6,7 6,7 @@
#include <application-antenna/ApplicationAntenna.hpp>
#include <module-gui/gui/widgets/BoxLayout.hpp>
#include <module-gui/gui/widgets/Item.hpp>
#include <module-gui/gui/widgets/Label.hpp>
#include <module-gui/gui/widgets/text/Label.hpp>
#include <module-gui/gui/widgets/Style.hpp>
#include <module-gui/gui/widgets/Window.hpp>
#include <i18n/i18n.hpp>

M module-apps/application-antenna/windows/AntennaMainWindow.cpp => module-apps/application-antenna/windows/AntennaMainWindow.cpp +2 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

/*


@@ 14,7 14,7 @@
#include <application-antenna/ApplicationAntenna.hpp>
#include <module-gui/gui/widgets/BoxLayout.hpp>
#include <module-gui/gui/widgets/Item.hpp>
#include <module-gui/gui/widgets/Label.hpp>
#include <module-gui/gui/widgets/text/Label.hpp>
#include <module-gui/gui/widgets/Style.hpp>
#include <module-gui/gui/widgets/Window.hpp>
#include <i18n/i18n.hpp>

M module-apps/application-antenna/windows/ScanModesWindow.cpp => module-apps/application-antenna/windows/ScanModesWindow.cpp +2 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "ScanModesWindow.hpp"


@@ 7,7 7,7 @@
#include <i18n/i18n.hpp>
#include <module-gui/gui/widgets/BoxLayout.hpp>
#include <module-gui/gui/widgets/Item.hpp>
#include <module-gui/gui/widgets/Label.hpp>
#include <module-gui/gui/widgets/text/Label.hpp>
#include <module-gui/gui/widgets/Style.hpp>
#include <module-gui/gui/widgets/Window.hpp>
#include <service-cellular/CellularServiceAPI.hpp>

M module-apps/application-calculator/widgets/MathOperationsBox.cpp => module-apps/application-calculator/widgets/MathOperationsBox.cpp +2 -2
@@ 1,10 1,10 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "CalculatorStyle.hpp"
#include "MathOperationsBox.hpp"
#include <data/CalculatorInputProcessor.hpp>
#include <module-gui/gui/widgets/Label.hpp>
#include <module-gui/gui/widgets/text/Label.hpp>
#include <cassert>

namespace gui

M module-apps/application-calendar/widgets/DayLabel.cpp => module-apps/application-calendar/widgets/DayLabel.cpp +2 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "DayLabel.hpp"


@@ 9,7 9,7 @@

#include <gui/widgets/Image.hpp>
#include <time/time_conversion.hpp>
#include <gui/widgets/Label.hpp>
#include <gui/widgets/text/Label.hpp>

namespace gui
{

M module-apps/application-call/windows/NumberWindow.cpp => module-apps/application-call/windows/NumberWindow.cpp +4 -3
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "ApplicationCall.hpp"


@@ 8,7 8,7 @@

#include <ContactRecord.hpp>
#include <gui/widgets/Image.hpp>
#include <gui/widgets/Label.hpp>
#include <gui/widgets/text/Label.hpp>
#include <gui/widgets/Window.hpp>
#include <i18n/i18n.hpp>
#include <text/modes/InputMode.hpp>


@@ 58,7 58,8 @@ namespace gui
        numberLabel->setFont(style::window::font::largelight);
        numberLabel->setEdges(RectangleEdge::Bottom);
        numberLabel->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Top));
        numberLabel->setEllipsis(Ellipsis::Left);
        numberLabel->setTextEllipsisType(TextEllipsis::Left);
        numberLabel->setCursorStartPosition(CursorStartPosition::DocumentEnd);

        numberDescriptionLabel = new gui::Label(this,
                                                numberDescriptionLabel::x,

M module-apps/application-calllog/widgets/CalllogItem.cpp => module-apps/application-calllog/widgets/CalllogItem.cpp +2 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "CalllogItem.hpp"


@@ 41,7 41,7 @@ namespace gui
        text->setEdges(gui::RectangleEdge::None);
        text->setAlignment(gui::Alignment{gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center});
        text->setFont(style::window::font::big);
        text->setEllipsis(Ellipsis::Right);
        text->setTextEllipsisType(TextEllipsis::Right);

        timestamp = new gui::Label(hBox, 0, 0, 0, 0);
        timestamp->setMargins(Margins(0, 0, clItemStyle::right_margin, 0));

M module-apps/application-desktop/windows/MenuWindow.cpp => module-apps/application-desktop/windows/MenuWindow.cpp +2 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "DBNotificationsHandler.hpp"


@@ 102,7 102,7 @@ namespace gui
                               std::function<bool()> hasNotificationsCallback)
        : Tile{std::move(icon), std::move(title), std::move(activatedCallback), std::move(hasNotificationsCallback)}
    {
        description->setTextColor(gui::ColorGrey);
        description->setColor(gui::ColorGrey);
    }

    MenuPage::MenuPage(gui::Item *parent, UTF8 title, std::vector<Tile *> tiles) : title(std::move(title))

M module-apps/application-meditation/data/Style.hpp => module-apps/application-meditation/data/Style.hpp +3 -3
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 22,7 22,7 @@ namespace style::meditation
        namespace setterValueLabel
        {
            constexpr auto Width           = 140;
            constexpr auto Height          = 96;
            constexpr auto Height          = 100;
            constexpr auto TopMargin       = 80;
            constexpr auto BottomLineWidth = 100;
            constexpr auto BottomLinePen   = 2;


@@ 31,7 31,7 @@ namespace style::meditation
        namespace setterUnitLabel
        {
            constexpr auto Width     = 220;
            constexpr auto Height    = 20;
            constexpr auto Height    = 23;
            constexpr auto TopMargin = 15;
        } // namespace setterUnitLabel


M module-apps/application-meditation/widgets/IntervalBox.hpp => module-apps/application-meditation/widgets/IntervalBox.hpp +2 -2
@@ 1,11 1,11 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include <gui/widgets/BoxLayout.hpp>
#include <gui/widgets/Image.hpp>
#include <gui/widgets/Label.hpp>
#include <gui/widgets/text/Label.hpp>

#include <list>
#include <chrono>

M module-apps/application-meditation/widgets/TimerProperty.hpp => module-apps/application-meditation/widgets/TimerProperty.hpp +2 -2
@@ 1,10 1,10 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include <gui/widgets/Circle.hpp>
#include <gui/widgets/Label.hpp>
#include <gui/widgets/text/Label.hpp>
#include <gui/widgets/Rect.hpp>
#include <gui/widgets/BoxLayout.hpp>


M module-apps/application-messages/widgets/BaseThreadItem.cpp => module-apps/application-messages/widgets/BaseThreadItem.cpp +7 -8
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "BaseThreadItem.hpp"


@@ 26,7 26,7 @@ namespace gui

        contact = createEmptyLabel(this);
        contact->setFont(style::window::font::bigbold);
        contact->setEllipsis(Ellipsis::Right);
        contact->setTextEllipsisType(TextEllipsis::Right);
        contact->setAlignment(gui::Alignment{gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center});

        numberImportance = createEmptyLabel(this);


@@ 36,7 36,7 @@ namespace gui

        timestamp = createEmptyLabel(this);
        timestamp->setFont(style::window::font::small);
        timestamp->setEllipsis(Ellipsis::Right);
        timestamp->setTextEllipsisType(TextEllipsis::Right);
        timestamp->setAlignment(gui::Alignment{gui::Alignment::Horizontal::Right, gui::Alignment::Vertical::Center});

        snippetPrefix = createEmptyLabel(this);


@@ 45,7 45,7 @@ namespace gui

        snippet = createEmptyLabel(this);
        snippet->setFont(style::window::font::medium);
        snippet->setEllipsis(Ellipsis::Right);
        snippet->setTextEllipsisType(TextEllipsis::Right);
        snippet->setAlignment(gui::Alignment{gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center});
    }



@@ 69,9 69,8 @@ namespace gui
        const auto isNumberImportanceSet = !numberImportance->getText().empty();
        if (isNumberImportanceSet) {
            contact->setSize(contact->getWidth() - msgStyle::numberImportanceWidth, Axis::X);
            numberImportance->setPosition(msgStyle::leftMargin + contact->getTextWidth() +
                                              msgStyle::numberImportanceLeftMargin,
                                          msgStyle::topMargin);
            numberImportance->setPosition(
                msgStyle::leftMargin + contact->getWidth() + msgStyle::numberImportanceLeftMargin, msgStyle::topMargin);
            numberImportance->setSize(msgStyle::numberImportanceWidth, newDim.h / 2 - msgStyle::topMargin);
        }



@@ 93,7 92,7 @@ namespace gui
            snippetPrefix->setPosition(leftMargin, dimensions.h / 2);
            snippetPrefix->setSize(snippetPrefix->getTextNeedSpace(), dimensions.h / 2 - msgStyle::bottomMargin);

            const auto prefixSpace = snippetPrefix->getTextWidth() + msgStyle::snippetLeftMargin;
            const auto prefixSpace = snippetPrefix->getWidth() + msgStyle::snippetLeftMargin;
            snippet->setPosition(leftMargin + prefixSpace, dimensions.h / 2);
            snippet->setSize(dimensions.w - msgStyle::previewWidthOffset - prefixSpace - leftOffset,
                             dimensions.h / 2 - msgStyle::bottomMargin);

M module-apps/application-messages/widgets/SMSTemplateItem.cpp => module-apps/application-messages/widgets/SMSTemplateItem.cpp +2 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "SMSTemplateItem.hpp"


@@ 16,7 16,7 @@ namespace gui

        text = new gui::Label(this, 0, 0, 0, 0);
        style::window::decorateOption(text);
        text->setEllipsis(gui::Ellipsis::Right);
        text->setTextEllipsisType(gui::TextEllipsis::Right);

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

M module-apps/application-messages/windows/SMSTemplatesWindow.hpp => module-apps/application-messages/windows/SMSTemplatesWindow.hpp +2 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 7,7 7,7 @@
#include "SMSTemplateModel.hpp"

#include <AppWindow.hpp>
#include <gui/widgets/Label.hpp>
#include <gui/widgets/text/Label.hpp>
#include <gui/widgets/ListView.hpp>

#include <functional>

M module-apps/application-music-player/widgets/SongItem.cpp => module-apps/application-music-player/widgets/SongItem.cpp +2 -2
@@ 1,8 1,8 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "module-apps/application-music-player/widgets/SongItem.hpp"
#include <gui/widgets/Label.hpp>
#include <gui/widgets/text/Label.hpp>
#include <i18n/i18n.hpp>

namespace gui

M module-apps/application-music-player/windows/MusicPlayerMainWindow.cpp => module-apps/application-music-player/windows/MusicPlayerMainWindow.cpp +3 -3
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "MusicPlayerMainWindow.hpp"


@@ 474,11 474,11 @@ namespace gui
            std::string trackDescription;
            if (!isPaused && !isPlaying) {
                trackDescription = utils::translate("app_music_player_empty_track_notification");
                descriptionText->setTextColor(gui::ColorGrey);
                descriptionText->setColor(gui::ColorGrey);
            }
            else {
                trackDescription = currentTitle + " - " + currentArtist;
                descriptionText->setTextColor(gui::ColorFullBlack);
                descriptionText->setColor(gui::ColorFullBlack);
            }
            descriptionText->setText(trackDescription);
        }

M module-apps/application-notes/widgets/NotesItem.hpp => module-apps/application-notes/widgets/NotesItem.hpp +2 -2
@@ 1,9 1,9 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include <module-gui/gui/widgets/Label.hpp>
#include <module-gui/gui/widgets/text/Label.hpp>
#include <module-gui/gui/widgets/ListItem.hpp>
#include <module-gui/gui/widgets/text/TextFixedSize.hpp>


M module-apps/application-notes/windows/NoteEditWindow.hpp => module-apps/application-notes/windows/NoteEditWindow.hpp +2 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 9,7 9,7 @@

#include <module-db/Interface/NotesRecord.hpp>

#include "gui/widgets/Label.hpp"
#include "gui/widgets/text/Label.hpp"
#include "gui/widgets/text/Text.hpp"
#include "gui/input/InputEvent.hpp"


M module-apps/application-notes/windows/NotePreviewWindow.hpp => module-apps/application-notes/windows/NotePreviewWindow.hpp +2 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 8,7 8,7 @@
#include <module-db/Interface/NotesRecord.hpp>
#include <module-apps/application-notes/presenter/NotePreviewWindowPresenter.hpp>

#include <module-gui/gui/widgets/Label.hpp>
#include <module-gui/gui/widgets/text/Label.hpp>
#include <module-gui/gui/widgets/text/TextFixedSize.hpp>
#include <module-gui/gui/input/InputEvent.hpp>


M module-apps/application-onboarding/windows/ConfigurationSuccessfulDialogWindow.hpp => module-apps/application-onboarding/windows/ConfigurationSuccessfulDialogWindow.hpp +2 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 7,7 7,7 @@

#include <module-apps/application-onboarding/presenter/EULALicenseWindowPresenter.hpp>

#include <module-gui/gui/widgets/Label.hpp>
#include <module-gui/gui/widgets/text/Label.hpp>
#include <module-gui/gui/widgets/text/Text.hpp>
#include <module-gui/gui/input/InputEvent.hpp>


M module-apps/application-onboarding/windows/EULALicenseWindow.hpp => module-apps/application-onboarding/windows/EULALicenseWindow.hpp +2 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 7,7 7,7 @@

#include <module-apps/application-onboarding/presenter/EULALicenseWindowPresenter.hpp>

#include <module-gui/gui/widgets/Label.hpp>
#include <module-gui/gui/widgets/text/Label.hpp>
#include <module-gui/gui/widgets/text/Text.hpp>
#include <module-gui/gui/input/InputEvent.hpp>


M module-apps/application-onboarding/windows/NoConfigurationDialogWindow.hpp => module-apps/application-onboarding/windows/NoConfigurationDialogWindow.hpp +2 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 7,7 7,7 @@

#include <module-apps/application-onboarding/presenter/EULALicenseWindowPresenter.hpp>

#include <module-gui/gui/widgets/Label.hpp>
#include <module-gui/gui/widgets/text/Label.hpp>
#include <module-gui/gui/widgets/text/Text.hpp>
#include <module-gui/gui/input/InputEvent.hpp>


M module-apps/application-phonebook/widgets/ContactFlagIconWidget.cpp => module-apps/application-phonebook/widgets/ContactFlagIconWidget.cpp +6 -3
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// 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"


@@ 54,11 54,13 @@ namespace gui
    {
        setEdges(RectangleEdge::None);

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



@@ 72,6 74,7 @@ namespace gui
            mainBox->addWidget(icon);
        }
        mainBox->addWidget(label);
        mainBox->resizeItems();
    }

} // namespace gui

M module-apps/application-phonebook/widgets/ContactFlagsStyle.hpp => module-apps/application-phonebook/widgets/ContactFlagsStyle.hpp +1 -2
@@ 14,8 14,7 @@ namespace style
            const uint32_t iconsSize   = 35;
            const uint32_t height      = 74;
            const uint32_t itemWidth   = 125;
            const uint32_t itemHeight  = 55;
            const uint32_t labelHeight = 20;
            const uint32_t itemHeight  = 64;
        } // namespace ContactFlag
    }     // namespace widget
} // namespace style

M module-apps/application-phonebook/widgets/InformationWidget.cpp => module-apps/application-phonebook/widgets/InformationWidget.cpp +4 -5
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "InformationWidget.hpp"


@@ 23,14 23,13 @@ namespace gui
        vBox = new VBox(this, 0, 0, 0, 0);
        vBox->setEdges(RectangleEdge::None);

        titleLabel = new Label(vBox, 0, 0, 0, 0, utils::translate("app_phonebook_contact_information"));
        titleLabel = new TextWithSnippet(vBox, style::window::font::verysmall);
        titleLabel->setMinimumSize(phonebookStyle::informationWidget::w,
                                   phonebookStyle::informationWidget::title_label_h);
        titleLabel->setEdges(RectangleEdge::None);
        titleLabel->setMargins(Margins(0, 0, 0, style::margins::very_big));
        titleLabel->setAlignment(Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Top));
        titleLabel->setFont(style::window::font::verysmall);
        titleLabel->setLineMode(true);
        titleLabel->setAlignment(Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center));
        titleLabel->textWidget->setText(utils::translate("app_phonebook_contact_information"));
        titleLabel->activeItem = false;

        onLoadCallback = [=](std::shared_ptr<ContactRecord> contact) {

M module-apps/application-phonebook/widgets/InformationWidget.hpp => module-apps/application-phonebook/widgets/InformationWidget.hpp +4 -3
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 7,6 7,7 @@
#include "application-phonebook/data/PhonebookItemData.hpp"
#include "application-phonebook/widgets/ContactListItem.hpp"

#include <apps-common/widgets/TextWithIconsWidget.hpp>
#include <ListItem.hpp>
#include <Text.hpp>



@@ 18,9 19,9 @@ namespace gui
    {
      public:
        InformationWidget(app::ApplicationCommon *app);
        ~InformationWidget() override = default;
        ~InformationWidget() override            = default;
        VBox *vBox                               = nullptr;
        Label *titleLabel                        = nullptr;
        TextWithSnippet *titleLabel              = nullptr;
        TextWithIconsWidget *primaryNumberHBox   = nullptr;
        TextWithIconsWidget *secondaryNumberHBox = nullptr;
        Text *emailText                          = nullptr;

M module-apps/application-phonebook/widgets/InputLinesWithLabelWidget.cpp => module-apps/application-phonebook/widgets/InputLinesWithLabelWidget.cpp +2 -2
@@ 249,7 249,7 @@ namespace gui
    void InputLinesWithLabelWidget::addressHandler()
    {
        titleLabel->setText(utils::translate("app_phonebook_new_contact_address"));
        inputText->setTextType(TextType::SingleLine);
        inputText->setTextType(TextType::MultiLine);
        inputText->setTextLimitType(TextLimitType::MaxSignsCount,
                                    phonebookStyle::inputLinesWithLabelWidget::max_signs_limit);



@@ 259,7 259,7 @@ namespace gui
    void InputLinesWithLabelWidget::noteHandler()
    {
        titleLabel->setText(utils::translate("app_phonebook_new_contact_note"));
        inputText->setTextType(TextType::SingleLine);
        inputText->setTextType(TextType::MultiLine);
        inputText->setTextLimitType(TextLimitType::MaxSignsCount,
                                    phonebookStyle::inputLinesWithLabelWidget::max_signs_limit);


M module-apps/application-phonebook/widgets/OutputLinesTextWithLabelWidget.cpp => module-apps/application-phonebook/widgets/OutputLinesTextWithLabelWidget.cpp +4 -6
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "OutputLinesTextWithLabelWidget.hpp"


@@ 21,13 21,11 @@ namespace gui
        vBox = new VBox(this, 0, 0, 0, 0);
        vBox->setEdges(RectangleEdge::None);

        titleLabel = new Label(vBox);
        titleLabel = new TextWithSnippet(vBox, style::window::font::verysmall);
        titleLabel->setMinimumSize(phonebookStyle::outputLinesTextWithLabelWidget::w,
                                   phonebookStyle::outputLinesTextWithLabelWidget::title_label_h);
        titleLabel->setEdges(RectangleEdge::None);
        titleLabel->setAlignment(Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center));
        titleLabel->setFont(style::window::font::verysmall);
        titleLabel->setLineMode(true);
        titleLabel->activeItem = false;

        multilineText = new Text(vBox, 0, 0, 0, 0);


@@ 74,14 72,14 @@ namespace gui

    void OutputLinesTextWithLabelWidget::addressHandler()
    {
        titleLabel->setText(utils::translate("app_phonebook_new_contact_address"));
        titleLabel->textWidget->setText(utils::translate("app_phonebook_new_contact_address"));

        onLoadCallback = [&](std::shared_ptr<ContactRecord> contact) { multilineText->setText(contact->address); };
    }

    void OutputLinesTextWithLabelWidget::noteHandler()
    {
        titleLabel->setText(utils::translate("app_phonebook_new_contact_note"));
        titleLabel->textWidget->setText(utils::translate("app_phonebook_new_contact_note"));

        onLoadCallback = [&](std::shared_ptr<ContactRecord> contact) { multilineText->setText(contact->note); };
    }

M module-apps/application-phonebook/widgets/OutputLinesTextWithLabelWidget.hpp => module-apps/application-phonebook/widgets/OutputLinesTextWithLabelWidget.hpp +3 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 7,6 7,7 @@
#include "application-phonebook/data/PhonebookItemData.hpp"
#include "application-phonebook/widgets/ContactListItem.hpp"

#include <apps-common/widgets/TextWithIconsWidget.hpp>
#include <ListItem.hpp>
#include <Text.hpp>



@@ 21,7 22,7 @@ namespace gui

        ~OutputLinesTextWithLabelWidget() override = default;
        VBox *vBox                                 = nullptr;
        Label *titleLabel                          = nullptr;
        TextWithSnippet *titleLabel                = nullptr;
        Text *multilineText                        = nullptr;

        auto handleRequestResize(const Item *, Length request_w, Length request_h) -> Size override;

M module-apps/application-phonebook/widgets/PhonebookItem.cpp => module-apps/application-phonebook/widgets/PhonebookItem.cpp +24 -11
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "PhonebookItem.hpp"


@@ 46,17 46,9 @@ namespace gui
        markBlocked(contact->isOnBlocked());
    }

    void PhonebookItem::setMarkerItem(UTF8 text)
    {
        contactName->setText(text);
        contactName->setLineMode(true);
        activeItem = false;
        setEdges(RectangleEdge::None);
    }

    UTF8 PhonebookItem::getLabelMarker()
    {
        if (favourite && (labeMarkerDisplayMode == LabelMarkerDisplayMode::IncludeFavourites)) {
        if (favourite && (labelMarkerDisplayMode == LabelMarkerDisplayMode::IncludeFavourites)) {
            // If contact is favorite return proper UTF string
            return utils::translate("app_phonebook_favourite_contacts_title");
        }


@@ 86,7 78,28 @@ namespace gui

    void PhonebookItem::setLabelMarkerDisplayMode(LabelMarkerDisplayMode mode)
    {
        labeMarkerDisplayMode = mode;
        labelMarkerDisplayMode = mode;
    }

    PhonebookMarkItem::PhonebookMarkItem(const UTF8 &markText)
    {
        setMargins(Margins(0, style::margins::big, 0, 0));
        setMinimumSize(phonebookStyle::contactItem::w, phonebookStyle::contactItem::h);

        setEdges(RectangleEdge::None);
        activeItem = false;

        markLabel = new TextWithSnippet(this, style::window::font::small);
        markLabel->setPadding(Padding(style::padding::default_left_text_padding, 0, 0, 0));
        markLabel->setAlignment(gui::Alignment{gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center});
        markLabel->setMinimumHeight(phonebookStyle::contactItem::h);
        markLabel->setMaximumWidth(phonebookStyle::contactItem::w);
        markLabel->textWidget->setText(markText);

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

M module-apps/application-phonebook/widgets/PhonebookItem.hpp => module-apps/application-phonebook/widgets/PhonebookItem.hpp +12 -3
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 9,6 9,7 @@
#include "ListItem.hpp"
#include <BoxLayout.hpp>
#include <TextFixedSize.hpp>
#include <apps-common/widgets/TextWithIconsWidget.hpp>

namespace gui
{


@@ 21,7 22,7 @@ namespace gui
        bool favourite = false;
        void markFavourite(bool val);
        void markBlocked(bool val);
        LabelMarkerDisplayMode labeMarkerDisplayMode = LabelMarkerDisplayMode::IncludeFavourites;
        LabelMarkerDisplayMode labelMarkerDisplayMode = LabelMarkerDisplayMode::IncludeFavourites;

      public:
        std::shared_ptr<ContactRecord> contact = nullptr;


@@ 31,10 32,18 @@ namespace gui

        // sets copy of contact
        void setContact(std::shared_ptr<ContactRecord> note);
        void setMarkerItem(UTF8 text);
        UTF8 getLabelMarker();

        void setLabelMarkerDisplayMode(LabelMarkerDisplayMode mode);
    };

    class PhonebookMarkItem : public ListItem
    {
      private:
        TextWithSnippet *markLabel = nullptr;

      public:
        explicit PhonebookMarkItem(const UTF8 &markText);
    };

} /* namespace gui */

M module-apps/application-phonebook/widgets/PhonebookListView.cpp => module-apps/application-phonebook/widgets/PhonebookListView.cpp +5 -18
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "PhonebookListView.hpp"


@@ 17,11 17,7 @@ namespace gui
            if (!(labelMark == (item)->getLabelMarker())) {

                labelMark = (item)->getLabelMarker();

                gui::PhonebookItem *phonebookLabel = new gui::PhonebookItem();
                phonebookLabel->setMarkerItem(labelMark);

                body->addWidget(phonebookLabel);
                body->addWidget(new PhonebookMarkItem(labelMark));
            }
        }
        if (direction == listview::Direction::Top) {


@@ 35,11 31,8 @@ namespace gui
                previousLabelMark = labelMark;
                labelMark         = (item)->getLabelMarker();

                gui::PhonebookItem *phonebookLabel = new gui::PhonebookItem();
                phonebookLabel->setMarkerItem(previousLabelMark);

                body->removeWidget(item);
                body->addWidget(phonebookLabel);
                body->addWidget(new PhonebookMarkItem(labelMark));
                body->addWidget(item);

                previousItemIsLabel = true;


@@ 79,11 72,7 @@ namespace gui
                        body->erase(item);
                        body->erase(previousListItem);

                        gui::PhonebookItem *phonebookLabel = new gui::PhonebookItem();

                        phonebookLabel->setMarkerItem(labelMark);

                        body->addWidget(phonebookLabel);
                        body->addWidget(new PhonebookMarkItem(labelMark));
                        currentPageSize--;
                    }
                }


@@ 105,9 94,7 @@ namespace gui

        // Add element on top for first page purpose
        if (startIndex == 0 && direction == listview::Direction::Top) {
            auto *phonebookLabel = new gui::PhonebookItem();
            phonebookLabel->setMarkerItem(labelMark);
            body->addWidget(phonebookLabel);
            body->addWidget(new PhonebookMarkItem(labelMark));
        }
    }


M module-apps/application-phonebook/widgets/PhonebookListView.hpp => module-apps/application-phonebook/widgets/PhonebookListView.hpp +1 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 14,7 14,6 @@ namespace gui

    class PhonebookListView : public ListView
    {

        UTF8 labelMark           = "";
        UTF8 previousLabelMark   = "";
        bool previousItemIsLabel = false;

M module-apps/application-settings/widgets/advanced/ColorTestListItem.cpp => module-apps/application-settings/widgets/advanced/ColorTestListItem.cpp +3 -3
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "ColorTestListItem.hpp"


@@ 25,10 25,10 @@ namespace gui
        colorLabel->setText(std::to_string(color.intensity) + " ");

        if (color.intensity > ColorGrey.intensity) {
            colorLabel->setTextColor(ColorFullBlack);
            colorLabel->setColor(ColorFullBlack);
        }
        else {
            colorLabel->setTextColor(ColorFullWhite);
            colorLabel->setColor(ColorFullWhite);
        }

        dimensionChangedCallback = [&](gui::Item &, const BoundingBox &newDim) -> bool {

M module-apps/application-special-input/windows/SpecialInputMainWindow.hpp => module-apps/application-special-input/windows/SpecialInputMainWindow.hpp +2 -2
@@ 1,11 1,11 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include "SpecialInputModel.hpp"
#include <gui/widgets/Image.hpp>
#include <gui/widgets/Label.hpp>
#include <gui/widgets/text/Label.hpp>
#include <gui/widgets/Window.hpp>
#include <AppWindow.hpp>
#include <GridLayout.hpp>

M module-apps/apps-common/widgets/AlarmSetSpinner.cpp => module-apps/apps-common/widgets/AlarmSetSpinner.cpp +2 -2
@@ 1,10 1,10 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "AlarmSetSpinner.hpp"
#include <FontManager.hpp>
#include <RawFont.hpp>
#include <gui/widgets/Label.hpp>
#include <gui/widgets/text/Label.hpp>
#include <gui/widgets/ImageBox.hpp>
#include <apps-common/widgets/TimeSetFmtSpinner.hpp>


M module-apps/apps-common/widgets/ButtonOnOff.cpp => module-apps/apps-common/widgets/ButtonOnOff.cpp +18 -10
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "ButtonOnOff.hpp"


@@ 11,14 11,22 @@ namespace gui
    ButtonOnOff::ButtonOnOff(Item *parent, const ButtonState buttonState) : Label{parent}
    {
        setMinimumSize(style::buttonOnOff::w, style::buttonOnOff::h);
        setEdges(RectangleEdge::None);

        setEdges(RectangleEdge::All);
        setCorners(RectangleRoundedCorner::All);
        setRadius(4);
        setPenWidth(2);
        setFilled(true);
        setAlignment(Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center));
        setFont(style::window::font::small);

        fill = new Rect(this, 0, 0, 0, 0);
        fill->setEdges(RectangleEdge::All);
        fill->setCorners(RectangleRoundedCorner::All);
        fill->setRadius(4);
        fill->setPenWidth(2);

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

        switchState(buttonState);
    }



@@ 26,14 34,14 @@ namespace gui
    {
        currentState = newButtonState;
        if (currentState == ButtonState::On) {
            setFillColor(ColorFullBlack);
            fill->setFillColor(ColorFullBlack);
            setColor(ColorFullWhite);
            setText(utils::translate("app_settings_toggle_on"));
            setTextColor(ColorFullWhite);
        }
        else if (currentState == ButtonState::Off) {
            setFillColor(ColorFullWhite);
            fill->setFillColor(ColorFullWhite);
            setColor(ColorFullBlack);
            setText(utils::translate("app_settings_toggle_off"));
            setTextColor(ColorFullBlack);
        }
    }
    void ButtonOnOff::toggleState()

M module-apps/apps-common/widgets/ButtonOnOff.hpp => module-apps/apps-common/widgets/ButtonOnOff.hpp +2 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 30,6 30,7 @@ namespace gui
        void toggleState();

      private:
        Rect *fill = nullptr;
        ButtonState currentState;
    };


M module-apps/apps-common/widgets/InputBox.cpp => module-apps/apps-common/widgets/InputBox.cpp +39 -58
@@ 1,87 1,68 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "InputBox.hpp"

#include <BoxLayout.hpp>
#include <Label.hpp>
#include <Image.hpp>
#include <ImageBox.hpp>

namespace gui
{
    constexpr uint32_t default_x = style::window::default_left_margin;
    constexpr uint32_t default_w =
        style::window_width - style::window::default_left_margin - style::window::default_right_margin;
    namespace inputHeader
    namespace input_Box
    {
        constexpr uint32_t x = style::window::default_left_margin;
        constexpr uint32_t y = 127;
        constexpr uint32_t w = default_w;
        constexpr uint32_t h = 20;
    } // namespace inputHeader
        constexpr auto label_h = 30;
        constexpr auto text_h  = 33;
        constexpr auto h_box_h = text_h + 3;
        constexpr auto h       = label_h + style::margins::big + h_box_h;
    } // namespace input_Box

    namespace horizontalBox
    {
        constexpr uint32_t x        = style::window::default_left_margin;
        constexpr uint32_t y        = 153;
        constexpr uint32_t w        = default_w;
        constexpr uint32_t h        = 34;
        constexpr uint32_t penWidth = 2;
        namespace searchTop
        {
            constexpr uint32_t x = default_w;
            constexpr uint32_t y = 1;
            constexpr uint32_t w = 32;
            constexpr uint32_t h = 32;
        } // namespace searchTop
        namespace inputField
        {
            constexpr uint32_t x = 1;
            constexpr uint32_t y = 1;
            constexpr uint32_t w = default_w - searchTop::w;
            constexpr uint32_t h = 33;
        } // namespace inputField
    }     // namespace horizontalBox
} // namespace gui

namespace gui
{

    auto inputBox(gui::Item *parent, const std::string &header, const std::string &icon) -> gui::Text *
    {
        auto inputField = new Text(nullptr,
                                   horizontalBox::inputField::x,
                                   horizontalBox::inputField::y,
                                   horizontalBox::inputField::w,
                                   horizontalBox::inputField::h);
        auto verticalBox = new VBox(parent,
                                    style::window::default_left_margin,
                                    style::window::default_vertical_pos,
                                    style::window::default_body_width,
                                    input_Box::h);
        verticalBox->setEdges(RectangleEdge::None);

        auto l = new Label(verticalBox);
        l->setMinimumHeight(input_Box::label_h);
        l->setMaximumWidth(style::window::default_body_width);
        l->setFont(style::window::font::small);
        l->setEdges(RectangleEdge::None);
        l->setText(header);
        l->setAlignment(Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Bottom));

        auto horizontalBox = new HBox(verticalBox);
        horizontalBox->setAlignment({gui::Alignment::Vertical::Top});
        horizontalBox->setMargins({0, style::margins::big, 0, 0});
        horizontalBox->setMinimumHeight(input_Box::h_box_h);
        horizontalBox->setMinimumWidth(style::window::default_body_width);
        horizontalBox->setPenWidth(style::window::default_border_rect_no_focus);
        horizontalBox->setEdges(RectangleEdge::Bottom);

        auto inputField = new TextFixedSize(horizontalBox);
        inputField->drawUnderline(false);
        inputField->setMinimumHeight(input_Box::text_h);
        inputField->setMaximumWidth(style::window::default_body_width);
        inputField->setTextType(TextType::SingleLine);
        inputField->setTextEllipsisType(TextEllipsis::Both);
        inputField->setEditMode(EditMode::Edit);
        inputField->setEdges(RectangleEdge::None);
        inputField->setInputMode(new InputMode({InputMode::ABC, InputMode::abc}));
        inputField->setFont(style::window::font::mediumbold);

        auto horizontalBox = new HBox(parent, horizontalBox::x, horizontalBox::y, horizontalBox::w, horizontalBox::h);
        horizontalBox->addWidget(inputField);
        if (!icon.empty()) {
            horizontalBox->addWidget(new Image(nullptr,
                                               horizontalBox::searchTop::x,
                                               horizontalBox::searchTop::y,
                                               horizontalBox::searchTop::w,
                                               horizontalBox::searchTop::h,
                                               icon));
            auto imageBox = new ImageBox(horizontalBox, new Image(icon));
            imageBox->setMinimumSizeToFitImage();
        }

        horizontalBox->setPenWidth(horizontalBox::penWidth);
        horizontalBox->setEdges(RectangleEdge::Bottom);

        const RectangleEdge edges = RectangleEdge::None;
        const Alignment alignment = Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Bottom);
        auto l                    = new Label(parent, inputHeader::x, inputHeader::y, inputHeader::w, inputHeader::h);

        l->setFont(style::window::font::small);
        l->setEdges(edges);
        l->setText(header);
        l->setAlignment(alignment);
        verticalBox->resizeItems();

        return inputField;
    }

M module-apps/apps-common/widgets/InputBox.hpp => module-apps/apps-common/widgets/InputBox.hpp +2 -2
@@ 1,9 1,9 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include <Text.hpp>
#include <TextFixedSize.hpp>

namespace gui
{

M module-apps/apps-common/widgets/ModesBox.hpp => module-apps/apps-common/widgets/ModesBox.hpp +2 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once


@@ 15,7 15,7 @@ namespace sys::phone_modes
namespace style::window::modes
{
    constexpr inline auto top_offset        = 182;
    constexpr inline auto bottom_offset     = 235;
    constexpr inline auto bottom_offset     = 210;
    constexpr inline auto height            = style::window_height - top_offset - bottom_offset;
    constexpr inline auto width             = style::window_width;
    constexpr inline auto number_of_entries = 4;

M module-apps/apps-common/widgets/TextWithIconsWidget.cpp => module-apps/apps-common/widgets/TextWithIconsWidget.cpp +9 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "TextWithIconsWidget.hpp"


@@ 63,5 63,12 @@ TextWithSnippet::TextWithSnippet(const std::string &text, const UTF8 &font, cons
    setAlignment(Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center));

    addWidget(createSnippet(snippet));
    addWidget(createText(text, font));
    textWidget = createText(text, font);
    addWidget(textWidget);
}

TextWithSnippet::TextWithSnippet(Item *parent, const UTF8 &font, const UTF8 &snippet)
    : TextWithSnippet("", font, snippet)
{
    parent->addWidget(this);
}

M module-apps/apps-common/widgets/TextWithIconsWidget.hpp => module-apps/apps-common/widgets/TextWithIconsWidget.hpp +7 -1
@@ 1,10 1,12 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include <BoxLayout.hpp>
#include <ImageBox.hpp>
#include <TextFixedSize.hpp>

namespace app
{
    class ApplicationCommon;


@@ 28,10 30,14 @@ namespace gui

    class TextWithSnippet : public HBox
    {
      private:
        constexpr static auto defaultSnippet = "label_rectangle_W_M";

      public:
        TextWithSnippet(Item *parent, const UTF8 &font, const UTF8 &snippet = defaultSnippet);
        TextWithSnippet(const std::string &text, const UTF8 &font, const UTF8 &snippet = defaultSnippet);

        TextFixedSize *textWidget = nullptr;
    };

} /* namespace gui */

M module-apps/apps-common/widgets/TimeSetSpinner.cpp => module-apps/apps-common/widgets/TimeSetSpinner.cpp +1 -1
@@ 6,7 6,7 @@
#include <FontManager.hpp>
#include <RawFont.hpp>
#include <gui/widgets/ImageBox.hpp>
#include <gui/widgets/Label.hpp>
#include <gui/widgets/text/Label.hpp>

static constexpr auto hourMin         = 0;
static constexpr auto hourMax         = 23;

D module-gui/gui/core/Ellipsis.hpp => module-gui/gui/core/Ellipsis.hpp +0 -16
@@ 1,16 0,0 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

/// ellipsis setting for core/Font & Text types to use
namespace gui
{
    enum class Ellipsis
    {
        Left,
        // Center, - not implemented
        Right,
        None
    };
}; // namespace gui

M module-gui/gui/core/RawFont.cpp => module-gui/gui/core/RawFont.cpp +1 -51
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "RawFont.hpp"


@@ 211,56 211,6 @@ namespace gui
        return glyph->height;
    }

    UTF8 RawFont::getTextWithElipsis(const UTF8 &text, uint32_t width, Ellipsis ellipsis) const
    {
        std::string result;
        auto w_dot        = getCharPixelWidth('.');
        auto text_fit_len = getCharCountInSpace(text, width);
        if (width < w_dot) // none will fit
        {
            return result;
        }
        if (text_fit_len == text.length()) // all will fit
        {
            return text;
        }
        if (ellipsis != Ellipsis::None) {
            auto char_offset = 0;
            if (ellipsis == Ellipsis::Left) {
                char_offset = text.length() - text_fit_len;
            }
            result = text.substr(char_offset, text_fit_len);
            setEllipsis(result, ellipsis);
        }
        else {
            result = text.substr(0, text_fit_len);
        }
        return result;
    }

    void RawFont::setEllipsis(std::string &text, Ellipsis ellipsis) const
    {
        auto set_dot = [&](auto begin, auto end) {
            auto dots_in_elipsis = 3;
            for (auto el = begin; el != end; ++el) {
                *el = '.';
                if (--dots_in_elipsis == 0) {
                    break;
                }
            }
        };
        switch (ellipsis) {
        case Ellipsis::Right:
            set_dot(text.rbegin(), text.rend());
            break;
        case Ellipsis::Left:
            set_dot(text.begin(), text.end());
            break;
        case Ellipsis::None:
            break;
        }
    }

    void RawFont::createGlyphUnsupported()
    {
        unsupported                                    = std::make_unique<FontGlyph>();

M module-gui/gui/core/RawFont.hpp => module-gui/gui/core/RawFont.hpp +1 -18
@@ 1,10 1,9 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include "../Common.hpp"
#include "Ellipsis.hpp"
#include "FontInfo.hpp"
#include "utf8/UTF8.hpp"
#include <cstdint>


@@ 90,14 89,6 @@ namespace gui
        {
            return info.face;
        }

        /// get elipsis text in selected width from input text
        /// this essentially means:
        /// return test with "..." if needed in text begin / end if needed
        UTF8 getTextWithElipsis(const UTF8 &text, uint32_t width, Ellipsis ellipsis) const;
        /**
         * @brief Sets a font used as a glyphs collection of a "second chance"
         */
        void setFallbackFont(RawFont *font);

      private:


@@ 108,14 99,6 @@ namespace gui
        /// the glyph used when requested glyph is unsupported in the font (and the fallback font if one is set)
        std::unique_ptr<FontGlyph> unsupported = nullptr;

        /// set ellipsis on text in first parameter
        /// @note our UTF8 doesn't provide way to replace single character
        ///
        /// this is lazy done implementation - we just try to replace first/last 3 characters that would fit
        void setEllipsis(std::string &text, Ellipsis ellipsis) const;
        /**
         * @brief creates the glyph to be used in case of a requested glyph could not be found in a font
         */
        void createGlyphUnsupported();

        /// return glyph for selected code

M module-gui/gui/widgets/CMakeLists.txt => module-gui/gui/widgets/CMakeLists.txt +0 -2
@@ 11,7 11,6 @@ target_sources( ${PROJECT_NAME}
        "${CMAKE_CURRENT_LIST_DIR}/ImageBox.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/ImageBoxWithText.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/Item.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/Label.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/ListItem.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/ListItemWithDescription.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/ListView.cpp"


@@ 57,7 56,6 @@ target_sources( ${PROJECT_NAME}
        "${CMAKE_CURRENT_LIST_DIR}/ImageBox.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/ImageBoxWithText.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/Item.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/Label.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/ListItem.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/ListItemWithDescription.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/ListItemProvider.hpp"

D module-gui/gui/widgets/Label.cpp => module-gui/gui/widgets/Label.cpp +0 -300
@@ 1,300 0,0 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include <log/log.hpp>
#include "utf8/UTF8.hpp"

#include "../core/DrawCommand.hpp"

#include "Label.hpp"
#include <Style.hpp>
#include <cassert>
#include "TextConstants.hpp"
#include <FontManager.hpp>
#include <RawFont.hpp>

namespace gui
{

    Label::Label()
        : Rect(), text{""}, textDisplayed{""}, charDrawableCount{0}, stringPixelWidth{0}, textColor{0, 0}, font{nullptr}
    {
        setFont(style::window::font::medium);
    }

    Label::Label(
        Item *parent, const uint32_t &x, const uint32_t &y, const uint32_t &w, const uint32_t &h, const UTF8 &newText)
        : Rect{parent, x, y, w, h},
          text(newText), textDisplayed{""}, charDrawableCount{0}, stringPixelWidth{0}, textColor{0, 0}
    {
        setFont(style::window::font::medium);
    }

    Label::Label(Item *parent, meta::Label label) : Label(parent, label.x, label.y, label.w, label.h, label.text)
    {
        setPenFocusWidth(style::window::default_border_no_focus_w);
        setPenWidth(style::window::default_border_no_focus_w);
        setFont(label.font);
        setEllipsis(Ellipsis::Right);
        setAlignment(label.align);
        setRadius(label.radius);
        setEdges(label.edges);
    }

    void Label::calculateDisplayText()
    {
        uint32_t availableSpace = widgetArea.w;
        if (font == nullptr) {
            LOG_ERROR("No font loaded!");
            return;
        }
        charDrawableCount = font->getCharCountInSpace(text, availableSpace);
        textArea.w        = font->getPixelWidth(text.substr(0, charDrawableCount));
        textDisplayed     = text;
        /// do not try to draw text::newline in label
        if (text.length() > 0 && text[text.length() - 1] == text::newline) {
            textDisplayed.removeChar(textDisplayed.length() - 1);
        }
        textDisplayed    = font->getTextWithElipsis(textDisplayed, availableSpace, ellipsis);
        stringPixelWidth = font->getPixelWidth(textDisplayed, 0, textDisplayed.length());
        textArea.h       = font->info.line_height;

        // calculate vertical position of text

        switch (alignment.vertical) {
        case (Alignment::Vertical::Center):
            textArea.y = widgetArea.h > font->info.line_height
                             ? (widgetArea.h - font->info.line_height) / 2 + font->info.base
                             : font->info.base;
            break;
        case Alignment::Vertical::Top:
            textArea.y = font->info.base + padding.top;
            break;
        case Alignment::Vertical::Bottom:
            textArea.y = widgetArea.h - font->info.line_height + font->info.base - padding.bottom;
            break;
        default:
            break;
        }

        switch (alignment.horizontal) {
        case (Alignment::Horizontal::Center):
            textArea.x = (widgetArea.w - textArea.w) / 2;
            break;
        case Alignment::Horizontal::Left:
            textArea.x = padding.left;
            break;
        case Alignment::Horizontal::Right:
            textArea.x = widgetArea.w - textArea.w - padding.right;
            break;
        default:
            break;
        }

        // if dots mode is disabled and line mode is enabled calculate positiona and width of the line
        if ((ellipsis != Ellipsis::None) && (lineMode) && (lineFront != nullptr)) {
            uint32_t spaceWidth = font->getCharPixelWidth(' ');
            int32_t lineW       = availableSpace - stringPixelWidth;
            uint32_t lineY      = textArea.y - font->getCharPixelHeight('a') / 2;
            if (lineW < 0)
                lineW = 0;

            lineFront->setVisible(true);
            lineBack->setVisible(true);
            // both lines are visible

            switch (alignment.horizontal) {
            case (Alignment::Horizontal::Center):
                lineFront->setPosition(0, lineY);
                lineFront->setSize(lineW / 2 - spaceWidth, 2);
                lineBack->setPosition(lineW / 2 + stringPixelWidth + spaceWidth, lineY);
                lineBack->setSize(lineW / 2 - spaceWidth, 2);
                break;
            case Alignment::Horizontal::Right:
                lineFront->setPosition(0, lineY);
                lineFront->setSize(lineW - spaceWidth - padding.right, 2);
                lineBack->setVisible(false);
                break;
            case Alignment::Horizontal::Left:
                lineBack->setPosition(stringPixelWidth + spaceWidth + padding.left, lineY);
                lineBack->setSize(lineW - spaceWidth - padding.left, 2);
                lineFront->setVisible(false);
                break;
            default:
                break;
            }
        }
    }

    void Label::setText(const UTF8 &text)
    {
        this->text = text;
        auto fits  = textFitsIn(text, area(Area::Normal).w);
        if (!fits) {
            fitTextIn(text);
        }
        calculateDisplayText();
    }

    Label::Fits Label::textFitsIn(const UTF8 &text, uint32_t width)
    {
        Fits fits;
        if (font == nullptr) {
            fits.fits = false;
        }
        else {
            auto cnt            = font->getCharCountInSpace(text, area(Area::Max).w);
            fits.fits           = cnt == text.length();
            fits.space_consumed = font->getPixelWidth(text);
        }
        return fits;
    }

    void Label::fitTextIn(const UTF8 &text)
    {
        Fits fits = textFitsIn(text, area(Item::Area::Max).w);
        if (fits) {
            setSize(fits.space_consumed, getHeight());
        }
        else {
            setSize(area(Item::Area::Max).w, getHeight());
        }
    }

    void Label::clear()
    {
        this->text = UTF8("");
        calculateDisplayText();
    }

    const UTF8 &Label::getText() const noexcept
    {
        return text;
    }

    unsigned int Label::getTextLength() const noexcept
    {
        return text.length();
    }

    void Label::setAlignment(const Alignment &value)
    {
        this->alignment = value;
        calculateDisplayText();
    }

    void Label::setPadding(const Padding &padding)
    {
        this->padding = padding;
        calculateDisplayText();
    }

    void Label::setEllipsis(Ellipsis ellipsis)
    {
        this->ellipsis = ellipsis;
        calculateDisplayText();
    }

    void Label::setLineMode(const bool &val)
    {
        // if line mode is disable remove the line if it was previously created
        if (val == false) {
            if (lineFront != nullptr) {
                this->removeWidget(lineFront);
                this->removeWidget(lineBack);
                delete lineFront;
                delete lineBack;
                lineFront = nullptr;
                lineBack  = nullptr;
            }
        }
        else {
            if (lineFront == nullptr) {
                lineFront = new Rect(this, 0, 0, 0, 0);
                lineBack  = new Rect(this, 0, 0, 0, 0);
            }
        }
        calculateDisplayText();
    }

    void Label::buildDrawListImplementation(std::list<Command> &commands)
    {
        Rect::buildDrawListImplementation(commands);
        if (font != nullptr) {
            auto cmd    = std::make_unique<DrawText>();
            cmd->str    = textDisplayed;
            cmd->fontID = font->id;
            cmd->color  = textColor;

            cmd->origin     = {drawArea.x, drawArea.y};
            cmd->width      = drawArea.w;
            cmd->height     = drawArea.h;
            cmd->textOrigin = {textArea.x, textArea.y};
            cmd->textHeight = textArea.h;

            cmd->areaX = widgetArea.x;
            cmd->areaY = widgetArea.y;
            cmd->areaW = widgetArea.w;
            cmd->areaH = widgetArea.h;

            commands.emplace_back(std::move(cmd));
        }
    }

    bool Label::onDimensionChanged(const BoundingBox &oldDim, const BoundingBox &newDim)
    {
        calculateDisplayText();
        return true;
    }

    void Label::setFont(const UTF8 &fontName)
    {
        RawFont *newFont = FontManager::getInstance().getFont(fontName);
        setFont(newFont);
    }

    void Label::setFont(RawFont *font)
    {
        this->font = font;
        if (font != nullptr) {
            calculateDisplayText();
        }
    }

    RawFont *Label::getFont() const noexcept
    {
        return font;
    }

    void Label::setTextColor(Color color)
    {
        textColor = color;
    }

    uint32_t Label::getTextNeedSpace(const UTF8 &_text) const noexcept
    {
        if (font == nullptr) {
            return 0;
        }

        return _text.empty() ? font->getPixelWidth(text) : font->getPixelWidth(_text);
    }

    uint32_t Label::getTextHeight() const noexcept
    {
        if (font == nullptr) {
            return 0;
        }
        return font->info.line_height;
    }

    uint32_t Label::getTextWidth() const noexcept
    {
        return textArea.w;
    }

    void Label::accept(GuiVisitor &visitor)
    {
        visitor.visit(*this);
    }
} /* namespace gui */

D module-gui/gui/widgets/Label.hpp => module-gui/gui/widgets/Label.hpp +0 -138
@@ 1,138 0,0 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include <string>
#include <list>

#include "../core/BoundingBox.hpp"
#include "../core/Color.hpp"
#include "../core/DrawCommand.hpp"
#include "../Common.hpp"
#include "Margins.hpp"
#include "Alignment.hpp"
#include "Rect.hpp"

#include "Style.hpp"
#include "utf8/UTF8.hpp"
#include <Ellipsis.hpp>

namespace gui
{

    class RawFont;

    namespace meta
    {
        struct Meta
        {};

        struct Item : public Meta
        {
            uint32_t radius = 0;
        };

        struct Rect : public Item
        {
            Rect &operator()(std::array<uint32_t, 4> xywh)
            {
                x = xywh[0], y = xywh[1], w = xywh[2], h = xywh[3];
                return *this;
            }
            uint32_t x = 0, y = 0, w = 0, h = 0;
            std::string font    = style::window::font::medium;
            Alignment align     = Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center);
            RectangleEdge edges = gui::RectangleEdge::Top | gui::RectangleEdge::Bottom;
        };

        struct Label : public Rect
        {
            const UTF8 text;
            Label(std::array<uint32_t, 4> xywh)
            {
                operator()(xywh);
            }
        };
    }; // namespace meta

    class Label : public Rect
    {
      protected:
        UTF8 text;
        UTF8 textDisplayed;
        Ellipsis ellipsis          = gui::Ellipsis::Right;
        uint32_t charDrawableCount = 0;
        uint32_t stringPixelWidth  = 0;
        Color textColor            = {0, 0};
        RawFont *font              = nullptr;
        bool lineMode              = true; // TODO PLZ REMOVE - this was working by accident (in Phonebook)

        // area specified in pixels occupied by text inside label space.
        // This defines also position of the text considering alignment and margins.
        BoundingBox textArea;
        // widgets to add line
        Rect *lineFront = nullptr;
        Rect *lineBack  = nullptr;
        void calculateDisplayText();

      private:
        /// helper class storing 2 information from c function with bad interface:
        /// 1. whether text will fit in size
        /// 2. how much provided size will be in use
        struct Fits
        {
            bool fits               = false; /// whether element fits in or not
            uint32_t space_consumed = 0;     /// size needed to render text
            Fits(bool fits = false, uint32_t space_consumed = 0) : fits(fits), space_consumed(space_consumed)
            {}
            operator bool()
            {
                return fits;
            }
        };
        /// check if text will fit in Label
        Fits textFitsIn(const UTF8 &text, uint32_t width);
        /// resize widget width ( 0 <= size needed to render text <= max width )
        /// @note it doesn't call calculateDisplay text which should probably be in resize callback (onDimensionChanged)
        void fitTextIn(const UTF8 &text);

      public:
        Label();
        Label(Item *parent,
              const uint32_t &x = 0,
              const uint32_t &y = 0,
              const uint32_t &w = 0,
              const uint32_t &h = 0,
              const UTF8 &text  = UTF8{});
        Label(Item *parent, meta::Label label);

        // Label's specific methods
        virtual void setText(const UTF8 &text);
        virtual void clear();
        virtual const UTF8 &getText() const noexcept;
        virtual unsigned int getTextLength() const noexcept;
        void setAlignment(const Alignment &value) override;
        void setPadding(const Padding &padding) override;
        void setEllipsis(gui::Ellipsis ellipsis);
        /**
         * @brief Defines if remaining area of the label has a horizontal line.
         */
        void setLineMode(const bool &val);
        void setTextColor(Color color);

        void setFont(const UTF8 &fontName);
        void setFont(RawFont *font);
        RawFont *getFont() const noexcept;
        // virtual methods
        void buildDrawListImplementation(std::list<Command> &commands) override;
        uint32_t getTextNeedSpace(const UTF8 &text = "") const noexcept;
        /// line: height
        uint32_t getTextHeight() const noexcept;
        uint32_t getTextWidth() const noexcept;

        bool onDimensionChanged(const BoundingBox &oldDim, const BoundingBox &newDim) override;
        void accept(GuiVisitor &visitor) override;
    };

} /* namespace gui */

M module-gui/gui/widgets/NavBar.cpp => module-gui/gui/widgets/NavBar.cpp +4 -4
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "NavBar.hpp"


@@ 44,7 44,7 @@ namespace gui::nav_bar
        left->setPadding({0, 0, 0, style::nav_bar::bottom_padding});
        left->setMinimumHeight(widgetArea.h);
        left->setFont(style::nav_bar::font::medium);
        left->setEllipsis(Ellipsis::Right);
        left->setTextEllipsisType(TextEllipsis::Right);
        left->setVisible(true);
        left->setEdges(RectangleEdge::None);



@@ 54,7 54,7 @@ namespace gui::nav_bar
        center->setMinimumHeight(widgetArea.h);
        center->setMaximumWidth(widgetArea.w);
        center->setFont(style::nav_bar::font::bold);
        center->setEllipsis(Ellipsis::Right);
        center->setTextEllipsisType(TextEllipsis::Right);
        center->setVisible(true);
        center->setEdges(RectangleEdge::None);



@@ 63,7 63,7 @@ namespace gui::nav_bar
        right->setPadding({0, 0, 0, style::nav_bar::bottom_padding});
        right->setMinimumHeight(widgetArea.h);
        right->setFont(style::nav_bar::font::medium);
        right->setEllipsis(Ellipsis::Right);
        right->setTextEllipsisType(TextEllipsis::Right);
        right->setVisible(true);
        right->setEdges(RectangleEdge::None);
    }

M module-gui/gui/widgets/header/Header.cpp => module-gui/gui/widgets/header/Header.cpp +2 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "Header.hpp"


@@ 39,7 39,7 @@ namespace gui::header
        title->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Top));
        title->setPadding(gui::Padding(0, style::header::title::top_padding, 0, 0));
        title->setEdges(RectangleEdge::None);
        title->setEllipsis(Ellipsis::Right);
        title->setTextEllipsisType(TextEllipsis::Right);
        title->setVisible(true);
        title->setText(text);
        return title;

M module-gui/gui/widgets/status-bar/PhoneMode.cpp => module-gui/gui/widgets/status-bar/PhoneMode.cpp +2 -1
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "PhoneMode.hpp"


@@ 16,6 16,7 @@ namespace gui::status_bar
    {
        setEdges(RectangleEdge::None);
        setFont(style::status_bar::nat::font);
        setTextEllipsisType(TextEllipsis::Right);
        setAlignment(gui::Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center));
    }


M module-gui/gui/widgets/text/CMakeLists.txt => module-gui/gui/widgets/text/CMakeLists.txt +1 -0
@@ 15,6 15,7 @@ target_sources( ${PROJECT_NAME}
        "${CMAKE_CURRENT_LIST_DIR}/modes/InputMode.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/parsers/RichTextParser.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/parsers/TextParse.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/Label.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/Text.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TextBubble.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TextFixedSize.cpp"

A module-gui/gui/widgets/text/Label.cpp => module-gui/gui/widgets/text/Label.cpp +26 -0
@@ 0,0 1,26 @@
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "Label.hpp"

namespace gui
{
    Label::Label(Item *parent, Position x, Position y, Length w, Length h, const UTF8 &inputText)
        : TextFixedSize(parent, x, y, w, h)
    {
        setEditMode(EditMode::Browse);
        setCursorStartPosition(CursorStartPosition::DocumentBegin);
        setTextType(TextType::SingleLine);
        drawUnderline(false);
        setPenFocusWidth(style::window::default_border_rect_no_focus);
        setPenWidth(style::window::default_border_rect_no_focus);

        setText(inputText);
    }

    uint32_t Label::getTextNeedSpace(const UTF8 &inputText) const noexcept
    {
        return inputText.empty() ? format.getFont()->getPixelWidth(getText())
                                 : format.getFont()->getPixelWidth(inputText);
    }
} /* namespace gui */

A module-gui/gui/widgets/text/Label.hpp => module-gui/gui/widgets/text/Label.hpp +24 -0
@@ 0,0 1,24 @@
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#pragma once

#include "TextFixedSize.hpp"

namespace gui
{
    class Label : public TextFixedSize
    {
      private:
      public:
        explicit Label(Item *parent,
                       Position x            = 0U,
                       Position y            = 0U,
                       Length w              = 0U,
                       Length h              = 0U,
                       const UTF8 &inputText = UTF8{});

        uint32_t getTextNeedSpace(const UTF8 &text = "") const noexcept;
    };

} /* namespace gui */

M module-gui/gui/widgets/text/Text.cpp => module-gui/gui/widgets/text/Text.cpp +8 -3
@@ 230,7 230,7 @@ namespace gui
                                 ? text::RichTextParser().parse(text, &format)->getText()
                                 : text;

            setMinimumWidth(format.getFont()->getPixelWidth(textToFit) + TextCursor::defaultWidth);
            setMinimumWidth(format.getFont()->getPixelWidth(textToFit) + getCursorDrawSpace());
        }
    }



@@ 387,7 387,7 @@ namespace gui
        debug_text("--> START drawLines: {%" PRIu32 ", %" PRIu32 "}", w, h);

        lines->draw(drawCursor,
                    getSizeMinusPadding(Axis::X, Area::Max) - TextCursor::defaultWidth,
                    getSizeMinusPadding(Axis::X, Area::Max) - getCursorDrawSpace(),
                    getSizeMinusPadding(Axis::Y, Area::Max),
                    padding.top,
                    padding.left,


@@ 415,7 415,7 @@ namespace gui
                if (format.getFont() != nullptr &&
                    padding.top + lines->linesHeight() < format.getFont()->info.line_height) {
                    hUsed = format.getFont()->info.line_height;
                    wUsed = TextCursor::defaultWidth;
                    wUsed = getCursorDrawSpace();
                    debug_text("empty line height: %d", hUsed);
                }
            }


@@ 499,6 499,11 @@ namespace gui
        cursor->setVisible(focus && isMode(EditMode::Edit));
    }

    unsigned int Text::getCursorDrawSpace()
    {
        return editMode == EditMode::Edit ? TextCursor::defaultWidth : 0;
    }

    auto Text::handleRotateInputMode(const InputEvent &inputEvent) -> bool
    {
        if (mode != nullptr && inputEvent.isShortRelease(gui::KeyCode::KEY_AST)) {

M module-gui/gui/widgets/text/Text.hpp => module-gui/gui/widgets/text/Text.hpp +1 -0
@@ 65,6 65,7 @@ namespace gui

        /// show cursor if cursor should be visible
        void showCursor(bool focus);
        unsigned int getCursorDrawSpace();

      public:
        ExpandMode expandMode    = ExpandMode::None;

M module-gui/gui/widgets/text/TextFixedSize.cpp => module-gui/gui/widgets/text/TextFixedSize.cpp +2 -2
@@ 1,5 1,5 @@

// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "TextFixedSize.hpp"


@@ 54,7 54,7 @@ namespace gui
            cursor->getDocument(), startDrawBlockPosition, startDrawBlockNumber, getTextFormat().getFont());

        lines->draw(drawCursor,
                    getSizeMinusPadding(Axis::X, Area::Normal) - TextCursor::defaultWidth,
                    getSizeMinusPadding(Axis::X, Area::Normal) - getCursorDrawSpace(),
                    getSizeMinusPadding(Axis::Y, Area::Normal),
                    padding.top,
                    padding.left,

M module-gui/test/test-catch/test-gui-callbacks.cpp => module-gui/test/test-catch/test-gui-callbacks.cpp +4 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include <catch2/catch.hpp>


@@ 39,7 39,8 @@ TEST_CASE("gui::Item on input flow test")
    }
}

#include <module-gui/gui/widgets/Label.hpp>
#include <module-gui/gui/widgets/text/Label.hpp>
#include "mock/InitializedFontManager.hpp"

TEST_CASE("gui::Window on input flow test")
{


@@ 65,6 66,7 @@ TEST_CASE("gui::Window on input flow test")
        REQUIRE(success == false);
    }

    mockup::fontManager();
    auto l1 = new gui::Label(&win, 0, 0, 0, 0, "Test 1");
    auto l2 = new gui::Label(&win, 0, 0, 0, 0, "Test 2");


M module-gui/test/test-catch/test-gui.cpp => module-gui/test/test-catch/test-gui.cpp +7 -6
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

/// These are random tests what could be salvaged from old tests


@@ 22,7 22,7 @@

#include <module-gui/gui/core/ImageManager.hpp>
#include <module-gui/gui/core/BoundingBox.hpp>
#include <module-gui/gui/widgets/Label.hpp>
#include <module-gui/gui/widgets/text/Label.hpp>
#include <module-gui/gui/widgets/BoxLayout.hpp>
#include <module-gui/gui/widgets/Image.hpp>



@@ 81,7 81,7 @@ TEST_CASE("Draw window with labels")
    label = new gui::Label(win, 20, 480, 440, 120, "BOTTOM RIGHT");
    label->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Right, gui::Alignment::Vertical::Bottom));
    label->setRadius(15);
    label->setEllipsis(gui::Ellipsis::Right);
    label->setTextEllipsisType(gui::TextEllipsis::Right);
    label->setFont("gt_pressura_bold_65");

    // vector with draw commands


@@ 93,6 93,7 @@ TEST_CASE("Draw window with labels")

TEST_CASE("Draw window with box layouts")
{
    mockup::fontManager();
    auto win_unique = make_unique<gui::TestWindow>("MAIN"); // make root gui element used unique to auto clean it
    auto win        = win_unique.get();                     // get pointer to root element for ctros sake
    win->setSize(480, 600);


@@ 104,9 105,9 @@ TEST_CASE("Draw window with box layouts")
    maxW1->setFilled(true);
    maxW1->setMaximumSize(50, 300);

    gui::Label *maxW4 = new gui::Label();
    gui::Label *maxW4 = new gui::Label(nullptr);
    maxW4->setText("Top Left corner");
    maxW4->setEllipsis(gui::Ellipsis::Right);
    maxW4->setTextEllipsisType(gui::TextEllipsis::Right);
    maxW4->setMaximumSize(275, 60);

    gui::Rect *maxW2 = new gui::Rect();


@@ 134,7 135,7 @@ TEST_CASE("Draw window with box layouts")
    gui::Rect *maxH3 = new gui::Rect();
    maxH3->setMaximumSize(30, 300);

    gui::Label *maxH4 = new gui::Label();
    gui::Label *maxH4 = new gui::Label(nullptr);
    maxH4->setText("Hello Mudita");
    maxH4->setRadius(20);
    maxH4->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center));

M products/BellHybrid/apps/application-bell-main/widgets/SnoozeTimer.cpp => products/BellHybrid/apps/application-bell-main/widgets/SnoozeTimer.cpp +2 -2
@@ 1,10 1,10 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "SnoozeTimer.hpp"
#include <FontManager.hpp>
#include <RawFont.hpp>
#include <gui/widgets/Label.hpp>
#include <gui/widgets/text/Label.hpp>
#include <gui/widgets/ImageBox.hpp>
#include <apps-common/widgets/TimeSetSpinner.hpp>


M products/BellHybrid/apps/application-bell-settings/widgets/TimeFormatSetListItem.cpp => products/BellHybrid/apps/application-bell-settings/widgets/TimeFormatSetListItem.cpp +2 -2
@@ 1,4 1,4 @@
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// Copyright (c) 2017-2022, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "TimeFormatSetListItem.hpp"


@@ 6,7 6,7 @@

#include <gui/core/FontManager.hpp>
#include <gui/core/RawFont.hpp>
#include <gui/widgets/Label.hpp>
#include <gui/widgets/text/Label.hpp>

#include <widgets/TimeSetFmtSpinner.hpp>