From 77f53e8457727fc104100c85717c1ad481428f10 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Sat, 28 May 2022 19:21:50 +0200 Subject: [PATCH] source / switch choices: new toolbar implementation --- radio/src/gui/colorlcd/sourcechoice.cpp | 33 ++++++------------------- radio/src/gui/colorlcd/sourcechoice.h | 7 ------ radio/src/gui/colorlcd/switchchoice.cpp | 31 ++++------------------- radio/src/gui/colorlcd/switchchoice.h | 6 ----- radio/src/thirdparty/libopenui | 2 +- 5 files changed, 14 insertions(+), 65 deletions(-) diff --git a/radio/src/gui/colorlcd/sourcechoice.cpp b/radio/src/gui/colorlcd/sourcechoice.cpp index b30ab79bb..e82d61b64 100644 --- a/radio/src/gui/colorlcd/sourcechoice.cpp +++ b/radio/src/gui/colorlcd/sourcechoice.cpp @@ -29,11 +29,11 @@ #include "draw_functions.h" #include "opentx.h" -class SourceChoiceMenuToolbar : public MenuToolbar +class SourceChoiceMenuToolbar : public MenuToolbar { public: SourceChoiceMenuToolbar(SourceChoice * choice, Menu * menu): - MenuToolbar(choice, menu) + MenuToolbar(choice, menu) { addButton(STR_CHAR_INPUT, MIXSRC_FIRST_INPUT, MIXSRC_LAST_INPUT); #if defined(LUA_MODEL_SCRIPTS) @@ -71,7 +71,9 @@ SourceChoice::SourceChoice(Window* parent, const rect_t &rect, int16_t vmin, menu->setWaitHandler([=]() { int16_t val = getMovedSource(vmin); if (val) { - fillMenu(menu, val); + fillMenu(menu); + menu->select(getIndexFromValue(val)); + // TODO: reset toolbar } #if defined(AUTOSWITCH) else { @@ -79,7 +81,9 @@ SourceChoice::SourceChoice(Window* parent, const rect_t &rect, int16_t vmin, if (swtch && !IS_SWITCH_MULTIPOS(swtch)) { val = switchToMix(swtch); if (val && (val >= vmin) && (val <= vmax)) { - fillMenu(menu, val); + fillMenu(menu); + menu->select(getIndexFromValue(val)); + // TODO: reset toolbar } } } @@ -97,24 +101,3 @@ SourceChoice::SourceChoice(Window* parent, const rect_t &rect, int16_t vmin, setAvailableHandler([](int v){ return isSourceAvailable(v); }); } - -void SourceChoice::fillMenu(Menu *menu, int16_t value, const FilterFct& filter) -{ - int count = 0; - int current = 0; - - menu->removeLines(); - for (int i = vmin; i <= vmax; ++i) { - if (filter && !filter(i)) continue; - if (isValueAvailable && !isValueAvailable(i)) continue; - menu->addLine(getSourceString(i), [=]() { setValue(i); }); - if (value == i) { - current = count; - } - ++count; - } - - if (current >= 0) { - menu->select(current); - } -} diff --git a/radio/src/gui/colorlcd/sourcechoice.h b/radio/src/gui/colorlcd/sourcechoice.h index c51adb8da..ca9b1904e 100644 --- a/radio/src/gui/colorlcd/sourcechoice.h +++ b/radio/src/gui/colorlcd/sourcechoice.h @@ -29,9 +29,6 @@ bool isSourceAvailable(int source); class SourceChoice : public ChoiceEx { - template - friend class MenuToolbar; - public: SourceChoice(Window* parent, const rect_t& rect, int16_t vmin, int16_t vmax, std::function getValue, @@ -41,10 +38,6 @@ class SourceChoice : public ChoiceEx #if defined(DEBUG_WINDOWS) std::string getName() const override { return "SourceChoice"; } #endif - - protected: - typedef std::function FilterFct; - void fillMenu(Menu* menu, int16_t value, const FilterFct& condition = nullptr); }; #endif // _SOURCECHOICE_H_ diff --git a/radio/src/gui/colorlcd/switchchoice.cpp b/radio/src/gui/colorlcd/switchchoice.cpp index 4fed3562a..e19bf8ae8 100644 --- a/radio/src/gui/colorlcd/switchchoice.cpp +++ b/radio/src/gui/colorlcd/switchchoice.cpp @@ -28,11 +28,11 @@ #include "opentx.h" #include "strhelpers.h" -class SwitchChoiceMenuToolbar : public MenuToolbar +class SwitchChoiceMenuToolbar : public MenuToolbar { public: SwitchChoiceMenuToolbar(SwitchChoice* choice, Menu* menu) : - MenuToolbar(choice, menu) + MenuToolbar(choice, menu) { addButton(STR_CHAR_SWITCH, SWSRC_FIRST_SWITCH, SWSRC_LAST_SWITCH); addButton(STR_CHAR_TRIM, SWSRC_FIRST_TRIM, SWSRC_LAST_TRIM); @@ -62,7 +62,9 @@ SwitchChoice::SwitchChoice(Window* parent, const rect_t& rect, int vmin, val = swtch; } if (val && (!isValueAvailable || isValueAvailable(val))) { - fillMenu(menu, val); + fillMenu(menu); + menu->select(getIndexFromValue(val)); + // TODO: reset toolbar } } }); @@ -86,26 +88,3 @@ SwitchChoice::SwitchChoice(Window* parent, const rect_t& rect, int vmin, setAvailableHandler(isSwitchAvailableInMixes); } - -void SwitchChoice::fillMenu(Menu* menu, int16_t value, const FilterFct& filter) -{ - int count = 0; - int current = 0; - - menu->removeLines(); - - for (int i = vmin; i <= vmax; ++i) { - if (filter && !filter(i)) continue; - if (isValueAvailable && !isValueAvailable(i)) continue; - - menu->addLine(getSwitchPositionName(i), [=]() { setValue(i); }); - if (value == i) { - current = count; - } - ++count; - } - - if (current >= 0) { - menu->select(current); - } -} diff --git a/radio/src/gui/colorlcd/switchchoice.h b/radio/src/gui/colorlcd/switchchoice.h index 23085d114..f2584de53 100644 --- a/radio/src/gui/colorlcd/switchchoice.h +++ b/radio/src/gui/colorlcd/switchchoice.h @@ -27,8 +27,6 @@ class SwitchChoice : public ChoiceEx { - template friend class MenuToolbar; - public: SwitchChoice(Window* parent, const rect_t& rect, int vmin, int vmax, std::function getValue, @@ -37,10 +35,6 @@ class SwitchChoice : public ChoiceEx #if defined(DEBUG_WINDOWS) std::string getName() const override { return "SwitchChoice"; } #endif - -protected: - typedef std::function FilterFct; - void fillMenu(Menu* menu, int16_t value, const FilterFct& filter = nullptr); }; #endif // _SWITCHCHOICE_H_ diff --git a/radio/src/thirdparty/libopenui b/radio/src/thirdparty/libopenui index f11d4cd48..373d0bbae 160000 --- a/radio/src/thirdparty/libopenui +++ b/radio/src/thirdparty/libopenui @@ -1 +1 @@ -Subproject commit f11d4cd48a455486c27f3b471291f8f805289249 +Subproject commit 373d0bbaeb1b3a683327773899934d221c376603