diff --git a/Platformio/OmoteUI/UIs/BasicRefactored/page/DisplaySettings.cpp b/Platformio/OmoteUI/UIs/BasicRefactored/page/DisplaySettings.cpp index 668abd4..4057410 100644 --- a/Platformio/OmoteUI/UIs/BasicRefactored/page/DisplaySettings.cpp +++ b/Platformio/OmoteUI/UIs/BasicRefactored/page/DisplaySettings.cpp @@ -1,22 +1,15 @@ -#include "BrightnessSlider.hpp" #include "DisplaySettings.hpp" +#include "BrightnessSlider.hpp" using namespace UI::Page; DisplaySettings::DisplaySettings(std::shared_ptr aDisplay) : Base(UI::ID::Pages::DisplaySettings), mDisplay(aDisplay), - mBrightnessSlider(AddElement(std::make_unique(mDisplay))) { + mBrightnessSlider(AddElement( + std::make_unique(mDisplay))) { SetBgColor(Color::GREY); mBrightnessSlider->SetWidth(GetContentWidth()); mBrightnessSlider->SetHeight(80); mBrightnessSlider->AlignTo(this, LV_ALIGN_TOP_MID); } - -void DisplaySettings::OnShow() { - -}; - -void DisplaySettings::OnHide(){ - -}; \ No newline at end of file diff --git a/Platformio/OmoteUI/UIs/BasicRefactored/page/DisplaySettings.hpp b/Platformio/OmoteUI/UIs/BasicRefactored/page/DisplaySettings.hpp index 4467292..1bd1215 100644 --- a/Platformio/OmoteUI/UIs/BasicRefactored/page/DisplaySettings.hpp +++ b/Platformio/OmoteUI/UIs/BasicRefactored/page/DisplaySettings.hpp @@ -11,9 +11,6 @@ class DisplaySettings : public Base { public: DisplaySettings(std::shared_ptr aDisplay); - void OnShow() override; - void OnHide() override; - std::string GetTitle() override { return "Display Settings"; }; private: diff --git a/Platformio/OmoteUI/UIs/BasicRefactored/screen/HomeScreen.hpp b/Platformio/OmoteUI/UIs/BasicRefactored/screen/HomeScreen.hpp index e4fab26..9104f7c 100644 --- a/Platformio/OmoteUI/UIs/BasicRefactored/screen/HomeScreen.hpp +++ b/Platformio/OmoteUI/UIs/BasicRefactored/screen/HomeScreen.hpp @@ -14,8 +14,6 @@ public: lv_style_selector_t selector = LV_PART_MAIN) override; protected: - void OnShow() override{}; - void OnHide() override{}; bool OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) override; private: diff --git a/Platformio/OmoteUI/UIs/BasicRefactored/widget/BrightnessSlider.cpp b/Platformio/OmoteUI/UIs/BasicRefactored/widget/BrightnessSlider.cpp index 01670ca..5c60c38 100644 --- a/Platformio/OmoteUI/UIs/BasicRefactored/widget/BrightnessSlider.cpp +++ b/Platformio/OmoteUI/UIs/BasicRefactored/widget/BrightnessSlider.cpp @@ -15,10 +15,12 @@ BrightnessSlider::BrightnessSlider(std::shared_ptr aDisplay) mLabel->AlignTo(this, LV_ALIGN_TOP_MID); mSlider->AlignTo(mLabel, LV_ALIGN_OUT_BOTTOM_MID); mSlider->SetWidth(GetContentWidth() - GetContentWidth() * 0.25f); + SetVisiblity(false); } void BrightnessSlider::OnShow() { mSlider->SetValue(mDisplay->getBrightness()); + Base::OnShow(); } void BrightnessSlider::SetHeight(lv_coord_t aHeight) { @@ -30,4 +32,14 @@ void BrightnessSlider::SetHeight(lv_coord_t aHeight) { mLabel->AlignTo(this, LV_ALIGN_TOP_MID); mSlider->AlignTo(mLabel, LV_ALIGN_OUT_BOTTOM_MID, 0, mLabel->GetContentHeight()); +} + +bool BrightnessSlider::OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) { + using ID = KeyPressAbstract::KeyId; + using Type = KeyPressAbstract::KeyEvent::Type; + if (aKeyEvent.mId == ID::Aux1 && aKeyEvent.mType == Type::Press) { + SetVisiblity(!IsSetVisible()); + return true; + } + return false; } \ No newline at end of file diff --git a/Platformio/OmoteUI/UIs/BasicRefactored/widget/BrightnessSlider.hpp b/Platformio/OmoteUI/UIs/BasicRefactored/widget/BrightnessSlider.hpp index 46e1af2..e7aa284 100644 --- a/Platformio/OmoteUI/UIs/BasicRefactored/widget/BrightnessSlider.hpp +++ b/Platformio/OmoteUI/UIs/BasicRefactored/widget/BrightnessSlider.hpp @@ -1,21 +1,25 @@ #pragma once -#include "WidgetBase.hpp" #include "DisplayAbstract.h" +#include "WidgetBase.hpp" -namespace UI::Widget{ +namespace UI::Widget { class Slider; class Label; -class BrightnessSlider : public Base{ +class BrightnessSlider : public Base { public: - BrightnessSlider(std::shared_ptr aDisplay); + BrightnessSlider(std::shared_ptr aDisplay); + + void SetHeight(lv_coord_t aHeight) override; + +protected: + void OnShow() override; + bool OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) override; - void OnShow() override; - void SetHeight(lv_coord_t aHeight) override; private: - std::shared_ptr mDisplay; - Slider* mSlider; - Label* mLabel; + std::shared_ptr mDisplay; + Slider *mSlider; + Label *mLabel; }; -} \ No newline at end of file +} // namespace UI::Widget \ No newline at end of file diff --git a/Platformio/OmoteUI/core/UIElement.cpp b/Platformio/OmoteUI/core/UIElement.cpp index ac8a5a5..7f965d0 100644 --- a/Platformio/OmoteUI/core/UIElement.cpp +++ b/Platformio/OmoteUI/core/UIElement.cpp @@ -62,6 +62,11 @@ bool UIElement::IsVisible() { return lv_obj_is_visible(mLvglSelf); } +bool UIElement::IsSetVisible() { + auto lock = LvglResourceManager::GetInstance().scopeLock(); + return !lv_obj_has_flag(mLvglSelf, LV_OBJ_FLAG_HIDDEN); +} + void UIElement::SetWidth(lv_coord_t aWidth) { LvglResourceManager::GetInstance().AttemptNow( [this, aWidth] { lv_obj_set_width(mLvglSelf, aWidth); }); @@ -227,7 +232,7 @@ void UIElement::AlignTo(UIElement *anElementToAlignTo, lv_align_t anAlignment, } void UIElement::SetVisiblity(bool aVisible) { - if (aVisible == IsVisible()) { + if (aVisible == !lv_obj_has_flag(mLvglSelf, LV_OBJ_FLAG_HIDDEN)) { return; } if (aVisible) { @@ -249,26 +254,27 @@ void UIElement::SetBgOpacity(lv_opa_t aOpacity, lv_style_selector_t aStyle) { }); } -void UIElement::StartLvglEventHandler(){ - if(mIsHandlingLvglEvents){ return; } +void UIElement::StartLvglEventHandler() { + if (mIsHandlingLvglEvents) { + return; + } lv_obj_add_event_cb(mLvglSelf, UIElement::LvglEventHandler, LV_EVENT_ALL, this); mIsHandlingLvglEvents = true; } -void UIElement::StopLvglEventHandler(){ - if(!mIsHandlingLvglEvents){return;} - lv_obj_remove_event_cb_with_user_data(mLvglSelf,UIElement::LvglEventHandler, +void UIElement::StopLvglEventHandler() { + if (!mIsHandlingLvglEvents) { + return; + } + lv_obj_remove_event_cb_with_user_data(mLvglSelf, UIElement::LvglEventHandler, this); mIsHandlingLvglEvents = false; } void UIElement::Show() { - if (IsVisible()) { + if (IsSetVisible()) { return; } - for (auto &elem : mContainedElements) { - elem->OnShow(); - } { auto lock = LvglResourceManager::GetInstance().scopeLock(); lv_obj_clear_flag(mLvglSelf, LV_OBJ_FLAG_HIDDEN); @@ -277,12 +283,9 @@ void UIElement::Show() { } void UIElement::Hide() { - if (!IsVisible()) { + if (!IsSetVisible()) { return; } - for (auto &elem : mContainedElements) { - elem->OnHide(); - } { auto lock = LvglResourceManager::GetInstance().scopeLock(); lv_obj_add_flag(mLvglSelf, LV_OBJ_FLAG_HIDDEN); @@ -290,6 +293,22 @@ void UIElement::Hide() { OnHide(); } +void UIElement::OnHide() { + for (auto &elem : mContainedElements) { + if (!IsSetVisible()) { + elem->OnHide(); + } + } +} + +void UIElement::OnShow() { + for (auto &elem : mContainedElements) { + if (!lv_obj_has_flag(mLvglSelf, LV_OBJ_FLAG_HIDDEN)) { + elem->OnShow(); + } + } +} + //////////////////// Statics ////////////////////////// void UIElement::LvglEventHandler(lv_event_t *anEvent) { diff --git a/Platformio/OmoteUI/core/UIElement.hpp b/Platformio/OmoteUI/core/UIElement.hpp index a464298..ef610b1 100644 --- a/Platformio/OmoteUI/core/UIElement.hpp +++ b/Platformio/OmoteUI/core/UIElement.hpp @@ -26,6 +26,7 @@ public: void SetVisiblity(bool aVisibility); bool IsVisible(); + bool IsSetVisible(); virtual void SetWidth(lv_coord_t aWidth); virtual void SetHeight(lv_coord_t aHeight); @@ -87,7 +88,6 @@ public: mLvglKeepAliveTime = aTimeToKeepLvglObj; } - void StartLvglEventHandler(); void StopLvglEventHandler(); @@ -101,9 +101,9 @@ protected: /// @brief Hide Element virtual void Hide(); /// @brief Override in child class to run something after element is shown - virtual void OnShow() = 0; + virtual void OnShow(); /// @brief Override in child class to run something after element is hidden - virtual void OnHide() = 0; + virtual void OnHide(); // Override in object to handle LVGL events for that object virtual void OnLvglEvent(lv_event_t *anEvent){}; diff --git a/Platformio/OmoteUI/core/screen/ScreenBase.hpp b/Platformio/OmoteUI/core/screen/ScreenBase.hpp index 0bea2f3..cb2809f 100644 --- a/Platformio/OmoteUI/core/screen/ScreenBase.hpp +++ b/Platformio/OmoteUI/core/screen/ScreenBase.hpp @@ -24,8 +24,6 @@ public: protected: void Show() override; - void OnShow() override{}; - void OnHide() override{}; bool OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) override; private: diff --git a/Platformio/OmoteUI/core/widget/List.cpp b/Platformio/OmoteUI/core/widget/List.cpp index c0d977f..9087324 100644 --- a/Platformio/OmoteUI/core/widget/List.cpp +++ b/Platformio/OmoteUI/core/widget/List.cpp @@ -3,30 +3,27 @@ using namespace UI; using namespace UI::Widget; -ListItem::ListItem(lv_obj_t *aListItem, std::function onItemSelected): - UIElement(aListItem,ID()), - mSelectedHandler(std::move(onItemSelected)){} +ListItem::ListItem(lv_obj_t *aListItem, std::function onItemSelected) + : UIElement(aListItem, ID()), mSelectedHandler(std::move(onItemSelected)) {} -void ListItem::OnLvglEvent(lv_event_t* anEvent){ - if(anEvent->code == LV_EVENT_CLICKED){ - if(mSelectedHandler){ - mSelectedHandler(); - } +void ListItem::OnLvglEvent(lv_event_t *anEvent) { + if (anEvent->code == LV_EVENT_CLICKED) { + if (mSelectedHandler) { + mSelectedHandler(); } + } } -List::List():Base(lv_list_create(Screen::BackgroundScreen::getLvInstance()),ID::Widgets::List){ - StopLvglEventHandler(); +List::List() + : Base(lv_list_create(Screen::BackgroundScreen::getLvInstance()), + ID::Widgets::List) { + StopLvglEventHandler(); } -void List::AddItem(std::string aTitle, const char* aSymbol, std::function onItemSelected){ - auto lvListItem = lv_list_add_btn(LvglSelf(),aSymbol,aTitle.c_str()); - mListItems.push_back(std::make_unique(lvListItem, std::move(onItemSelected))); - mListItems.back()->SetHeight(lv_pct(20)); +void List::AddItem(std::string aTitle, const char *aSymbol, + std::function onItemSelected) { + auto lvListItem = lv_list_add_btn(LvglSelf(), aSymbol, aTitle.c_str()); + mListItems.push_back( + std::make_unique(lvListItem, std::move(onItemSelected))); + mListItems.back()->SetHeight(lv_pct(20)); } - -void List::OnLvglEvent(lv_event_t* anEvent){ - if(anEvent->code == LV_EVENT_CLICKED){ - auto tgt = anEvent->target; - } -} \ No newline at end of file diff --git a/Platformio/OmoteUI/core/widget/List.hpp b/Platformio/OmoteUI/core/widget/List.hpp index 6a80fb3..f37288e 100644 --- a/Platformio/OmoteUI/core/widget/List.hpp +++ b/Platformio/OmoteUI/core/widget/List.hpp @@ -1,30 +1,32 @@ #pragma once #include "WidgetBase.hpp" +#include -namespace UI::Widget{ +namespace UI::Widget { -class ListItem : public UIElement{ +class ListItem : public UIElement { public: - ListItem(lv_obj_t* aListItem, std::function onItemSelected); -protected: - void OnLvglEvent(lv_event_t* anEvent) override; - bool OnKeyEvent(KeyPressAbstract::KeyEvent anEvent)override{return false;}; - void OnShow()override{}; - void OnHide()override{}; -private: - std::function mSelectedHandler; -}; - -class List : public Base{ -public: - List(); - void AddItem(std::string aTitle, const char* aSymbol, std::function onItemSelected); + ListItem(lv_obj_t *aListItem, std::function onItemSelected); protected: - void OnLvglEvent(lv_event_t* anEvent)override; + void OnLvglEvent(lv_event_t *anEvent) override; + bool OnKeyEvent(KeyPressAbstract::KeyEvent anEvent) override { + return false; + }; private: - std::vector mListItems; + std::function mSelectedHandler; }; -} \ No newline at end of file +class List : public Base { +public: + List(); + void AddItem(std::string aTitle, const char *aSymbol, + std::function onItemSelected); + +protected: +private: + std::vector mListItems; +}; + +} // namespace UI::Widget \ No newline at end of file diff --git a/Platformio/OmoteUI/core/widget/WidgetBase.hpp b/Platformio/OmoteUI/core/widget/WidgetBase.hpp index 3ba1ab5..c40646e 100644 --- a/Platformio/OmoteUI/core/widget/WidgetBase.hpp +++ b/Platformio/OmoteUI/core/widget/WidgetBase.hpp @@ -24,8 +24,6 @@ public: virtual ~Base() override = default; protected: - void OnShow() override{}; - void OnHide() override{}; bool OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) override { return false; };