Add boiler plate Key Handling Into the UI code for UI elements
This commit is contained in:
parent
160114f54c
commit
a44e92ea5d
8 changed files with 37 additions and 0 deletions
|
@ -6,6 +6,13 @@ using namespace UI;
|
||||||
|
|
||||||
BasicUI::BasicUI(std::shared_ptr<HardwareAbstract> aHardware)
|
BasicUI::BasicUI(std::shared_ptr<HardwareAbstract> aHardware)
|
||||||
: UIBase(aHardware) {
|
: UIBase(aHardware) {
|
||||||
|
|
||||||
|
aHardware->keys()->RegisterKeyPressHandler([](auto aKeyEvent) {
|
||||||
|
return Screen::Manager::getInstance().distributeKeyEvent(aKeyEvent);
|
||||||
|
// Could potentially add a check here and display that a key event was
|
||||||
|
// unused.
|
||||||
|
});
|
||||||
|
|
||||||
Screen::Manager::getInstance().pushScreen(
|
Screen::Manager::getInstance().pushScreen(
|
||||||
std::make_unique<Screen::HomeScreen>());
|
std::make_unique<Screen::HomeScreen>());
|
||||||
}
|
}
|
|
@ -18,3 +18,8 @@ void Manager::pushScreen(Screen::Base::Ptr aScreen) {
|
||||||
mScreens.push(std::move(aScreen));
|
mScreens.push(std::move(aScreen));
|
||||||
mScreens.top()->Show();
|
mScreens.top()->Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Manager::distributeKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) {
|
||||||
|
// Send Key Even to top Screen for handling
|
||||||
|
return mScreens.top()->KeyEvent(aKeyEvent);
|
||||||
|
}
|
|
@ -13,6 +13,8 @@ public:
|
||||||
void pushScreen(Screen::Base::Ptr aScreen);
|
void pushScreen(Screen::Base::Ptr aScreen);
|
||||||
void pushScreen(Screen::Base::Ptr aScreen, lv_scr_load_anim_t aPushAnimation);
|
void pushScreen(Screen::Base::Ptr aScreen, lv_scr_load_anim_t aPushAnimation);
|
||||||
|
|
||||||
|
bool distributeKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Manager();
|
Manager();
|
||||||
static Manager mManager;
|
static Manager mManager;
|
||||||
|
|
|
@ -67,4 +67,8 @@ void UIElement::Hide() {
|
||||||
OnHide();
|
OnHide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool UIElement::KeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) {
|
||||||
|
return OnKeyEvent(aKeyEvent);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace UI
|
} // namespace UI
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
#include "UIElementIds.hpp"
|
#include "UIElementIds.hpp"
|
||||||
#include "lvgl.h"
|
#include "lvgl.h"
|
||||||
|
|
||||||
|
#include "KeyPressAbstract.hpp"
|
||||||
|
|
||||||
namespace UI {
|
namespace UI {
|
||||||
|
|
||||||
class UIElement {
|
class UIElement {
|
||||||
|
@ -48,6 +50,14 @@ protected:
|
||||||
/// @brief Override in child class to run something after element is hidden
|
/// @brief Override in child class to run something after element is hidden
|
||||||
virtual void OnHide() = 0;
|
virtual void OnHide() = 0;
|
||||||
|
|
||||||
|
/// @brief Set KeyEvent to the UI element to see if it wants to handle it
|
||||||
|
virtual bool KeyEvent(KeyPressAbstract::KeyEvent aKeyEvent);
|
||||||
|
|
||||||
|
/// @brief Override to Handle KeyEvent for the specific element
|
||||||
|
/// @return true - Key event was used
|
||||||
|
/// fasle - Key event was unused
|
||||||
|
virtual bool OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
lv_obj_t *mLvglSelf;
|
lv_obj_t *mLvglSelf;
|
||||||
const ID mId;
|
const ID mId;
|
||||||
|
|
|
@ -20,6 +20,9 @@ public:
|
||||||
protected:
|
protected:
|
||||||
void OnShow() override{};
|
void OnShow() override{};
|
||||||
void OnHide() override{};
|
void OnHide() override{};
|
||||||
|
bool OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) override {
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<Widget::Base::Ptr> mWidgets;
|
std::vector<Widget::Base::Ptr> mWidgets;
|
||||||
|
|
|
@ -23,6 +23,9 @@ protected:
|
||||||
void Show() override;
|
void Show() override;
|
||||||
void OnShow() override{};
|
void OnShow() override{};
|
||||||
void OnHide() override{};
|
void OnHide() override{};
|
||||||
|
bool OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) override {
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
lv_scr_load_anim_t mPushAnimation = LV_SCR_LOAD_ANIM_NONE;
|
lv_scr_load_anim_t mPushAnimation = LV_SCR_LOAD_ANIM_NONE;
|
||||||
|
|
|
@ -13,6 +13,9 @@ public:
|
||||||
protected:
|
protected:
|
||||||
void OnShow() override{};
|
void OnShow() override{};
|
||||||
void OnHide() override{};
|
void OnHide() override{};
|
||||||
|
bool OnKeyEvent(KeyPressAbstract::KeyEvent aKeyEvent) override {
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue