From 09c7c0bf679b36bf3ac36e2b7a9177df13f4b2aa Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Mon, 25 Apr 2022 11:20:36 +0200 Subject: [PATCH] fix some focus issues --- radio/src/gui/colorlcd/menu_model.cpp | 14 ------- radio/src/gui/colorlcd/menu_model.h | 17 ++++----- radio/src/gui/colorlcd/screen_setup.cpp | 44 +++------------------- radio/src/gui/colorlcd/tabsgroup.cpp | 49 +++++++++---------------- radio/src/gui/colorlcd/tabsgroup.h | 19 +--------- radio/src/thirdparty/libopenui | 2 +- 6 files changed, 32 insertions(+), 113 deletions(-) diff --git a/radio/src/gui/colorlcd/menu_model.cpp b/radio/src/gui/colorlcd/menu_model.cpp index 1d0ec0c46..1f026a8a1 100644 --- a/radio/src/gui/colorlcd/menu_model.cpp +++ b/radio/src/gui/colorlcd/menu_model.cpp @@ -61,19 +61,5 @@ ModelMenu::ModelMenu(): #endif addTab(new ModelTelemetryPage()); - addButton(&header); } -void ModelMenu::addButton(TabsGroupHeader* header) -{ - OpenTxTheme::instance()->createTextButton( - header, {LCD_W / 2 + 5, MENU_TITLE_TOP, LCD_W / 2 - 5, MENU_TITLE_HEIGHT}, - STR_OPEN_CHANNEL_MONITORS, [=]() { - calledFromModel = 1; - retTab = header->getCarousel()->getCurrentIndex(); - // TRACE("currentTab=%d %s", calledFromModel, typeid(*currentTab).name()); - new ChannelsViewMenu(); - deleteLater(); - return 0; - }); -} diff --git a/radio/src/gui/colorlcd/menu_model.h b/radio/src/gui/colorlcd/menu_model.h index 8fcfd5644..aa5272c9f 100644 --- a/radio/src/gui/colorlcd/menu_model.h +++ b/radio/src/gui/colorlcd/menu_model.h @@ -24,18 +24,15 @@ #include "tabsgroup.h" -class ModelMenu: public TabsGroup { - public: +class ModelMenu : public TabsGroup +{ + public: + ModelMenu(); + #if defined(DEBUG_WINDOWS) - std::string getName() const override - { - return "ModelMenu"; - } -#endif - ModelMenu(); + std::string getName() const override { return "ModelMenu"; } +#endif - protected: - void addButton(TabsGroupHeader* headerPtr); }; #endif // _MENU_MODEL_H_ diff --git a/radio/src/gui/colorlcd/screen_setup.cpp b/radio/src/gui/colorlcd/screen_setup.cpp index 4d8a7f631..46f6b9b54 100644 --- a/radio/src/gui/colorlcd/screen_setup.cpp +++ b/radio/src/gui/colorlcd/screen_setup.cpp @@ -48,40 +48,9 @@ class LayoutChoice : public Button update(); } -#if defined(HARDWARE_KEYS) - void onEvent(event_t event) override - { - TRACE_WINDOWS("%s received event 0x%X", getWindowDebugString().c_str(), - event); - - if (event == EVT_KEY_BREAK(KEY_ENTER)) { - editMode = true; - invalidate(); - openMenu(); - } else { - FormField::onEvent(event); - } - } -#endif - -#if defined(HARDWARE_TOUCH) - bool onTouchEnd(coord_t, coord_t) override - { - if (enabled) { - if (!hasFocus()) { - setFocus(SET_FOCUS_DEFAULT); - } - onKeyPress(); - openMenu(); - } - return true; - } -#endif - - void openMenu() + void onPress() override { auto menu = new Menu(parent); - for (auto layout : getRegisteredLayouts()) { menu->addLine(layout->getBitmap(), layout->getName(), [=]() { setValue(layout); }); @@ -91,11 +60,10 @@ class LayoutChoice : public Button getRegisteredLayouts().end(), getValue()); menu->select(std::distance(getRegisteredLayouts().begin(), it)); - // menu->setCloseHandler([=]() { - // editMode = false; - // update(); - // // setFocus(); - // }); + menu->setCloseHandler([=]() { + editMode = false; + update(); + }); } protected: @@ -314,12 +282,12 @@ void ScreenSetupPage::build(FormWindow * form) void ScreenSetupPage::clearLayoutOptions() { if (!layoutOptions) return; + layoutOptions->clear(); } void ScreenSetupPage::buildLayoutOptions() { if (!layoutOptions) return; - layoutOptions->clear(); FlexGridLayout grid(line_col_dsc, line_row_dsc); layoutOptions->setFlexLayout(); diff --git a/radio/src/gui/colorlcd/tabsgroup.cpp b/radio/src/gui/colorlcd/tabsgroup.cpp index c477b5d45..c06fab064 100644 --- a/radio/src/gui/colorlcd/tabsgroup.cpp +++ b/radio/src/gui/colorlcd/tabsgroup.cpp @@ -22,12 +22,8 @@ #include "tabsgroup.h" #include "mainwindow.h" -#include "view_channels.h" #include "view_main.h" -#include "model_outputs.h" -#include "model_mixes.h" #include "static.h" -#include "menu_model.h" #if defined(HARDWARE_TOUCH) #include "keyboard_base.h" @@ -37,8 +33,6 @@ #include -int TabsGroup::calledFromModel = 0; -int TabsGroup::retTab = 0; TabsGroupHeader::TabsGroupHeader(TabsGroup* parent, uint8_t icon) : FormGroup(parent, {0, 0, LCD_W, MENU_BODY_TOP}, OPAQUE), @@ -47,13 +41,6 @@ TabsGroupHeader::TabsGroupHeader(TabsGroup* parent, uint8_t icon) : this, {0, 0, MENU_HEADER_BACK_BUTTON_WIDTH, MENU_HEADER_BACK_BUTTON_HEIGHT}, [=]() -> uint8_t { - if (!parent->calledFromModel) { - ViewMain::instance()->setFocus(SET_FOCUS_DEFAULT); - } else { - auto menu = new ModelMenu(); - menu->setCurrentTab(parent->retTab); - parent->calledFromModel = 0; - } parent->deleteLater(); return 1; }, @@ -128,6 +115,7 @@ TabsGroup::TabsGroup(uint8_t icon): header(this, icon), body(this, { 0, MENU_BODY_TOP, LCD_W, MENU_BODY_HEIGHT }, FORM_FORWARD_FOCUS) { + Layer::push(this); } TabsGroup::~TabsGroup() @@ -137,6 +125,22 @@ TabsGroup::~TabsGroup() } } +void TabsGroup::deleteLater(bool detach, bool trash) +{ + if (_deleted) + return; + +#if defined(HARDWARE_TOUCH) + Keyboard::hide(); +#endif + + header.deleteLater(true, false); + body.deleteLater(true, false); + + Window::deleteLater(detach, trash); + Layer::pop(this); +} + void TabsGroup::addTab(PageTab * page) { tabs.push_back(page); @@ -239,26 +243,7 @@ void TabsGroup::onEvent(event_t event) } else if (event == EVT_KEY_FIRST(KEY_EXIT)) { killEvents(event); - if (!calledFromModel) { - ViewMain::instance()->setFocus(SET_FOCUS_DEFAULT); - } - else { - auto menu = new ModelMenu(); - menu->setCurrentTab(retTab); - calledFromModel = 0; - // TRACE("currentTab=%d %s", retTab, typeid(*currentTab).name()); - } deleteLater(); - } else if (event == EVT_KEY_FIRST(KEY_MODEL)) { - TRACE("TabGroup %s", typeid(*this).name()); - if (typeid(*this) == typeid(ModelMenu) ) { - killEvents(event); - calledFromModel = 1; - retTab = header.carousel.getCurrentIndex(); - // TRACE("currentTab=%d %s", calledFromModel, typeid(*currentTab).name()); - new ChannelsViewMenu(); - deleteLater(); - } } else if (parent) { parent->onEvent(event); } diff --git a/radio/src/gui/colorlcd/tabsgroup.h b/radio/src/gui/colorlcd/tabsgroup.h index c820b2e22..c23ec252b 100644 --- a/radio/src/gui/colorlcd/tabsgroup.h +++ b/radio/src/gui/colorlcd/tabsgroup.h @@ -150,7 +150,6 @@ class TabsGroupHeader: public FormGroup { title = value; } - TabsCarousel* getCarousel() {return &carousel;} protected: #if defined(HARDWARE_TOUCH) @@ -167,23 +166,9 @@ class TabsGroup: public Window public: explicit TabsGroup(uint8_t icon); - ~TabsGroup() override; - void deleteLater(bool detach = true, bool trash = true) override - { - if (_deleted) - return; - -#if defined(HARDWARE_TOUCH) - Keyboard::hide(); -#endif - - header.deleteLater(true, false); - body.deleteLater(true, false); - - Window::deleteLater(detach, trash); - } + void deleteLater(bool detach = true, bool trash = true) override; #if defined(DEBUG_WINDOWS) std::string getName() const override @@ -227,8 +212,6 @@ class TabsGroup: public Window bool onTouchEnd(coord_t x, coord_t y) override; #endif - static int calledFromModel; - static int retTab; protected: TabsGroupHeader header; diff --git a/radio/src/thirdparty/libopenui b/radio/src/thirdparty/libopenui index 9d30170c4..5e8e53b5b 160000 --- a/radio/src/thirdparty/libopenui +++ b/radio/src/thirdparty/libopenui @@ -1 +1 @@ -Subproject commit 9d30170c495b8acfacad6267ef56b2ccaff8b161 +Subproject commit 5e8e53b5b289589ca4d58777503e65b6a95cf7ee