From 3cbfe43a95610ad53a00a32bbfc3bf842013966f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Zieli=C5=84ski?= Date: Fri, 4 Nov 2022 09:21:10 +0100 Subject: [PATCH] [MOS-791] Introduce tri-state switch widget Refactored the code so that it's prepared for the new logic. --- .../widgets/AlarmItem.cpp | 4 +- .../widgets/AlarmItem.hpp | 4 +- module-apps/apps-common/CMakeLists.txt | 2 +- .../notifications/NotificationListItem.cpp | 4 +- .../notifications/NotificationListItem.hpp | 4 +- .../NotificationsListPresenter.cpp | 2 +- .../options/type/OptionSetting.cpp | 8 ++-- .../apps-common/widgets/ButtonOnOff.hpp | 37 ------------------- .../{ButtonOnOff.cpp => ButtonTriState.cpp} | 19 ++++------ .../apps-common/widgets/ButtonTriState.hpp | 36 ++++++++++++++++++ 10 files changed, 57 insertions(+), 63 deletions(-) delete mode 100644 module-apps/apps-common/widgets/ButtonOnOff.hpp rename module-apps/apps-common/widgets/{ButtonOnOff.cpp => ButtonTriState.cpp} (69%) create mode 100644 module-apps/apps-common/widgets/ButtonTriState.hpp diff --git a/module-apps/application-alarm-clock/widgets/AlarmItem.cpp b/module-apps/application-alarm-clock/widgets/AlarmItem.cpp index 79f6d712c199ee55de93aecf9d90c6415724cf0f..1adda32230d0353ee9621479997214005b4c729c 100644 --- a/module-apps/application-alarm-clock/widgets/AlarmItem.cpp +++ b/module-apps/application-alarm-clock/widgets/AlarmItem.cpp @@ -37,7 +37,7 @@ namespace gui periodLabel->setAlignment(gui::Alignment{gui::Alignment::Horizontal::Left, gui::Alignment::Vertical::Top}); periodLabel->setFont(style::window::font::small); - onOffImage = new gui::ButtonOnOff(hBox, ButtonState::On); + onOffImage = new gui::ButtonTriState(hBox, ButtonTriState::State::On); onOffImage->setMargins(gui::Margins(0, 0, style::widgets::rightMargin, 0)); setAlarm(); @@ -54,7 +54,7 @@ namespace gui getPresenter()->getAlarm()->alarmTime.minuteOfHour, utils::time::TimestampType::Time); timeLabel->setText(time); - onOffImage->switchState(getPresenter()->getAlarm()->enabled ? ButtonState::On : ButtonState::Off); + onOffImage->switchState(getPresenter()->getAlarm()->enabled ? ButtonTriState::State::On : ButtonTriState::State::Off); if (getPresenter()->hasRecurrence()) { periodLabel->setText(getPresenter()->getDescription()); diff --git a/module-apps/application-alarm-clock/widgets/AlarmItem.hpp b/module-apps/application-alarm-clock/widgets/AlarmItem.hpp index 9ad4a094cafca2d13c4ccf52bb768e73b9d0a5bc..4bed7bbd689f28f44dac9b6e62a5f6e695d6c941 100644 --- a/module-apps/application-alarm-clock/widgets/AlarmItem.hpp +++ b/module-apps/application-alarm-clock/widgets/AlarmItem.hpp @@ -5,7 +5,7 @@ #include "Application.hpp" #include -#include +#include #include #include #include @@ -17,7 +17,7 @@ namespace gui { gui::HBox *hBox = nullptr; gui::VBox *vBox = nullptr; - gui::ButtonOnOff *onOffImage = nullptr; + gui::ButtonTriState *onOffImage = nullptr; gui::Label *timeLabel = nullptr; gui::Label *periodLabel = nullptr; void setAlarm(); diff --git a/module-apps/apps-common/CMakeLists.txt b/module-apps/apps-common/CMakeLists.txt index 2803d9331dd772f4ecf5fc1a7af6884b55936487..e78f21a328c7f03ed471ea2d711e3bfc2b0c5637 100644 --- a/module-apps/apps-common/CMakeLists.txt +++ b/module-apps/apps-common/CMakeLists.txt @@ -42,7 +42,7 @@ target_sources(apps-common widgets/ActiveIconFactory.cpp widgets/BarGraph.cpp widgets/BrightnessBox.cpp - widgets/ButtonOnOff.cpp + widgets/ButtonTriState.cpp widgets/BellBaseLayout.cpp widgets/BellSideListItem.cpp widgets/ClockDateWidget.cpp diff --git a/module-apps/apps-common/notifications/NotificationListItem.cpp b/module-apps/apps-common/notifications/NotificationListItem.cpp index d12e5bbea6d3be03f4d9dc498b41f6a28e2d72c2..a4db8f3c260a4b140fc637171e1ad5a9eec4e75d 100644 --- a/module-apps/apps-common/notifications/NotificationListItem.cpp +++ b/module-apps/apps-common/notifications/NotificationListItem.cpp @@ -141,10 +141,10 @@ NotificationWithEventCounter::NotificationWithEventCounter(notifications::Notifi text->setMaximumSize(text->getSize(Axis::X), Axis::X); } -NotificationWithOnOffButton::NotificationWithOnOffButton(notifications::NotificationType type, gui::ButtonState state) +NotificationWithOnOffButton::NotificationWithOnOffButton(notifications::NotificationType type, gui::ButtonTriState::State state) : NotificationListItem(type) { - auto button = new ButtonOnOff(nullptr, state); + auto button = new ButtonTriState(nullptr, state); button->setMargins(Margins(0, 0, 20, 0)); box->addWidget(button); } diff --git a/module-apps/apps-common/notifications/NotificationListItem.hpp b/module-apps/apps-common/notifications/NotificationListItem.hpp index 993ed3646e1e43c3ab2ccdde07f027963f5fecd1..a80fb08b80dfb351a14467f591c213433ec90c2c 100644 --- a/module-apps/apps-common/notifications/NotificationListItem.hpp +++ b/module-apps/apps-common/notifications/NotificationListItem.hpp @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include "NotificationData.hpp" @@ -46,7 +46,7 @@ namespace gui { public: - NotificationWithOnOffButton(notifications::NotificationType type, gui::ButtonState state); + NotificationWithOnOffButton(notifications::NotificationType type, gui::ButtonTriState::State state); }; } // namespace gui diff --git a/module-apps/apps-common/notifications/NotificationsListPresenter.cpp b/module-apps/apps-common/notifications/NotificationsListPresenter.cpp index c36ab77f1cd65bf6d5880d8ba42e6165236cb302..887e2cfd5caacfec9d83c7368ecc628f94ecd46f 100644 --- a/module-apps/apps-common/notifications/NotificationsListPresenter.cpp +++ b/module-apps/apps-common/notifications/NotificationsListPresenter.cpp @@ -95,7 +95,7 @@ auto NotificationsListPresenter::create(const notifications::NotSeenCallNotifica auto NotificationsListPresenter::create(const notifications::TetheringNotification *notification) -> NotificationListItem * { - auto item = new NotificationWithOnOffButton(notifications::NotificationType::Tethering, gui::ButtonState::On); + auto item = new NotificationWithOnOffButton(notifications::NotificationType::Tethering, gui::ButtonTriState::State::On); item->setName(utils::translate("Tethering"), false); item->deleteByList = false; return item; diff --git a/module-apps/apps-common/options/type/OptionSetting.cpp b/module-apps/apps-common/options/type/OptionSetting.cpp index ee83f763f978addc6e20fd2c8361daf322c29725..2a98a45776f5ca792ade6ad6788d0aaa9178c400 100644 --- a/module-apps/apps-common/options/type/OptionSetting.cpp +++ b/module-apps/apps-common/options/type/OptionSetting.cpp @@ -3,7 +3,7 @@ #include #include "OptionSetting.hpp" -#include "widgets/ButtonOnOff.hpp" +#include "widgets/ButtonTriState.hpp" #include namespace gui::option @@ -35,7 +35,7 @@ namespace gui::option optionText->setRichText(text); std::string imageName; - ButtonOnOff *button = nullptr; + ButtonTriState *button = nullptr; switch (rightItem) { case SettingRightItem::ArrowBlack: @@ -45,10 +45,10 @@ namespace gui::option imageName = "arrow_right_empty_32px_W_G"; break; case SettingRightItem::On: - button = new ButtonOnOff(optionBodyHBox, ButtonState::On); + button = new ButtonTriState(optionBodyHBox, ButtonTriState::State::On); break; case SettingRightItem::Off: - button = new ButtonOnOff(optionBodyHBox, ButtonState::Off); + button = new ButtonTriState(optionBodyHBox, ButtonTriState::State::Off); break; case SettingRightItem::Bt: imageName = "bluetooth_32px_W_M"; diff --git a/module-apps/apps-common/widgets/ButtonOnOff.hpp b/module-apps/apps-common/widgets/ButtonOnOff.hpp deleted file mode 100644 index 11a21d8dbdc8c05da6367f1c90019f048d0176df..0000000000000000000000000000000000000000 --- a/module-apps/apps-common/widgets/ButtonOnOff.hpp +++ /dev/null @@ -1,37 +0,0 @@ -// 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 "Label.hpp" - -namespace style -{ - namespace buttonOnOff - { - constexpr uint32_t w = 56; - constexpr uint32_t h = 32; - } // namespace buttonOnOff -} // namespace style - -namespace gui -{ - enum class ButtonState : bool - { - Off, - On - }; - - class ButtonOnOff : public Label - { - public: - ButtonOnOff(Item *parent, const ButtonState buttonState); - void switchState(const ButtonState); - void toggleState(); - - private: - Rect *fill = nullptr; - ButtonState currentState; - }; - -} /* namespace gui */ diff --git a/module-apps/apps-common/widgets/ButtonOnOff.cpp b/module-apps/apps-common/widgets/ButtonTriState.cpp similarity index 69% rename from module-apps/apps-common/widgets/ButtonOnOff.cpp rename to module-apps/apps-common/widgets/ButtonTriState.cpp index a7c13a7544656671a2be897557ad3c09fa768e76..71cb7a70fbdee549d84068ad7ac74b2e984d43ec 100644 --- a/module-apps/apps-common/widgets/ButtonOnOff.cpp +++ b/module-apps/apps-common/widgets/ButtonTriState.cpp @@ -1,16 +1,16 @@ // 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" +#include "ButtonTriState.hpp" #include #include namespace gui { - ButtonOnOff::ButtonOnOff(Item *parent, const ButtonState buttonState) : Label{parent} + ButtonTriState::ButtonTriState(Item *parent, State state) : Label{parent} { - setMinimumSize(style::buttonOnOff::w, style::buttonOnOff::h); + setMinimumSize(style::buttonTriState::w, style::buttonTriState::h); setEdges(RectangleEdge::None); setAlignment(Alignment(gui::Alignment::Horizontal::Center, gui::Alignment::Vertical::Center)); @@ -27,13 +27,13 @@ namespace gui return true; }; - switchState(buttonState); + switchState(state); } - void ButtonOnOff::switchState(const ButtonState newButtonState) + void ButtonTriState::switchState(State requestedState) { - currentState = newButtonState; - if (currentState == ButtonState::On) { + currentState = requestedState; + if (currentState == State::On) { fill->setFillColor(ColorFullBlack); setColor(ColorFullWhite); setText(utils::translate("app_settings_toggle_on")); @@ -44,9 +44,4 @@ namespace gui setText(utils::translate("app_settings_toggle_off")); } } - void ButtonOnOff::toggleState() - { - switchState(static_cast(!static_cast(currentState))); - } - } /* namespace gui */ diff --git a/module-apps/apps-common/widgets/ButtonTriState.hpp b/module-apps/apps-common/widgets/ButtonTriState.hpp new file mode 100644 index 0000000000000000000000000000000000000000..9dd974e6d222ae70e874ed22bf67ac54a1d3af3d --- /dev/null +++ b/module-apps/apps-common/widgets/ButtonTriState.hpp @@ -0,0 +1,36 @@ +// 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 "Label.hpp" + +namespace style +{ + namespace buttonTriState + { + constexpr uint32_t w = 56; + constexpr uint32_t h = 32; + } +} + +namespace gui +{ + class ButtonTriState : public Label + { + public: + enum class State + { + Transiting, + Off, + On + }; + + ButtonTriState(Item *parent, State state); + void switchState(State requestedState); + + private: + Rect *fill = nullptr; + State currentState; + }; +}