From 788bdfbb092e18904ce018c22dc8c5cabe751f49 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Sat, 2 Apr 2016 10:38:34 +0400 Subject: [PATCH 1/5] [Horus] Navigation fixes --- radio/src/gui/horus/menu_model_telemetry.cpp | 2 +- radio/src/gui/horus/view_main.cpp | 6 ++++-- radio/src/gui/horus/view_text.cpp | 8 ++++---- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/radio/src/gui/horus/menu_model_telemetry.cpp b/radio/src/gui/horus/menu_model_telemetry.cpp index 1bfea4c62..6b4ddcec3 100644 --- a/radio/src/gui/horus/menu_model_telemetry.cpp +++ b/radio/src/gui/horus/menu_model_telemetry.cpp @@ -505,7 +505,7 @@ bool menuModelTelemetry(evt_t event) case ITEM_TELEMETRY_IGNORE_SENSOR_INSTANCE: lcdDrawText(MENUS_MARGIN_LEFT, y, STR_IGNORE_INSTANCE); - editCheckBox(g_model.ignoreSensorIds, TELEM_COL2, y, attr, event); + g_model.ignoreSensorIds = editCheckBox(g_model.ignoreSensorIds, TELEM_COL2, y, attr, event); break; case ITEM_TELEMETRY_RSSI_LABEL: diff --git a/radio/src/gui/horus/view_main.cpp b/radio/src/gui/horus/view_main.cpp index a04ca2859..d55d183ca 100644 --- a/radio/src/gui/horus/view_main.cpp +++ b/radio/src/gui/horus/view_main.cpp @@ -165,12 +165,12 @@ bool menuMainView(evt_t event) pushMenu(menuTabScreensSetup[1]); return false; - case EVT_KEY_BREAK(KEY_PGDN): + case EVT_KEY_FIRST(KEY_PGDN): storageDirty(EE_GENERAL); g_eeGeneral.view = circularIncDec(g_eeGeneral.view, +1, 0, getMainViewsCount()-1); break; - case EVT_KEY_BREAK(KEY_PGUP): + case EVT_KEY_FIRST(KEY_PGUP): killEvents(event); storageDirty(EE_GENERAL); g_eeGeneral.view = circularIncDec(g_eeGeneral.view, -1, 0, getMainViewsCount()-1); @@ -193,6 +193,7 @@ bool menuMainView(evt_t event) return true; } +#if 0 bool menuMainViewChannelsMonitor(evt_t event) { switch (event) { @@ -204,3 +205,4 @@ bool menuMainViewChannelsMonitor(evt_t event) return menuChannelsView(event); } +#endif diff --git a/radio/src/gui/horus/view_text.cpp b/radio/src/gui/horus/view_text.cpp index 6e86afeb4..35cc8c36c 100644 --- a/radio/src/gui/horus/view_text.cpp +++ b/radio/src/gui/horus/view_text.cpp @@ -100,7 +100,7 @@ bool menuTextView(evt_t event) readTextFile(lines_count); break; - case EVT_KEY_FIRST(KEY_UP): + case EVT_ROTARY_LEFT: if (menuVerticalOffset == 0) break; else @@ -108,7 +108,7 @@ bool menuTextView(evt_t event) readTextFile(lines_count); break; - case EVT_KEY_FIRST(KEY_DOWN): + case EVT_ROTARY_RIGHT: if (menuVerticalOffset+NUM_BODY_LINES >= lines_count) break; else @@ -116,7 +116,7 @@ bool menuTextView(evt_t event) readTextFile(lines_count); break; - case EVT_KEY_BREAK(KEY_EXIT): + case EVT_KEY_FIRST(KEY_EXIT): popMenu(); break; } @@ -131,7 +131,7 @@ bool menuTextView(evt_t event) #endif // lcd_putsCenter(MENU_FOOTER_TOP, title, HEADER_COLOR); - drawVerticalScrollbar(LCD_W-5, 30, MENU_FOOTER_TOP-34, menuVerticalOffset, lines_count, NUM_BODY_LINES); + drawVerticalScrollbar(LCD_W-5, 50, 195, menuVerticalOffset, lines_count, NUM_BODY_LINES); return true; } From d41218eb2987fa06f0cd5d5ad8c3fb24706ef380 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Sat, 2 Apr 2016 10:46:46 +0400 Subject: [PATCH 2/5] [Horus] Improve "setup screens" responsivity feel (actions on key press instead of release) --- radio/src/gui/horus/screens_setup.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/radio/src/gui/horus/screens_setup.cpp b/radio/src/gui/horus/screens_setup.cpp index f6ca654bb..dbcf002d0 100644 --- a/radio/src/gui/horus/screens_setup.cpp +++ b/radio/src/gui/horus/screens_setup.cpp @@ -89,7 +89,7 @@ bool editZoneOption(coord_t y, const ZoneOption * option, ZoneOptionValue * valu else lcdDrawTextAtIndex(SCREENS_SETUP_2ND_COLUMN, y, STR_VCSWFUNC, 0, attr); // TODO define if (attr) { - if (event==EVT_KEY_BREAK(KEY_ENTER)) { + if (event==EVT_KEY_FIRST(KEY_ENTER)) { s_editMode = 0; if (sdListFiles(BITMAPS_PATH, BITMAPS_EXT, sizeof(value->stringValue), value->stringValue, LIST_NONE_SD_FILE)) { fileSelectionDone = false; @@ -230,13 +230,13 @@ bool menuWidgetChoice(evt_t event) break; } - case EVT_KEY_BREAK(KEY_EXIT): + case EVT_KEY_FIRST(KEY_EXIT): delete currentWidget; currentContainer->setWidget(currentZone, previousWidget); popMenu(); return false; - case EVT_KEY_BREAK(KEY_ENTER): + case EVT_KEY_FIRST(KEY_ENTER): delete previousWidget; currentContainer->createWidget(currentZone, registeredWidgets[menuHorizontalPosition]); storageDirty(EE_MODEL); @@ -319,7 +319,8 @@ bool menuWidgetsSetup(evt_t event) } if (menuVerticalPosition == i) { lcdDrawSolidRect(zone.x-padding, zone.y-padding, zone.w+2*padding, zone.h+2*padding, thickness, color); - if (event == EVT_KEY_BREAK(KEY_ENTER)) { + if (event == EVT_KEY_FIRST(KEY_ENTER)) { + killEvents(KEY_ENTER); currentZone = menuVerticalPosition; currentWidget = currentContainer->getWidget(menuVerticalPosition); if (currentWidget) { @@ -395,7 +396,7 @@ T * editThemeChoice(coord_t x, coord_t y, T * array[], uint8_t count, T * curren } if (attr && menuHorizontalPosition >= 0) { lcdDrawSolidRect(x + (menuHorizontalPosition - menuHorizontalOffset) * 56 - 3, y - 1, 57, 35, 1, TEXT_INVERTED_BGCOLOR); - if (event == EVT_KEY_BREAK(KEY_ENTER)) { + if (event == EVT_KEY_FIRST(KEY_ENTER)) { s_editMode = 0; return array[menuHorizontalPosition]; } @@ -457,7 +458,7 @@ bool menuScreensTheme(evt_t event) else if (index == optionsCount) { lcdDrawText(MENUS_MARGIN_LEFT, y, "Top bar"); drawButton(SCREENS_SETUP_2ND_COLUMN, y, "Setup", attr); - if (attr && event == EVT_KEY_BREAK(KEY_ENTER)) { + if (attr && event == EVT_KEY_FIRST(KEY_ENTER)) { currentScreen = customScreens[0]; currentContainer = topbar; pushMenu(menuWidgetsSetup); @@ -519,6 +520,7 @@ bool menuScreenSetup(int index, evt_t event) delete customScreens[index]; currentScreen = customScreens[index] = factory->create(&g_model.screenData[index].layoutData); strncpy(g_model.screenData[index].layoutName, factory->getName(), sizeof(g_model.screenData[index].layoutName)); + killEvents(KEY_ENTER); storageDirty(EE_MODEL); } break; @@ -529,7 +531,7 @@ bool menuScreenSetup(int index, evt_t event) case ITEM_SCREEN_SETUP_WIDGETS_SETUP: drawButton(SCREENS_SETUP_2ND_COLUMN, y, "Setup widgets", attr); - if (attr && event == EVT_KEY_BREAK(KEY_ENTER)) { + if (attr && event == EVT_KEY_FIRST(KEY_ENTER)) { pushMenu(menuWidgetsSetup); } break; @@ -546,7 +548,7 @@ bool menuScreenSetup(int index, evt_t event) } else if (menuPageCount > 3 && o == optionsCount) { drawButton(SCREENS_SETUP_2ND_COLUMN, y, STR_REMOVE_SCREEN, attr); - if (attr && event == EVT_KEY_BREAK(KEY_ENTER)) { + if (attr && event == EVT_KEY_LONG(KEY_ENTER)) { delete currentScreen; if (index != MAX_CUSTOM_SCREENS-1) { memmove(&g_model.screenData[index], &g_model.screenData[index + 1], sizeof(CustomScreenData) * (MAX_CUSTOM_SCREENS - index - 1)); @@ -554,6 +556,7 @@ bool menuScreenSetup(int index, evt_t event) } memset(&g_model.screenData[MAX_CUSTOM_SCREENS-1], 0, sizeof(CustomScreenData)); customScreens[MAX_CUSTOM_SCREENS-1] = NULL; + killEvents(KEY_ENTER); chainMenu(menuTabScreensSetup[index > 0 ? index : 1]); return false; } @@ -599,10 +602,11 @@ bool menuScreenAdd(evt_t event) { menuPageCount = updateMainviewsMenu(); - if (event == EVT_KEY_BREAK(KEY_ENTER)) { + if (event == EVT_KEY_FIRST(KEY_ENTER)) { customScreens[menuPageCount-2] = registeredLayouts[0]->create(&g_model.screenData[menuPageCount-2].layoutData); s_editMode = 0; menuHorizontalPosition = -1; + killEvents(KEY_ENTER); return false; } From a03f85b0838ffe542ae988efd8ffb6bf6e643c50 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Sat, 2 Apr 2016 11:06:10 +0400 Subject: [PATCH 3/5] [Horus] Switch menu pages on key press --- radio/src/gui/horus/navigation.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/radio/src/gui/horus/navigation.cpp b/radio/src/gui/horus/navigation.cpp index 906e28d59..80f00b851 100644 --- a/radio/src/gui/horus/navigation.cpp +++ b/radio/src/gui/horus/navigation.cpp @@ -412,13 +412,13 @@ bool check(check_event_t event, uint8_t curr, const MenuHandlerFunc * menuTab, u if (menuTab && !calibrationState) { int cc = curr; switch (event) { - case EVT_KEY_BREAK(KEY_PGDN): + case EVT_KEY_FIRST(KEY_PGDN): if (++cc == menuTabSize) cc = 0; break; - case EVT_KEY_BREAK(KEY_PGUP): + case EVT_KEY_FIRST(KEY_PGUP): if (cc-- == 0) cc = menuTabSize-1; break; From 21312cb1bec3f932678949c3f7ac57fc299e8134 Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Sat, 2 Apr 2016 11:27:19 +0400 Subject: [PATCH 4/5] [Horus] Calibration menu fixes --- radio/src/gui/horus/menu_general_calib.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/radio/src/gui/horus/menu_general_calib.cpp b/radio/src/gui/horus/menu_general_calib.cpp index 088c062eb..c4ad225c7 100644 --- a/radio/src/gui/horus/menu_general_calib.cpp +++ b/radio/src/gui/horus/menu_general_calib.cpp @@ -110,11 +110,20 @@ bool menuCommonCalib(evt_t event) switch (event) { case EVT_ENTRY: - case EVT_KEY_BREAK(KEY_EXIT): calibrationState = CALIB_START; break; + + case EVT_KEY_FIRST(KEY_EXIT): + if (calibrationState == CALIB_START) { + killEvents(KEY_EXIT); + popMenu(); + } + else { + calibrationState = CALIB_START; + } + break; - case EVT_KEY_BREAK(KEY_ENTER): + case EVT_KEY_FIRST(KEY_ENTER): calibrationState++; break; } From 43418e6705d743c8e317784e7a6d80613e013b5c Mon Sep 17 00:00:00 2001 From: Andre Bernet Date: Sat, 2 Apr 2016 12:19:32 +0400 Subject: [PATCH 5/5] More navigation improvements --- radio/src/gui/horus/menu_model_custom_functions.cpp | 5 +++-- radio/src/gui/horus/menu_model_custom_scripts.cpp | 5 +++-- radio/src/gui/horus/navigation.cpp | 7 +------ radio/src/gui/horus/screens_setup.cpp | 3 ++- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/radio/src/gui/horus/menu_model_custom_functions.cpp b/radio/src/gui/horus/menu_model_custom_functions.cpp index 551f2956d..8039c7a9c 100644 --- a/radio/src/gui/horus/menu_model_custom_functions.cpp +++ b/radio/src/gui/horus/menu_model_custom_functions.cpp @@ -231,8 +231,9 @@ bool menuCustomFunctions(evt_t event, CustomFunctionData * functions, CustomFunc lcdDrawSizedText(x, y, cfn->play.name, sizeof(cfn->play.name), attr); else lcdDrawTextAtIndex(x, y, STR_VCSWFUNC, 0, attr); - if (active && event==EVT_KEY_BREAK(KEY_ENTER)) { - s_editMode = 0; + if (attr) s_editMode = 0; + if (attr && event==EVT_KEY_FIRST(KEY_ENTER)) { + killEvents(KEY_ENTER); char directory[256]; if (func==FUNC_PLAY_SCRIPT) { strcpy(directory, SCRIPTS_FUNCS_PATH); diff --git a/radio/src/gui/horus/menu_model_custom_scripts.cpp b/radio/src/gui/horus/menu_model_custom_scripts.cpp index 2ef0761b1..7643db3da 100644 --- a/radio/src/gui/horus/menu_model_custom_scripts.cpp +++ b/radio/src/gui/horus/menu_model_custom_scripts.cpp @@ -68,8 +68,9 @@ bool menuModelCustomScriptOne(evt_t event) lcdDrawSizedText(SCRIPT_ONE_2ND_COLUMN_POS, y, sd.file, sizeof(sd.file), attr); else lcdDrawTextAtIndex(SCRIPT_ONE_2ND_COLUMN_POS, y, STR_VCSWFUNC, 0, attr); - if (attr && event==EVT_KEY_BREAK(KEY_ENTER) && !READ_ONLY()) { - s_editMode = 0; + if (attr) s_editMode = 0; + if (attr && event==EVT_KEY_FIRST(KEY_ENTER) && !READ_ONLY()) { + killEvents(KEY_ENTER); if (sdListFiles(SCRIPTS_MIXES_PATH, SCRIPTS_EXT, sizeof(sd.file), sd.file, LIST_NONE_SD_FILE)) { popupMenuHandler = onModelCustomScriptMenu; } diff --git a/radio/src/gui/horus/navigation.cpp b/radio/src/gui/horus/navigation.cpp index 80f00b851..f4183b50c 100644 --- a/radio/src/gui/horus/navigation.cpp +++ b/radio/src/gui/horus/navigation.cpp @@ -455,12 +455,7 @@ bool check(check_event_t event, uint8_t curr, const MenuHandlerFunc * menuTab, u } break; - case EVT_KEY_LONG(KEY_EXIT): - s_editMode = 0; // TODO needed? we call ENTRY_UP after which does the same - popMenu(); - break; - - case EVT_KEY_BREAK(KEY_EXIT): + case EVT_KEY_FIRST(KEY_EXIT): if (s_editMode > 0) { s_editMode = 0; break; diff --git a/radio/src/gui/horus/screens_setup.cpp b/radio/src/gui/horus/screens_setup.cpp index dbcf002d0..98f2ec3d8 100644 --- a/radio/src/gui/horus/screens_setup.cpp +++ b/radio/src/gui/horus/screens_setup.cpp @@ -296,7 +296,8 @@ bool menuWidgetsSetup(evt_t event) case EVT_ENTRY: menuVerticalPosition = 0; break; - case EVT_KEY_BREAK(KEY_EXIT): + case EVT_KEY_FIRST(KEY_EXIT): + killEvents(KEY_EXIT); popMenu(); return false; }