From f41b0482531f66116651ed93cf993c209fbe2584 Mon Sep 17 00:00:00 2001 From: philmoz Date: Tue, 24 Jan 2023 12:33:40 +1100 Subject: [PATCH] feat(color): Add long press handler for new model curves page (#3091) --- radio/src/gui/colorlcd/model_curves.cpp | 46 +++++++++++++++++-------- radio/src/gui/colorlcd/model_curves.h | 3 ++ 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/radio/src/gui/colorlcd/model_curves.cpp b/radio/src/gui/colorlcd/model_curves.cpp index 4d91c13ae91..51a563fad3e 100644 --- a/radio/src/gui/colorlcd/model_curves.cpp +++ b/radio/src/gui/colorlcd/model_curves.cpp @@ -158,6 +158,24 @@ void ModelCurvesPage::presetMenu(FormWindow * window, uint8_t index) menu->updateLines(); } +void ModelCurvesPage::plusPopup(FormWindow * window) +{ + CurveHeader &curve = g_model.curves[addIndex]; + int8_t * points = curveAddress(addIndex); + + Menu *menu = new Menu(window); + menu->setTitle(STR_NEW); + menu->addLine(STR_EDIT, [=]() { + focusIndex = addIndex; + initPoints(curve, points); + editCurve(window, addIndex); + }); + menu->addLine(STR_CURVE_PRESET, [=]() { + focusIndex = addIndex; + presetMenu(window, addIndex); + }); +} + void ModelCurvesPage::build(FormWindow * window) { #if LCD_W > LCD_H @@ -194,6 +212,7 @@ void ModelCurvesPage::build(FormWindow * window) auto button = new CurveButton(line, rect_t{0, 0, CURVE_BTN_W, CURVE_BTH_H}, index); button->setPressHandler([=]() -> uint8_t { Menu * menu = new Menu(window); + menu->setTitle(STR_CURVE); menu->addLine(STR_EDIT, [=]() { editCurve(window, index); }); @@ -215,6 +234,14 @@ void ModelCurvesPage::build(FormWindow * window) focusIndex = index; }); + button->setLongPressHandler([=]() -> uint8_t { + if (addButton) { + lv_group_focus_obj(addButton->getLvObj()); + plusPopup(window); + } + return 0; + }); + if (!firstCurveButton) { firstCurveIndex = index; firstCurveButton = button; @@ -243,24 +270,13 @@ void ModelCurvesPage::build(FormWindow * window) lv_obj_set_grid_align(line->getLvObj(), LV_GRID_ALIGN_SPACE_BETWEEN, LV_GRID_ALIGN_SPACE_BETWEEN); } - CurveHeader &curve = g_model.curves[n]; - int8_t * points = curveAddress(n); - - auto button = new TextButton(line, rect_t{0, 0, CURVE_BTN_W, CURVE_BTH_H}, LV_SYMBOL_PLUS, [=]() { - Menu *menu = new Menu(window); - menu->addLine(STR_EDIT, [=]() { - focusIndex = n; - initPoints(curve, points); - editCurve(window, n); - }); - menu->addLine(STR_CURVE_PRESET, [=]() { - focusIndex = n; - presetMenu(window, n); - }); + addIndex = n; + addButton = new TextButton(line, rect_t{0, 0, CURVE_BTN_W, CURVE_BTH_H}, LV_SYMBOL_PLUS, [=]() { + plusPopup(window); return 0; }); - lv_obj_set_grid_cell(button->getLvObj(), LV_GRID_ALIGN_CENTER, curveIndex % PER_ROW, 1, LV_GRID_ALIGN_CENTER, 0, 1); + lv_obj_set_grid_cell(addButton->getLvObj(), LV_GRID_ALIGN_CENTER, curveIndex % PER_ROW, 1, LV_GRID_ALIGN_CENTER, 0, 1); break; } diff --git a/radio/src/gui/colorlcd/model_curves.h b/radio/src/gui/colorlcd/model_curves.h index 53c063e8fe7..9070d149c79 100644 --- a/radio/src/gui/colorlcd/model_curves.h +++ b/radio/src/gui/colorlcd/model_curves.h @@ -33,10 +33,13 @@ class ModelCurvesPage: public PageTab { protected: uint8_t focusIndex = -1; + Button* addButton = nullptr; + uint8_t addIndex = -1; void rebuild(FormWindow * window); void editCurve(FormWindow * window, uint8_t curve); void presetMenu(FormWindow * window, uint8_t index); + void plusPopup(FormWindow * window); }; #endif // _MODEL_CURVES_H_