From 5d399b05da1ba19b5d6b4ce68251cc816c595ede Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Sun, 12 Jun 2022 21:36:58 +0200 Subject: [PATCH] fix(screen setup): changing screen layout --- radio/src/gui/colorlcd/layout.cpp | 31 +++++++++++++------------ radio/src/gui/colorlcd/screen_setup.cpp | 10 ++++++-- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/radio/src/gui/colorlcd/layout.cpp b/radio/src/gui/colorlcd/layout.cpp index 4878c0ac2..d60874f94 100644 --- a/radio/src/gui/colorlcd/layout.cpp +++ b/radio/src/gui/colorlcd/layout.cpp @@ -145,24 +145,25 @@ createCustomScreen(const LayoutFactory* factory, unsigned customScreenIndex) if (!factory || (customScreenIndex >= MAX_CUSTOM_SCREENS)) return nullptr; - if (customScreens[customScreenIndex]) { - customScreens[customScreenIndex]->deleteLater(true, false); - delete customScreens[customScreenIndex]; + auto& screen = customScreens[customScreenIndex]; + auto& screenData = g_model.screenData[customScreenIndex]; + + if (screen != nullptr) { + screen->deleteLater(true, false); + delete screen; } - auto screen = factory->create( - ViewMain::instance(), &g_model.screenData[customScreenIndex].layoutData); - customScreens[customScreenIndex] = screen; + auto viewMain = ViewMain::instance(); + screen = factory->create(viewMain, &screenData.layoutData); - if (screen) { - auto dst = g_model.screenData[customScreenIndex].LayoutId; - auto src = factory->getId(); - strncpy(dst, src, sizeof(CustomScreenData::LayoutId)); - - return screen; - } - - return nullptr; + if (!screen) return nullptr; + viewMain->addMainView(screen, customScreenIndex); + + auto dst = g_model.screenData[customScreenIndex].LayoutId; + auto src = factory->getId(); + strncpy(dst, src, sizeof(CustomScreenData::LayoutId)); + + return screen; } void disposeCustomScreen(unsigned idx) diff --git a/radio/src/gui/colorlcd/screen_setup.cpp b/radio/src/gui/colorlcd/screen_setup.cpp index 46f6b9b54..7e0722c4f 100644 --- a/radio/src/gui/colorlcd/screen_setup.cpp +++ b/radio/src/gui/colorlcd/screen_setup.cpp @@ -41,7 +41,7 @@ class LayoutChoice : public Button LayoutChoice(Window* parent, LayoutFactoryGetter getValue, LayoutFactorySetter setValue) : Button(parent, rect_t{}, nullptr, 0, 0, lv_btn_create), getValue(std::move(getValue)), - setValue(std::move(setValue)) + _setValue(std::move(setValue)) { canvas = lv_canvas_create(lvobj); lv_obj_center(canvas); @@ -69,7 +69,7 @@ class LayoutChoice : public Button protected: lv_obj_t* canvas = nullptr; std::function getValue; - std::function setValue; + std::function _setValue; void update() { @@ -86,6 +86,12 @@ class LayoutChoice : public Button void* buf = (void*)(bitmap + 4); lv_canvas_set_buffer(canvas, buf, w, h, LV_IMG_CF_ALPHA_8BIT); } + + void setValue(const LayoutFactory* layout) + { + if (_setValue) _setValue(layout); + update(); + } }; ScreenAddPage::ScreenAddPage(ScreenMenu * menu, uint8_t pageIndex):