~aleteoryx/muditaos

dbdcaf300351c016dd4577c5c22b1019adcc69f8 — Alek Rudnik 5 years ago 7326d4b
[EGD-5821] Add Network Access Technology widget

Created Network Access Technology widget.
M module-gui/gui/widgets/CMakeLists.txt => module-gui/gui/widgets/CMakeLists.txt +75 -74
@@ 1,79 1,80 @@
target_sources( ${PROJECT_NAME}

    PRIVATE
		"${CMAKE_CURRENT_LIST_DIR}/Alignment.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/Arc.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/BottomBar.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/CheckBox.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/Circle.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/Icon.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/Image.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/ImageBox.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/Item.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/Label.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/ListItem.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/ListView.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/Margins.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/Navigation.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/ProgressBar.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/Rect.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/Window.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/BoxLayout.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/BoxLayoutSizeStore.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TopBar.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TopBar/SIM.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TopBar/BatteryWidgetBase.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TopBar/BatteryWidgetBar.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TopBar/BatteryWidgetText.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TopBar/SignalStrengthWidgetBase.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TopBar/SignalStrengthWidgetBar.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TopBar/SignalStrengthWidgetText.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/Text.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TextBlock.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TextDocument.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TextCursor.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TextParse.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TextLine.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TextBlockCursor.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TextBubble.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TextFixedSize.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/Style.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/InputMode.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/GridLayout.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/Lines.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TextLineCursor.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/RichTextParser.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/TextFormat.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/CheckBoxWithLabel.cpp"
		"${CMAKE_CURRENT_LIST_DIR}/visitor/DepthFirstItemTree.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/Alignment.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/Arc.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/BottomBar.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/CheckBox.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/Circle.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/Icon.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/Image.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/ImageBox.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/Item.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/Label.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/ListItem.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/ListView.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/Margins.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/Navigation.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/ProgressBar.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/Rect.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/Window.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/BoxLayout.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/BoxLayoutSizeStore.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TopBar.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TopBar/SIM.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TopBar/BatteryWidgetBase.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TopBar/BatteryWidgetBar.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TopBar/BatteryWidgetText.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TopBar/SignalStrengthWidgetBase.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TopBar/SignalStrengthWidgetBar.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TopBar/SignalStrengthWidgetText.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TopBar/NetworkAccessTechnologyWidget.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/Text.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TextBlock.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TextDocument.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TextCursor.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TextParse.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TextLine.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TextBlockCursor.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TextBubble.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TextFixedSize.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/Style.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/InputMode.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/GridLayout.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/Lines.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TextLineCursor.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/RichTextParser.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/TextFormat.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/CheckBoxWithLabel.cpp"
        "${CMAKE_CURRENT_LIST_DIR}/visitor/DepthFirstItemTree.cpp"
    PUBLIC
		"${CMAKE_CURRENT_LIST_DIR}/Alignment.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/Arc.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/BottomBar.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/Circle.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/Image.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/ImageBox.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/TextFixedSize.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/Item.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/Label.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/ListItem.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/ListItemProvider.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/ListView.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/Margins.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/Navigation.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/ProgressBar.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/Rect.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/Window.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/BoxLayout.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/Layout.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/TopBar.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/Text.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/CheckBoxWithLabel.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/CheckBoxWithLabel.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/Lines.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/TextLineCursor.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/visitor/GuiVisitor.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/visitor/ItemNode.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/visitor/ItemTree.hpp"
		"${CMAKE_CURRENT_LIST_DIR}/visitor/DepthFirstItemTree.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/Alignment.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/Arc.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/BottomBar.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/Circle.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/Image.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/ImageBox.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/TextFixedSize.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/Item.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/Label.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/ListItem.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/ListItemProvider.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/ListView.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/Margins.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/Navigation.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/ProgressBar.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/Rect.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/Window.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/BoxLayout.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/Layout.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/TopBar.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/Text.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/CheckBoxWithLabel.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/CheckBoxWithLabel.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/Lines.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/TextLineCursor.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/visitor/GuiVisitor.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/visitor/ItemNode.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/visitor/ItemTree.hpp"
        "${CMAKE_CURRENT_LIST_DIR}/visitor/DepthFirstItemTree.hpp"
)

M module-gui/gui/widgets/TopBar.cpp => module-gui/gui/widgets/TopBar.cpp +25 -38
@@ 12,6 12,7 @@
#include "TopBar/BatteryWidgetText.hpp"
#include "TopBar/SignalStrengthWidgetBar.hpp"
#include "TopBar/SignalStrengthWidgetText.hpp"
#include "TopBar/NetworkAccessTechnologyWidget.hpp"
#include "common_data/EventStore.hpp"

