diff --git a/radio/src/gui/colorlcd/choiceex.cpp b/radio/src/gui/colorlcd/choiceex.cpp index 88974b87c..8bf86b6f0 100644 --- a/radio/src/gui/colorlcd/choiceex.cpp +++ b/radio/src/gui/colorlcd/choiceex.cpp @@ -28,13 +28,12 @@ void ChoiceEx::setLongPressHandler(std::function handler) ChoiceEx::ChoiceEx(FormGroup * parent, const rect_t & rect, int vmin, int vmax, std::function getValue, std::function setValue, WindowFlags windowFlags) : Choice(parent, rect, vmin, vmax, getValue, setValue, windowFlags) { +#if defined(HARDWARE_TOUCH) + duration10ms = 0; +#endif } -bool ChoiceEx::onTouchEnd(coord_t x, coord_t y) -{ - return Choice::onTouchEnd(x,y); -} - +#if defined(HARDWARE_KEYS) void ChoiceEx::onEvent(event_t event) { if (event == EVT_KEY_LONG(KEY_ENTER)) { @@ -47,4 +46,31 @@ void ChoiceEx::onEvent(event_t event) Choice::onEvent(event); } +#endif + +#if defined(HARDWARE_TOUCH) +bool ChoiceEx::onTouchStart(coord_t x, coord_t y) +{ + if (duration10ms == 0) { + duration10ms = get_tmr10ms(); + } + + return Choice::onTouchStart(x, y); +} + +bool ChoiceEx::onTouchEnd(coord_t x, coord_t y) +{ + tmr10ms_t curTimer = get_tmr10ms(); + if (duration10ms != 0 && curTimer - duration10ms > LONG_PRESS_10MS) { + if (longPressHandler) { + longPressHandler(0); + duration10ms = 0; + return false; + } + } + + duration10ms = 0; + return Choice::onTouchEnd(x,y); +} +#endif diff --git a/radio/src/gui/colorlcd/choiceex.h b/radio/src/gui/colorlcd/choiceex.h index bdf7f9792..23cee0514 100644 --- a/radio/src/gui/colorlcd/choiceex.h +++ b/radio/src/gui/colorlcd/choiceex.h @@ -32,16 +32,20 @@ class ChoiceEx : public Choice #if defined(HARDWARE_TOUCH) bool onTouchEnd(coord_t x, coord_t y) override; + bool onTouchStart(coord_t x, coord_t y) override; #endif #if defined(DEBUG_WINDOWS) std::string getName() const override { - return "CurvesListChoice"; + return "ChoceEx"; } #endif protected: std::function longPressHandler = nullptr; +#if defined(HARDWARE_TOUCH) + tmr10ms_t duration10ms; +#endif };