From c7ca1cce0f3f6610145cd5698a4c8a9f5c3b40f7 Mon Sep 17 00:00:00 2001 From: Cliff Date: Thu, 8 Sep 2022 19:13:39 -0600 Subject: [PATCH] feat(color): Labels Pgup/Down keys move up down selected label (#2288) * (fw) Pgup/Down keys move up down selected labels * Add Long press returns on single page radios * Rem NV14 keys --- radio/src/gui/colorlcd/model_select.cpp | 41 +++++++++++++++++++++++++ radio/src/gui/colorlcd/model_select.h | 4 +++ 2 files changed, 45 insertions(+) diff --git a/radio/src/gui/colorlcd/model_select.cpp b/radio/src/gui/colorlcd/model_select.cpp index b7fbd3551..9b936f4bb 100644 --- a/radio/src/gui/colorlcd/model_select.cpp +++ b/radio/src/gui/colorlcd/model_select.cpp @@ -566,6 +566,47 @@ ModelLabelsWindow::ModelLabelsWindow() : Page(ICON_MODEL) } } +#if defined(HARDWARE_KEYS) +void ModelLabelsWindow::onEvent(event_t event) +{ +#if defined(KEYS_GPIO_REG_PGUP) + if (event == EVT_KEY_BREAK(KEY_PGUP) || + event == EVT_KEY_BREAK(KEY_PGDN)) { +#else + if (event == EVT_KEY_LONG(KEY_PGDN) || + event == EVT_KEY_BREAK(KEY_PGDN)) { +#endif + std::set curSel = lblselector->getSelection(); + std::set sellist; + int select = 0; + int rowcount = lblselector->getRowCount(); +#if defined(KEYS_GPIO_REG_PGUP) + if (event == EVT_KEY_BREAK(KEY_PGDN)) { +#else + if (event == EVT_KEY_BREAK(KEY_PGDN)) { +#endif + if(curSel.size()) + select = (*curSel.rbegin() + 1) % rowcount; + } else { + killEvents(event); + if(curSel.size()) { + select = (int)*curSel.begin() - 1; + if(select < 0) + select += rowcount; + } else { + select = rowcount - 1; + } + } + sellist.insert(select); + lblselector->setSelected(sellist); // Check the items + lblselector->setSelected(select); // Causes the list to scroll + updateFilteredLabels(sellist); // Update the models + } else { + Page::onEvent(event); + } +} +#endif + void ModelLabelsWindow::newModel() { // Save current diff --git a/radio/src/gui/colorlcd/model_select.h b/radio/src/gui/colorlcd/model_select.h index fbe5bf851..619a1424d 100644 --- a/radio/src/gui/colorlcd/model_select.h +++ b/radio/src/gui/colorlcd/model_select.h @@ -91,6 +91,10 @@ class ModelLabelsWindow : public Page return labels; } +#if defined(HARDWARE_KEYS) + void onEvent(event_t event) override; +#endif + void newModel(); void newLabel(); void buildHead(PageHeader *window);