namespace gui::top_bar


@@ 104,13 105,8 @@ namespace gui::top_bar
        timeLabel->setText("00:00");
        timeLabel->setAlignment(gui::Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center));

        networkAccessTechnologyLabel =
            new Label(this, networkTechnology::x, networkTechnology::y, networkTechnology::w, networkTechnology::h);
        networkAccessTechnologyLabel->setFilled(false);
        networkAccessTechnologyLabel->setBorderColor(gui::ColorNoColor);
        networkAccessTechnologyLabel->setFont(style::header::font::modes);
        networkAccessTechnologyLabel->setAlignment(
            gui::Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center));
        networkAccessTechnologyWidget = new NetworkAccessTechnologyWidget(
            this, networkTechnology::x, networkTechnology::y, networkTechnology::w, networkTechnology::h);
        updateNetworkAccessTechnology();
    }



@@ 137,7 133,12 @@ namespace gui::top_bar
    {
        switch (indicator) {
        case Indicator::Signal:
            updateSignalStrength();
            if (enabled) {
                signalWidget->show();
                updateSignalStrength();
                break;
            }
            signalWidget->hide();
            break;
        case Indicator::Time:
            timeLabel->setVisible(enabled);


@@ 152,20 153,30 @@ namespace gui::top_bar
            }
            break;
        case Indicator::Battery:
            batteryWidget->show(Store::Battery::get(), enabled);
            if (enabled) {
                batteryWidget->show();
                updateBattery();
                break;
            }
            batteryWidget->hide();
            break;
        case Indicator::SimCard:
            showSim(enabled);
            break;
        case Indicator::NetworkAccessTechnology:
            updateNetworkAccessTechnology();
            if (enabled) {
                networkAccessTechnologyWidget->show();
                updateNetworkAccessTechnology();
                break;
            }
            networkAccessTechnologyWidget->hide();
            break;
        }
    }

    bool TopBar::updateBattery()
    {
        batteryWidget->show(Store::Battery::get(), configuration.isEnabled(Indicator::Battery));
        batteryWidget->update(Store::Battery::get());
        return true;
    }



@@ 181,39 192,15 @@ namespace gui::top_bar
    bool TopBar::updateSignalStrength()
    {
        auto signalStrength = Store::GSM::get()->getSignalStrength();
        signalWidget->show(signalStrength, configuration.isEnabled(Indicator::Signal));
        signalWidget->update(signalStrength);

        return true;
    }

    bool TopBar::updateNetworkAccessTechnology()
    {
        if (configuration.isEnabled(Indicator::NetworkAccessTechnology)) {
            auto accessTechnology = Store::GSM::get()->getNetwork().accessTechnology;

            constexpr auto text2g  = "2G";
            constexpr auto text3g  = "3G";
            constexpr auto textLte = "LTE";

            switch (accessTechnology) {
            case Store::Network::AccessTechnology::Gsm:
            case Store::Network::AccessTechnology::GsmWEgprs:
                networkAccessTechnologyLabel->setText(text2g);
                break;
            case Store::Network::AccessTechnology::Utran:
            case Store::Network::AccessTechnology::UtranWHsdpa:
            case Store::Network::AccessTechnology::UtranWHsupa:
            case Store::Network::AccessTechnology::UtranWHsdpaAndWHsupa:
                networkAccessTechnologyLabel->setText(text3g);
                break;
            case Store::Network::AccessTechnology::EUtran:
                networkAccessTechnologyLabel->setText(textLte);
                break;
            case Store::Network::AccessTechnology::Unknown:
                networkAccessTechnologyLabel->setText("");
                break;
            }
        }
        auto accessTechnology = Store::GSM::get()->getNetwork().accessTechnology;
        networkAccessTechnologyWidget->update(accessTechnology);
        return true;
    }


M module-gui/gui/widgets/TopBar.hpp => module-gui/gui/widgets/TopBar.hpp +4 -3
@@ 16,6 16,7 @@ namespace gui
{
    class SignalStrengthWidgetBase;
    class BatteryWidgetBase;
    class NetworkAccessTechnologyWidget;
} // namespace gui
namespace gui::top_bar
{


@@ 79,9 80,9 @@ namespace gui::top_bar
        static uint32_t time;

