From 81ce0398bdace834deaa91ebd0a45c614257aec7 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 13 Dec 2019 20:53:54 +0100 Subject: [PATCH] Menu black overlay fix (need to give the pointer of the current window) --- radio/src/fonts/extra_17px.png | Bin 5360 -> 13446 bytes radio/src/gui/colorlcd/confirm_dialog.cpp | 4 +-- radio/src/gui/colorlcd/confirm_dialog.h | 2 +- radio/src/gui/colorlcd/libopenui.h | 2 +- radio/src/gui/colorlcd/message_dialog.cpp | 4 +-- radio/src/gui/colorlcd/message_dialog.h | 2 +- radio/src/gui/colorlcd/model_curves.cpp | 4 +-- radio/src/gui/colorlcd/model_gvars.cpp | 4 +-- radio/src/gui/colorlcd/model_inputs.cpp | 4 +-- .../gui/colorlcd/model_logical_switches.cpp | 2 +- radio/src/gui/colorlcd/model_mixes.cpp | 4 +-- radio/src/gui/colorlcd/model_outputs.cpp | 2 +- radio/src/gui/colorlcd/model_select.cpp | 4 +-- radio/src/gui/colorlcd/model_setup.cpp | 28 +++++++++--------- radio/src/gui/colorlcd/model_telemetry.cpp | 2 +- radio/src/gui/colorlcd/page.cpp | 4 +-- radio/src/gui/colorlcd/radio_diagkeys.cpp | 22 +++++++------- radio/src/gui/colorlcd/radio_sdmanager.cpp | 2 +- .../gui/colorlcd/radio_spectrum_analyser.cpp | 2 +- radio/src/gui/colorlcd/screen_setup.cpp | 2 +- radio/src/gui/colorlcd/sourcechoice.cpp | 2 +- radio/src/gui/colorlcd/special_functions.cpp | 2 +- radio/src/gui/colorlcd/switchchoice.cpp | 3 +- radio/src/gui/colorlcd/tabsgroup.cpp | 4 +-- radio/src/gui/colorlcd/themes/flysky.cpp | 2 +- radio/src/gui/colorlcd/view_main.cpp | 4 +-- radio/src/main.cpp | 2 +- radio/src/simu.cpp | 20 ++++++++----- radio/src/targets/nv14/libopenui_config.h | 8 +++-- radio/src/thirdparty/libopenui | 2 +- 30 files changed, 76 insertions(+), 73 deletions(-) diff --git a/radio/src/fonts/extra_17px.png b/radio/src/fonts/extra_17px.png index aa140bdb4ca34382051149bf470b4b7b0e0a78fc..9042fc261d3b174c48f0ffc07c5ba35216621fb1 100644 GIT binary patch literal 13446 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 sQE9kL9e%U0RK8M0=V>|-p&U~CgY) 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 LP_yc`4etK{Ed#pw diff --git a/radio/src/gui/colorlcd/confirm_dialog.cpp b/radio/src/gui/colorlcd/confirm_dialog.cpp index 87f2f69cd..cce81e2df 100644 --- a/radio/src/gui/colorlcd/confirm_dialog.cpp +++ b/radio/src/gui/colorlcd/confirm_dialog.cpp @@ -21,8 +21,8 @@ #include "confirm_dialog.h" #include "static.h" -ConfirmDialog::ConfirmDialog(const char * title, const char * message, std::function confirmHandler) : - Dialog(title, {50, 73, LCD_W - 100, LCD_H - 146}), +ConfirmDialog::ConfirmDialog(Window * parent, const char * title, const char * message, std::function confirmHandler) : + Dialog(parent, title, {50, 73, LCD_W - 100, LCD_H - 146}), confirmHandler(std::move(confirmHandler)) { new StaticText(this, {0, height() / 2, width(), PAGE_LINE_HEIGHT}, message, CENTERED); diff --git a/radio/src/gui/colorlcd/confirm_dialog.h b/radio/src/gui/colorlcd/confirm_dialog.h index 8d6c2b841..ea1a4401b 100644 --- a/radio/src/gui/colorlcd/confirm_dialog.h +++ b/radio/src/gui/colorlcd/confirm_dialog.h @@ -25,7 +25,7 @@ class ConfirmDialog: public Dialog { public: - ConfirmDialog(const char * title, const char * message, std::function confirmHandler); + ConfirmDialog(Window * parent, const char * title, const char * message, std::function confirmHandler); #if defined(HARDWARE_KEYS) void onEvent(event_t event) override; diff --git a/radio/src/gui/colorlcd/libopenui.h b/radio/src/gui/colorlcd/libopenui.h index fc5b2ff46..513d91277 100644 --- a/radio/src/gui/colorlcd/libopenui.h +++ b/radio/src/gui/colorlcd/libopenui.h @@ -58,7 +58,7 @@ inline void POPUP_INFORMATION(const char * str) { - new MessageDialog("Message", str); + new MessageDialog(&mainWindow, "Message", str); } #endif // _LIBOPENUI_H_ diff --git a/radio/src/gui/colorlcd/message_dialog.cpp b/radio/src/gui/colorlcd/message_dialog.cpp index 004be79f8..56550d433 100644 --- a/radio/src/gui/colorlcd/message_dialog.cpp +++ b/radio/src/gui/colorlcd/message_dialog.cpp @@ -20,8 +20,8 @@ #include "message_dialog.h" #include "static.h" -MessageDialog::MessageDialog(const char * title, const char * message): - Dialog(title, {50, 73, LCD_W - 100, LCD_H - 146}) +MessageDialog::MessageDialog(Window * parent, const char * title, const char * message): + Dialog(parent, title, {50, 73, LCD_W - 100, LCD_H - 146}) { new StaticText(this, {0, coord_t(height() - PAGE_LINE_HEIGHT) / 2, width(), PAGE_LINE_HEIGHT}, message, 0, CENTERED); } diff --git a/radio/src/gui/colorlcd/message_dialog.h b/radio/src/gui/colorlcd/message_dialog.h index 755a0fe1f..09666834f 100644 --- a/radio/src/gui/colorlcd/message_dialog.h +++ b/radio/src/gui/colorlcd/message_dialog.h @@ -24,7 +24,7 @@ class MessageDialog: public Dialog { public: - MessageDialog(const char * title, const char * message); + MessageDialog(Window * parent, const char * title, const char * message); #if defined(HARDWARE_KEYS) void onEvent(event_t event) override; diff --git a/radio/src/gui/colorlcd/model_curves.cpp b/radio/src/gui/colorlcd/model_curves.cpp index 9b7e9397d..5aa6caa86 100644 --- a/radio/src/gui/colorlcd/model_curves.cpp +++ b/radio/src/gui/colorlcd/model_curves.cpp @@ -274,12 +274,12 @@ void ModelCurvesPage::build(FormWindow * window, int8_t focusIndex) // Curve drawing Button * button = new CurveButton(window, grid.getFieldSlot(), index); button->setPressHandler([=]() -> uint8_t { - Menu * menu = new Menu(); + Menu * menu = new Menu(window); menu->addLine(STR_EDIT, [=]() { editCurve(window, index); }); menu->addLine(STR_CURVE_PRESET, [=]() { - Menu * menu = new Menu(); + Menu * menu = new Menu(window); for (int angle = -45; angle <= 45; angle += 15) { char label[16]; strAppend(strAppendSigned(label, angle), "@"); diff --git a/radio/src/gui/colorlcd/model_gvars.cpp b/radio/src/gui/colorlcd/model_gvars.cpp index 9297455e7..5ab1a2b41 100644 --- a/radio/src/gui/colorlcd/model_gvars.cpp +++ b/radio/src/gui/colorlcd/model_gvars.cpp @@ -337,8 +337,8 @@ void ModelGVarsPage::build(FormWindow * window) for (uint8_t index = 0; index < MAX_GVARS; index++) { Button * button = new GVarButton(window, grid.getLineSlot(), index); - button->setPressHandler([=]() -> uint8_t { - Menu * menu = new Menu(); + button->setPressHandler([=]() { + Menu * menu = new Menu(window); menu->addLine(STR_EDIT, [=]() { Window * editWindow = new GVarEditWindow(index); editWindow->setCloseHandler([=]() { diff --git a/radio/src/gui/colorlcd/model_inputs.cpp b/radio/src/gui/colorlcd/model_inputs.cpp index d08b3fcd1..e5e7dede9 100644 --- a/radio/src/gui/colorlcd/model_inputs.cpp +++ b/radio/src/gui/colorlcd/model_inputs.cpp @@ -407,7 +407,7 @@ void ModelInputsPage::build(FormWindow * window, int8_t focusIndex) button->setFocus(); button->setPressHandler([=]() -> uint8_t { button->bringToTop(); - Menu * menu = new Menu(); + Menu * menu = new Menu(window); menu->addLine(STR_EDIT, [=]() { editInput(window, input, inputIndex); }); @@ -468,7 +468,7 @@ void ModelInputsPage::build(FormWindow * window, int8_t focusIndex) button->setFocus(); button->setPressHandler([=]() -> uint8_t { button->bringToTop(); - Menu * menu = new Menu(); + Menu * menu = new Menu(window); menu->addLine(STR_EDIT, [=]() { insertExpo(inputIndex, input); editInput(window, input, inputIndex); diff --git a/radio/src/gui/colorlcd/model_logical_switches.cpp b/radio/src/gui/colorlcd/model_logical_switches.cpp index a23a89684..4593246b2 100644 --- a/radio/src/gui/colorlcd/model_logical_switches.cpp +++ b/radio/src/gui/colorlcd/model_logical_switches.cpp @@ -363,7 +363,7 @@ void ModelLogicalSwitchesPage::build(FormWindow * window, int8_t focusIndex) auto button = new LogicalSwitchButton(window, grid.getFieldSlot(), i); button->setPressHandler([=]() { - Menu * menu = new Menu(); + Menu * menu = new Menu(window); LogicalSwitchData * ls = lswAddress(i); menu->addLine(STR_EDIT, [=]() { editLogicalSwitch(window, i); diff --git a/radio/src/gui/colorlcd/model_mixes.cpp b/radio/src/gui/colorlcd/model_mixes.cpp index 210e5bfe2..37971d527 100644 --- a/radio/src/gui/colorlcd/model_mixes.cpp +++ b/radio/src/gui/colorlcd/model_mixes.cpp @@ -338,7 +338,7 @@ void ModelMixesPage::build(FormWindow * window, int8_t focusMixIndex) button->setFocus(); button->setPressHandler([=]() -> uint8_t { button->bringToTop(); - Menu * menu = new Menu(); + Menu * menu = new Menu(window); menu->addLine(STR_EDIT, [=]() { editMix(window, ch, mixIndex); }); @@ -402,7 +402,7 @@ void ModelMixesPage::build(FormWindow * window, int8_t focusMixIndex) button->setFocus(); button->setPressHandler([=]() -> uint8_t { button->bringToTop(); - Menu * menu = new Menu(); + Menu * menu = new Menu(window); menu->addLine(STR_EDIT, [=]() { insertMix(mixIndex, ch); editMix(window, ch, mixIndex); diff --git a/radio/src/gui/colorlcd/model_outputs.cpp b/radio/src/gui/colorlcd/model_outputs.cpp index 0c9cb54c3..1e7b46ad1 100644 --- a/radio/src/gui/colorlcd/model_outputs.cpp +++ b/radio/src/gui/colorlcd/model_outputs.cpp @@ -176,7 +176,7 @@ void ModelOutputsPage::build(FormWindow * window, int8_t focusChannel) // Channel settings Button * button = new OutputLineButton(window, grid.getFieldSlot(), output); button->setPressHandler([=]() -> uint8_t { - Menu * menu = new Menu(); + Menu * menu = new Menu(window); menu->addLine(STR_EDIT, [=]() { editOutput(window, ch); }); diff --git a/radio/src/gui/colorlcd/model_select.cpp b/radio/src/gui/colorlcd/model_select.cpp index 3730ea307..aefc68865 100644 --- a/radio/src/gui/colorlcd/model_select.cpp +++ b/radio/src/gui/colorlcd/model_select.cpp @@ -263,7 +263,7 @@ class ModelCategoryPageBody: public FormWindow { button->setPressHandler([=]() -> uint8_t { if (button->hasFocus()) { - Menu * menu = new Menu(); + Menu * menu = new Menu(parent); if (model != modelslist.getCurrentModel()) { menu->addLine(STR_SELECT_MODEL, [=]() { // we store the latest changes if any @@ -302,7 +302,7 @@ class ModelCategoryPageBody: public FormWindow { // menu->addLine(STR_MOVE_MODEL); if (model != modelslist.getCurrentModel()) { menu->addLine(STR_DELETE_MODEL, [=]() { - new ConfirmDialog(STR_DELETE_MODEL, std::string(model->modelName, sizeof(model->modelName)).c_str(), [=] { + new ConfirmDialog(parent, STR_DELETE_MODEL, std::string(model->modelName, sizeof(model->modelName)).c_str(), [=] { modelslist.removeModel(category, model); update(index > 0 ? index - 1 : 0); }); diff --git a/radio/src/gui/colorlcd/model_setup.cpp b/radio/src/gui/colorlcd/model_setup.cpp index 152d35cf2..4f79de8d7 100644 --- a/radio/src/gui/colorlcd/model_setup.cpp +++ b/radio/src/gui/colorlcd/model_setup.cpp @@ -170,8 +170,8 @@ class FailSafePage : public Page { class RegisterDialog: public Dialog { public: - explicit RegisterDialog(uint8_t moduleIdx): - Dialog(STR_REGISTER, {50, 73, LCD_W - 100, 0}), + RegisterDialog(Window * parent, uint8_t moduleIdx): + Dialog(parent, STR_REGISTER, {50, 73, LCD_W - 100, 0}), moduleIdx(moduleIdx) { FormGroup * form = &content->form; @@ -259,8 +259,8 @@ class RegisterDialog: public Dialog { class BindWaitDialog: public Dialog { public: - BindWaitDialog(uint8_t moduleIdx, uint8_t receiverIdx): - Dialog(STR_BIND, {50, 73, LCD_W - 100, LCD_H - 146}), + BindWaitDialog(Window * parent, uint8_t moduleIdx, uint8_t receiverIdx): + Dialog(parent, STR_BIND, {50, 73, LCD_W - 100, LCD_H - 146}), moduleIdx(moduleIdx), receiverIdx(receiverIdx) { @@ -288,8 +288,8 @@ class BindWaitDialog: public Dialog { class BindRxChoiceMenu: public Menu { public: - BindRxChoiceMenu(uint8_t moduleIdx, uint8_t receiverIdx): - Menu(), + BindRxChoiceMenu(Window * parent, uint8_t moduleIdx, uint8_t receiverIdx): + Menu(parent), moduleIdx(moduleIdx), receiverIdx(receiverIdx) { @@ -315,10 +315,10 @@ class BindRxChoiceMenu: public Menu { memcpy(g_model.moduleData[moduleIdx].pxx2.receiverName[receiverIdx], receiverName, PXX2_LEN_RX_NAME); storageDirty(EE_MODEL); reusableBuffer.moduleSetup.bindInformation.step = BIND_OK; - new MessageDialog(STR_BIND, STR_BIND_OK); + new MessageDialog(parent, STR_BIND, STR_BIND_OK); #else reusableBuffer.moduleSetup.bindInformation.step = BIND_START; - new BindWaitDialog(moduleIdx, receiverIdx); + new BindWaitDialog(parent, moduleIdx, receiverIdx); #endif } }); @@ -346,7 +346,7 @@ void BindWaitDialog::checkEvents() if (reusableBuffer.moduleSetup.bindInformation.step == BIND_INIT && reusableBuffer.moduleSetup.bindInformation.candidateReceiversCount > 0) { deleteLater(); - new BindRxChoiceMenu(moduleIdx, receiverIdx); + new BindRxChoiceMenu(this, moduleIdx, receiverIdx); return; } @@ -361,7 +361,7 @@ class ReceiverButton: public TextButton { startBind(); } else { - auto menu = new Menu(); + auto menu = new Menu(parent); menu->addLine(STR_BIND, [=]() { startBind(); return 0; @@ -382,7 +382,7 @@ class ReceiverButton: public TextButton { memclear(&reusableBuffer.moduleSetup.pxx2, sizeof(reusableBuffer.moduleSetup.pxx2)); reusableBuffer.moduleSetup.pxx2.resetReceiverIndex = receiverIdx; reusableBuffer.moduleSetup.pxx2.resetReceiverFlags = 0x01; - new ConfirmDialog(STR_RECEIVER, STR_RECEIVER_DELETE, [=]() { + new ConfirmDialog(parent, STR_RECEIVER, STR_RECEIVER_DELETE, [=]() { moduleState[moduleIdx].mode = MODULE_MODE_RESET; removePXX2Receiver(moduleIdx, receiverIdx); }); @@ -392,7 +392,7 @@ class ReceiverButton: public TextButton { memclear(&reusableBuffer.moduleSetup.pxx2, sizeof(reusableBuffer.moduleSetup.pxx2)); reusableBuffer.moduleSetup.pxx2.resetReceiverIndex = receiverIdx; reusableBuffer.moduleSetup.pxx2.resetReceiverFlags = 0xFF; - new ConfirmDialog(STR_RECEIVER, STR_RECEIVER_DELETE, [=]() { + new ConfirmDialog(parent, STR_RECEIVER, STR_RECEIVER_DELETE, [=]() { moduleState[moduleIdx].mode = MODULE_MODE_RESET; removePXX2Receiver(moduleIdx, receiverIdx); }); @@ -425,7 +425,7 @@ class ReceiverButton: public TextButton { moduleState[moduleIdx].startBind(&reusableBuffer.moduleSetup.bindInformation); } - new BindWaitDialog(moduleIdx, receiverIdx); + new BindWaitDialog(parent, moduleIdx, receiverIdx); } void checkEvents() override @@ -762,7 +762,7 @@ class ModuleWindow : public FormGroup { new StaticText(this, grid.getLabelSlot(true), STR_MODULE); registerButton = new TextButton(this, grid.getFieldSlot(2, 0), STR_REGISTER); registerButton->setPressHandler([=]() -> uint8_t { - new RegisterDialog(moduleIdx); + new RegisterDialog(this, moduleIdx); return 0; }); diff --git a/radio/src/gui/colorlcd/model_telemetry.cpp b/radio/src/gui/colorlcd/model_telemetry.cpp index 2f3ab279e..0929bdd62 100644 --- a/radio/src/gui/colorlcd/model_telemetry.cpp +++ b/radio/src/gui/colorlcd/model_telemetry.cpp @@ -440,7 +440,7 @@ void ModelTelemetryPage::build(FormWindow * window, int8_t focusSensorIndex) Button * button = new SensorButton(window, grid.getFieldSlot(), idx, ++count); button->setPressHandler([=]() -> uint8_t { button->bringToTop(); - Menu * menu = new Menu(); + Menu * menu = new Menu(window); menu->addLine(STR_EDIT, [=]() { editSensor(window, idx); }); diff --git a/radio/src/gui/colorlcd/page.cpp b/radio/src/gui/colorlcd/page.cpp index ba815f932..271995071 100644 --- a/radio/src/gui/colorlcd/page.cpp +++ b/radio/src/gui/colorlcd/page.cpp @@ -96,10 +96,8 @@ void Page::onEvent(event_t event) #if defined(HARDWARE_TOUCH) bool Page::onTouchEnd(coord_t x, coord_t y) { - if (Window::onTouchEnd(x, y)) - return true; - Keyboard::hide(); + Window::onTouchEnd(x, y); return true; } #endif diff --git a/radio/src/gui/colorlcd/radio_diagkeys.cpp b/radio/src/gui/colorlcd/radio_diagkeys.cpp index 01b821847..d99695999 100644 --- a/radio/src/gui/colorlcd/radio_diagkeys.cpp +++ b/radio/src/gui/colorlcd/radio_diagkeys.cpp @@ -77,7 +77,7 @@ class RadioKeyDiagsWindow : public Window #endif // SWITCHES - for (uint8_t i = 0; i <= NUM_SWITCHES; i++) { + for (uint8_t i = 0; i < NUM_SWITCHES; i++) { if (SWITCH_EXISTS(i)) { coord_t y = 1 + FH * i; getvalue_t val = getValue(MIXSRC_FIRST_SWITCH + i); @@ -86,16 +86,16 @@ class RadioKeyDiagsWindow : public Window } } - //TRIMS - for (uint8_t i = 0; i < NUM_TRIMS_KEYS; i++) { - const uint8_t trimMap[NUM_TRIMS_KEYS] = {6, 7, 4, 5, 2, 3, 0, 1, 8, 9, 10, 11}; - coord_t y = 1 + FH + FH * (i / 2); - if (i & 1) { - dc->drawText(TRIM_COLUMN, y, "T", 0); - dc->drawNumber(TRIM_COLUMN + 10, y, i / 2 + 1, 0); - } - displayKeyState(dc, i & 1 ? TRIM_PLUS_COLUMN : TRIM_MINUS_COLUMN, y, TRM_BASE + trimMap[i]); - } + // TRIMS +// for (uint8_t i = 0; i < NUM_TRIMS_KEYS; i++) { +// const uint8_t trimMap[NUM_TRIMS_KEYS] = {6, 7, 4, 5, 2, 3, 0, 1, 8, 9, 10, 11}; +// coord_t y = 1 + FH + FH * (i / 2); +// if (i & 1) { +// dc->drawText(TRIM_COLUMN, y, "T", 0); +// dc->drawNumber(TRIM_COLUMN + 10, y, i / 2 + 1, 0); +// } +// displayKeyState(dc, i & 1 ? TRIM_PLUS_COLUMN : TRIM_MINUS_COLUMN, y, TRM_BASE + trimMap[i]); +// } }; protected: diff --git a/radio/src/gui/colorlcd/radio_sdmanager.cpp b/radio/src/gui/colorlcd/radio_sdmanager.cpp index 3bc843674..23a546fc5 100644 --- a/radio/src/gui/colorlcd/radio_sdmanager.cpp +++ b/radio/src/gui/colorlcd/radio_sdmanager.cpp @@ -159,7 +159,7 @@ void RadioSdManagerPage::build(FormWindow * window) for (auto name: files) { auto button = new TextButton(window, grid.getLabelSlot(), name, [=]() -> uint8_t { - auto menu = new Menu(); + auto menu = new Menu(window); const char *ext = getFileExtension(name.data()); if (ext) { if (!strcasecmp(ext, SOUNDS_EXT)) { diff --git a/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp b/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp index 95fb5e41a..0e5a1c90f 100644 --- a/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp +++ b/radio/src/gui/colorlcd/radio_spectrum_analyser.cpp @@ -260,7 +260,7 @@ void RadioSpectrumAnalyser::start() void RadioSpectrumAnalyser::stop() { - new MessageDialog(STR_MODULE, STR_STOPPING); + new MessageDialog(this, STR_MODULE, STR_STOPPING); if (isModulePXX2(moduleIdx)) { moduleState[moduleIdx].readModuleInformation(&reusableBuffer.moduleSetup.pxx2.moduleInformation, PXX2_HW_INFO_TX_ID, PXX2_HW_INFO_TX_ID); } diff --git a/radio/src/gui/colorlcd/screen_setup.cpp b/radio/src/gui/colorlcd/screen_setup.cpp index c64c08b98..f986eaf7f 100644 --- a/radio/src/gui/colorlcd/screen_setup.cpp +++ b/radio/src/gui/colorlcd/screen_setup.cpp @@ -84,7 +84,7 @@ class LayoutChoice: public FormField { void openMenu() { - auto menu = new Menu(); + auto menu = new Menu(parent); for (auto layout: getRegisteredLayouts()) { menu->addCustomLine([=](BitmapBuffer * dc, coord_t x, coord_t y, LcdFlags flags) { diff --git a/radio/src/gui/colorlcd/sourcechoice.cpp b/radio/src/gui/colorlcd/sourcechoice.cpp index ecf852f43..939970cd2 100644 --- a/radio/src/gui/colorlcd/sourcechoice.cpp +++ b/radio/src/gui/colorlcd/sourcechoice.cpp @@ -103,7 +103,7 @@ void SourceChoice::fillMenu(Menu * menu, std::function filter) void SourceChoice::openMenu() { - auto menu = new Menu(); + auto menu = new Menu(this); fillMenu(menu); menu->setToolbar(new SourceChoiceMenuToolbar(this, menu)); menu->setCloseHandler([=]() { diff --git a/radio/src/gui/colorlcd/special_functions.cpp b/radio/src/gui/colorlcd/special_functions.cpp index 22c4f47b1..f64752ea0 100644 --- a/radio/src/gui/colorlcd/special_functions.cpp +++ b/radio/src/gui/colorlcd/special_functions.cpp @@ -438,7 +438,7 @@ void SpecialFunctionsPage::build(FormWindow * window, int8_t focusIndex) auto button = new SpecialFunctionButton(window, grid.getFieldSlot(), functions, i); button->setPressHandler([=]() { button->bringToTop(); - Menu * menu = new Menu(); + Menu * menu = new Menu(window); menu->addLine(STR_EDIT, [=]() { editSpecialFunction(window, i); }); diff --git a/radio/src/gui/colorlcd/switchchoice.cpp b/radio/src/gui/colorlcd/switchchoice.cpp index 7afeeedfb..3a6532410 100644 --- a/radio/src/gui/colorlcd/switchchoice.cpp +++ b/radio/src/gui/colorlcd/switchchoice.cpp @@ -87,8 +87,9 @@ void SwitchChoice::fillMenu(Menu * menu, std::function filter) void SwitchChoice::openMenu() { - auto menu = new Menu(); + auto menu = new Menu(this); fillMenu(menu); + menu->setToolbar(new SwitchChoiceMenuToolbar(this, menu)); menu->setCloseHandler([=]() { editMode = false; diff --git a/radio/src/gui/colorlcd/tabsgroup.cpp b/radio/src/gui/colorlcd/tabsgroup.cpp index 6c377561a..ca1a38ba2 100644 --- a/radio/src/gui/colorlcd/tabsgroup.cpp +++ b/radio/src/gui/colorlcd/tabsgroup.cpp @@ -187,10 +187,8 @@ void TabsGroup::paint(BitmapBuffer * dc) #if defined(HARDWARE_TOUCH) bool TabsGroup::onTouchEnd(coord_t x, coord_t y) { - if (Window::onTouchEnd(x, y)) - return true; - Keyboard::hide(); + Window::onTouchEnd(x, y); return true; } #endif diff --git a/radio/src/gui/colorlcd/themes/flysky.cpp b/radio/src/gui/colorlcd/themes/flysky.cpp index f02427c2f..1e8916df0 100644 --- a/radio/src/gui/colorlcd/themes/flysky.cpp +++ b/radio/src/gui/colorlcd/themes/flysky.cpp @@ -362,7 +362,7 @@ class FlyskyTheme: public ThemeBase dc->drawSolidFilledRect(0, MENU_TITLE_TOP, LCD_W, MENU_TITLE_HEIGHT, TITLE_BGCOLOR); // the title line background // if (title) { - dc->drawText(MENUS_MARGIN_LEFT, MENU_TITLE_TOP, title, MENU_COLOR); + dc->drawText(MENUS_MARGIN_LEFT, MENU_TITLE_TOP + 2, title, MENU_COLOR); } } diff --git a/radio/src/gui/colorlcd/view_main.cpp b/radio/src/gui/colorlcd/view_main.cpp index c52f2259d..6c1022353 100644 --- a/radio/src/gui/colorlcd/view_main.cpp +++ b/radio/src/gui/colorlcd/view_main.cpp @@ -198,7 +198,7 @@ void ViewMain::onEvent(event_t event) void ViewMain::openMenu() { - Menu * menu = new Menu(); + Menu * menu = new Menu(this); menu->addLine(STR_MODEL_SELECT, [=]() { new ModelSelectMenu(); }); @@ -211,7 +211,7 @@ void ViewMain::openMenu() // new ChannelsMonitorMenu(); }); menu->addLine(STR_RESET_SUBMENU, [=]() { - Menu * menu = new Menu(); + Menu * menu = new Menu(this); menu->addLine(STR_RESET_FLIGHT, [=]() { flightReset(); }); diff --git a/radio/src/main.cpp b/radio/src/main.cpp index 5fcd88a37..df73c9cb7 100644 --- a/radio/src/main.cpp +++ b/radio/src/main.cpp @@ -31,7 +31,7 @@ uint8_t mainRequestFlags = 0; #if defined(LIBOPENUI) void openUsbMenu() { - auto menu = new Menu(); + auto menu = new Menu(&mainWindow); menu->setTitle("USB"); menu->addLine(STR_USB_JOYSTICK, [] { setSelectedUsbMode(USB_JOYSTICK_MODE); diff --git a/radio/src/simu.cpp b/radio/src/simu.cpp index 1586d3848..2ab79f5a0 100644 --- a/radio/src/simu.cpp +++ b/radio/src/simu.cpp @@ -252,12 +252,12 @@ long OpenTxSim::onKeypress(FXObject *, FXSelector, void * v) return 0; } -long OpenTxSim::onMouseDown(FXObject*,FXSelector,void*v) +long OpenTxSim::onMouseDown(FXObject *, FXSelector, void * v) { FXEvent * evt = (FXEvent *)v; UNUSED(evt); - // TRACE("onMouseDown %d %d", evt->win_x, evt->win_y); + TRACE_WINDOWS("[Mouse Press] %d %d", evt->win_x, evt->win_y); #if defined(HARDWARE_TOUCH) touchState.event = TE_DOWN; @@ -273,7 +273,7 @@ long OpenTxSim::onMouseUp(FXObject*,FXSelector,void*v) FXEvent * evt = (FXEvent *)v; UNUSED(evt); - // TRACE("onMouseUp %d %d", evt->win_x, evt->win_y); + TRACE_WINDOWS("[Mouse Release] %d %d", evt->win_x, evt->win_y); #if defined(HARDWARE_TOUCH) if (touchState.event == TE_DOWN) { @@ -294,13 +294,17 @@ long OpenTxSim::onMouseMove(FXObject*,FXSelector,void*v) FXEvent * evt = (FXEvent *)v; UNUSED(evt); + if (evt->state & LEFTBUTTONMASK) { + TRACE_WINDOWS("[Mouse Move] %d %d", evt->win_x, evt->win_y); + #if defined(HARDWARE_TOUCH) - if (evt->state & LEFTBUTTONMASK && (touchState.event == TE_SLIDE || abs(evt->win_x - touchState.x) > 5 || abs(evt->win_y - touchState.y) > 5)) { - touchState.event = TE_SLIDE; - touchState.x = evt->win_x; - touchState.y = evt->win_y; - } + if (touchState.event == TE_SLIDE || abs(evt->win_x - touchState.x) > 5 || abs(evt->win_y - touchState.y) > 5) { + touchState.event = TE_SLIDE; + touchState.x = evt->win_x; + touchState.y = evt->win_y; + } #endif + } return 0; } diff --git a/radio/src/targets/nv14/libopenui_config.h b/radio/src/targets/nv14/libopenui_config.h index 70f2f4d66..39021fb17 100644 --- a/radio/src/targets/nv14/libopenui_config.h +++ b/radio/src/targets/nv14/libopenui_config.h @@ -55,7 +55,7 @@ constexpr uint32_t FH = PAGE_LINE_HEIGHT; constexpr uint32_t NUM_BODY_LINES = MENU_BODY_HEIGHT / PAGE_LINE_HEIGHT; constexpr uint32_t FIELD_PADDING_LEFT = 3; -constexpr uint32_t FIELD_PADDING_TOP = 3; +constexpr uint32_t FIELD_PADDING_TOP = 4; constexpr uint32_t CURVE_SIDE_WIDTH = 100; constexpr uint32_t CURVE_CENTER_X = LCD_W - CURVE_SIDE_WIDTH - 7; @@ -70,7 +70,6 @@ constexpr uint32_t DATETIME_MIDDLE = (LCD_W + DATETIME_SEPARATOR_X constexpr uint32_t MENUS_TOOLBAR_BUTTON_WIDTH = 50; constexpr uint32_t MENUS_TOOLBAR_BUTTON_PADDING = 11; -constexpr rect_t MENUS_TOOLBAR_RECT = { 35, 95, 50, 370 }; constexpr uint32_t ALERT_FRAME_TOP = 70; constexpr uint32_t ALERT_FRAME_HEIGHT = (LCD_H - 2 * ALERT_FRAME_TOP); @@ -155,7 +154,10 @@ constexpr coord_t MENUS_WIDTH = 200; constexpr coord_t MENUS_OFFSET_TOP = 20; constexpr coord_t POPUP_HEADER_HEIGHT = 40; constexpr coord_t MENUS_MIN_HEIGHT = 2 * MENUS_LINE_HEIGHT - 1; -constexpr coord_t MENUS_MAX_HEIGHT = 7 * MENUS_LINE_HEIGHT - 1; +constexpr coord_t MENUS_MAX_HEIGHT = 8 * MENUS_LINE_HEIGHT - 1; + +constexpr rect_t MENUS_TOOLBAR_RECT = { 35, (LCD_H - MENUS_MAX_HEIGHT) / 2, 50, MENUS_MAX_HEIGHT }; + constexpr coord_t MODEL_SELECT_FOOTER_HEIGHT = 24; constexpr coord_t SCROLLBAR_WIDTH = 3; constexpr coord_t TABLE_LINE_HEIGHT = 50; diff --git a/radio/src/thirdparty/libopenui b/radio/src/thirdparty/libopenui index f0daca33c..349d5ba27 160000 --- a/radio/src/thirdparty/libopenui +++ b/radio/src/thirdparty/libopenui @@ -1 +1 @@ -Subproject commit f0daca33c4b7e4e06fce6edea4c6cfced7af0b0b +Subproject commit 349d5ba274e38a1db2f5cc3d8162c8771c87c82d