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);