      protected:
        Label *timeLabel                       = nullptr;
        Label *networkAccessTechnologyLabel    = nullptr;
        SignalStrengthWidgetBase *signalWidget = nullptr;
        Label *timeLabel                                             = nullptr;
        NetworkAccessTechnologyWidget *networkAccessTechnologyWidget = nullptr;
        SignalStrengthWidgetBase *signalWidget                       = nullptr;
        Image *lock;
        gui::SIM *sim                    = nullptr;
        BatteryWidgetBase *batteryWidget = nullptr;

M module-gui/gui/widgets/TopBar/BatteryWidgetBase.cpp => module-gui/gui/widgets/TopBar/BatteryWidgetBase.cpp +14 -20
@@ 7,31 7,25 @@
namespace gui
{
    BatteryWidgetBase::BatteryWidgetBase(Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h)
        : HBox(parent, x, y, w, h)
        : StatusBarWidgetBase(parent, x, y, w, h)
    {
        setBorderColor(gui::ColorNoColor);
    }

    void BatteryWidgetBase::show(const Store::Battery batteryContext, bool shown)
    void BatteryWidgetBase::update(const Store::Battery &batteryContext)
    {
        if (shown) {
            setVisible(true);
            switch (batteryContext.state) {
            case Store::Battery::State::Discharging:
                [[fallthrough]];
            case Store::Battery::State::PluggedNotCharging:
                showBatteryLevel(batteryContext.level);
                break;
            case Store::Battery::State::Charging:
                showBatteryCharging();
                break;
            case Store::Battery::State::ChargingDone:
                showBatteryChargingDone();
                break;
            }
        }
        else {
            setVisible(false);
        switch (batteryContext.state) {
        case Store::Battery::State::Discharging:
            [[fallthrough]];
        case Store::Battery::State::PluggedNotCharging:
            showBatteryLevel(batteryContext.level);
            break;
        case Store::Battery::State::Charging:
            showBatteryCharging();
            break;
        case Store::Battery::State::ChargingDone:
            showBatteryChargingDone();
            break;
        }
    }
} // namespace gui

M module-gui/gui/widgets/TopBar/BatteryWidgetBase.hpp => module-gui/gui/widgets/TopBar/BatteryWidgetBase.hpp +3 -2
@@ 3,6 3,7 @@

#pragma once

#include "StatusBarWidgetBase.hpp"
#include "BoxLayout.hpp"
#include <common_data/EventStore.hpp>



@@ 10,7 11,7 @@ namespace gui
{
    class HBox;

    class BatteryWidgetBase : public HBox
    class BatteryWidgetBase : public StatusBarWidgetBase<HBox>
    {
        virtual void showBatteryLevel(std::uint32_t percentage) = 0;
        virtual void showBatteryChargingDone()                  = 0;


@@ 18,6 19,6 @@ namespace gui

      public:
        BatteryWidgetBase(Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h);
        void show(const Store::Battery batteryContext, bool shown);
        void update(const Store::Battery &batteryContext);
    };
} // namespace gui

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

#include "NetworkAccessTechnologyWidget.hpp"
#include "Item.hpp"

namespace gui
{
    NetworkAccessTechnologyWidget::NetworkAccessTechnologyWidget(
        Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h)
        : StatusBarWidgetBase(parent, x, y, w, h)
    {
        setFilled(false);
        setBorderColor(gui::ColorNoColor);
        setFont(style::header::font::modes);
        setAlignment(gui::Alignment(gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Center));
    }

    void NetworkAccessTechnologyWidget::update(const Store::Network::AccessTechnology accessTechnology)
    {
        _accessTechnology      = accessTechnology;
        constexpr auto text2g  = "2G";
        constexpr auto text3g  = "3G";
        constexpr auto textLte = "LTE";

        switch (accessTechnology) {
        case Store::Network::AccessTechnology::Gsm:
        case Store::Network::AccessTechnology::GsmWEgprs:
            setText(text2g);
            break;
        case Store::Network::AccessTechnology::Utran:
        case Store::Network::AccessTechnology::UtranWHsdpa:
        case Store::Network::AccessTechnology::UtranWHsupa:
        case Store::Network::AccessTechnology::UtranWHsdpaAndWHsupa:
            setText(text3g);
            break;
        case Store::Network::AccessTechnology::EUtran:
            setText(textLte);
            break;
        case Store::Network::AccessTechnology::Unknown:
            setText("");
            break;
        }
    }
} // namespace gui

A module-gui/gui/widgets/TopBar/NetworkAccessTechnologyWidget.hpp => module-gui/gui/widgets/TopBar/NetworkAccessTechnologyWidget.hpp +20 -0
@@ 0,0 1,20 @@
// 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 "StatusBarWidgetBase.hpp"
#include <Label.hpp>
#include <common_data/EventStore.hpp>

namespace gui
{
    class NetworkAccessTechnologyWidget : public StatusBarWidgetBase<Label>
    {
        Store::Network::AccessTechnology _accessTechnology = Store::Network::AccessTechnology::Unknown;

