diff --git a/radio/src/fonts/extra_17px.png b/radio/src/fonts/extra_17px.png index aa140bdb4..9042fc261 100644 Binary files a/radio/src/fonts/extra_17px.png and b/radio/src/fonts/extra_17px.png differ 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