From 96d94eeeab5b5193f1d03deb27cffe3536990211 Mon Sep 17 00:00:00 2001 From: philmoz Date: Mon, 28 Aug 2023 12:15:04 +1000 Subject: [PATCH] feat(color): Show active/configured timers on model setup page (#3972) --- radio/src/gui/colorlcd/model_setup.cpp | 53 ++++++-------------------- 1 file changed, 12 insertions(+), 41 deletions(-) diff --git a/radio/src/gui/colorlcd/model_setup.cpp b/radio/src/gui/colorlcd/model_setup.cpp index 497036fbc..9d9440027 100644 --- a/radio/src/gui/colorlcd/model_setup.cpp +++ b/radio/src/gui/colorlcd/model_setup.cpp @@ -46,7 +46,6 @@ ModelSetupPage::ModelSetupPage() : { } - static void onModelNameChanged() { auto model = modelslist.getCurrentModel(); @@ -96,11 +95,13 @@ class SubScreenButton : public TextButton { public: SubScreenButton(Window* parent, const char* text, - std::function pressHandler) : + std::function pressHandler, + std::function checkActive = nullptr) : TextButton(parent, rect_t{}, text, [=]() -> uint8_t { pressHandler(); return 0; - }) + }), + m_isActive(std::move(checkActive)) { // Room for two lines of text setHeight(62); @@ -117,39 +118,9 @@ class SubScreenButton : public TextButton } protected: - virtual bool isActive() { return false; } -}; + std::function m_isActive = nullptr; -struct IntmoduleButton : public SubScreenButton { - IntmoduleButton(Window* parent) : - SubScreenButton(parent, STR_INTERNALRF, - []() { new ModulePage(INTERNAL_MODULE); }) - { - } - bool isActive() override - { - return g_model.moduleData[INTERNAL_MODULE].type > 0; - } -}; - -struct ExtmoduleButton : public SubScreenButton { - ExtmoduleButton(Window* parent) : - SubScreenButton(parent, STR_EXTERNALRF, - []() { new ModulePage(EXTERNAL_MODULE); }) - { - } - bool isActive() override - { - return g_model.moduleData[EXTERNAL_MODULE].type > 0; - } -}; - -struct TrainerModuleButton : public SubScreenButton { - TrainerModuleButton(Window* parent) : - SubScreenButton(parent, STR_TRAINER, []() { new TrainerPage(); }) - { - } - bool isActive() override { return g_model.trainerData.mode > 0; } + virtual bool isActive() { return m_isActive ? m_isActive() : false; } }; static const lv_coord_t line_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), @@ -342,17 +313,17 @@ void ModelSetupPage::build(FormWindow * window) line->padTop(8); // Modules - new IntmoduleButton(line); - new ExtmoduleButton(line); - new TrainerModuleButton(line); + new SubScreenButton(line, STR_INTERNALRF, []() { new ModulePage(INTERNAL_MODULE); }, []() { return g_model.moduleData[INTERNAL_MODULE].type > 0; }); + new SubScreenButton(line, STR_EXTERNALRF, []() { new ModulePage(EXTERNAL_MODULE); }, []() { return g_model.moduleData[EXTERNAL_MODULE].type > 0; }); + new SubScreenButton(line, STR_TRAINER, []() { new TrainerPage(); }, []() { return g_model.trainerData.mode > 0; }); line = window->newLine(&grid2); line->padTop(2); // Timer buttons - new SubScreenButton(line, TR_TIMER "1", []() { new TimerWindow(0); }); - new SubScreenButton(line, TR_TIMER "2", []() { new TimerWindow(1); }); - new SubScreenButton(line, TR_TIMER "3", []() { new TimerWindow(2); }); + new SubScreenButton(line, TR_TIMER "1", []() { new TimerWindow(0); }, []() { return g_model.timers[0].mode > 0; }); + new SubScreenButton(line, TR_TIMER "2", []() { new TimerWindow(1); }, []() { return g_model.timers[1].mode > 0; }); + new SubScreenButton(line, TR_TIMER "3", []() { new TimerWindow(2); }, []() { return g_model.timers[2].mode > 0; }); line = window->newLine(&grid2); line->padTop(2);