      public:
        NetworkAccessTechnologyWidget(Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h);
        void update(Store::Network::AccessTechnology accessTechnology);
    };
} // namespace gui

M module-gui/gui/widgets/TopBar/SignalStrengthWidgetBar.cpp => module-gui/gui/widgets/TopBar/SignalStrengthWidgetBar.cpp +2 -6
@@ 34,13 34,9 @@ namespace gui
        img->setMargins(gui::Margins(signalBarMarginX, 0, 0, 0));
    }

    void SignalStrengthWidgetBar::show(const Store::SignalStrength data, bool shown)
    void SignalStrengthWidgetBar::update()
    {
        setVisible(shown);
        if (shown) {
            img->set(signalMap.at(data.rssiBar));
            return;
        }
        img->set(signalMap.at(signalStrength.rssiBar));
    }

} // namespace gui

M module-gui/gui/widgets/TopBar/SignalStrengthWidgetBar.hpp => module-gui/gui/widgets/TopBar/SignalStrengthWidgetBar.hpp +3 -2
@@ 13,9 13,10 @@ namespace gui
    {
        Image *img = nullptr;

      protected:
        void update() override;

      public:
        SignalStrengthWidgetBar(Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h);

        void show(const Store::SignalStrength data, bool shown) override;
    };
} // namespace gui

M module-gui/gui/widgets/TopBar/SignalStrengthWidgetBase.cpp => module-gui/gui/widgets/TopBar/SignalStrengthWidgetBase.cpp +7 -1
@@ 6,8 6,14 @@
namespace gui
{
    SignalStrengthWidgetBase::SignalStrengthWidgetBase(Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h)
        : HBox(parent, x, y, w, h)
        : StatusBarWidgetBase(parent, x, y, w, h)
    {
        setBorderColor(gui::ColorNoColor);
    }

    void SignalStrengthWidgetBase::update(const Store::SignalStrength &data)
    {
        signalStrength = data;
        update();
    }
} // namespace gui

M module-gui/gui/widgets/TopBar/SignalStrengthWidgetBase.hpp => module-gui/gui/widgets/TopBar/SignalStrengthWidgetBase.hpp +7 -2
@@ 3,15 3,20 @@

#pragma once

#include "StatusBarWidgetBase.hpp"
#include "BoxLayout.hpp"
#include <common_data/EventStore.hpp>

namespace gui
{
    class SignalStrengthWidgetBase : public HBox
    class SignalStrengthWidgetBase : public StatusBarWidgetBase<HBox>
    {
      protected:
        Store::SignalStrength signalStrength;
        virtual void update() = 0;

      public:
        SignalStrengthWidgetBase(Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h);
        virtual void show(const Store::SignalStrength data, bool shown) = 0;
        void update(const Store::SignalStrength &data);
    };
} // namespace gui

M module-gui/gui/widgets/TopBar/SignalStrengthWidgetText.cpp => module-gui/gui/widgets/TopBar/SignalStrengthWidgetText.cpp +2 -6
@@ 20,13 20,9 @@ namespace gui
        label->setMaximumSize(this->getWidth(), this->getHeight());
    }

    void SignalStrengthWidgetText::show(const Store::SignalStrength data, bool shown)
    void SignalStrengthWidgetText::update()
    {
        setVisible(shown);
        if (shown) {
            label->setText(utils::to_string(data.rssidBm) + " dBm");
            return;
        }
        label->setText(utils::to_string(signalStrength.rssidBm) + " dBm");
    }

} // namespace gui

M module-gui/gui/widgets/TopBar/SignalStrengthWidgetText.hpp => module-gui/gui/widgets/TopBar/SignalStrengthWidgetText.hpp +6 -5
@@ 10,12 10,13 @@ namespace gui
    class Label;
    class SignalStrengthWidgetText : public SignalStrengthWidgetBase
    {
      public:
        SignalStrengthWidgetText(Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h);

        void show(const Store::SignalStrength data, bool shown) override;

      private:
        Label *label = nullptr;

      protected:
        void update() override;

      public:
        SignalStrengthWidgetText(Item *parent, uint32_t x, uint32_t y, uint32_t w, uint32_t h);
    };
} // namespace gui

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

#pragma once

template <typename ItemPolicy> class StatusBarWidgetBase : public ItemPolicy
{
  public:
    using ItemPolicy::ItemPolicy;
    virtual ~StatusBarWidgetBase() = default;

    virtual void show()
    {
        ItemPolicy::setVisible(true);
    }

    virtual void hide()
    {
        ItemPolicy::setVisible(false);
    }

    virtual bool isVisible()
    {
        return ItemPolicy::visible;
    }
};