fix(bw): menu navigation issues for 9X type radios (#4884)
This commit is contained in:
@@ -90,7 +90,7 @@ void menuModelFlightModeOne(event_t event)
|
||||
#endif
|
||||
0, 0,(uint8_t)-1, 2, 2, 2, 2, 2};
|
||||
|
||||
check(event, 0, nullptr, 0, (s_currIdx == 0) ? mstate_tab_fm1 : mstate_tab_others, DIM(mstate_tab_others)-1, ITEM_MODEL_FLIGHT_MODE_MAX - HEADER_LINE - (s_currIdx==0 ? (ITEM_MODEL_FLIGHT_MODE_FADE_IN-ITEM_MODEL_FLIGHT_MODE_SWITCH-TRIMS_LINES) : 0));
|
||||
check(event, 0, nullptr, 0, (s_currIdx == 0) ? mstate_tab_fm1 : mstate_tab_others, DIM(mstate_tab_others)-1, ITEM_MODEL_FLIGHT_MODE_MAX - (s_currIdx==0 ? (ITEM_MODEL_FLIGHT_MODE_FADE_IN-ITEM_MODEL_FLIGHT_MODE_SWITCH-TRIMS_LINES) : 0));
|
||||
|
||||
title(STR_MENUFLIGHTMODE);
|
||||
|
||||
|
||||
@@ -124,7 +124,7 @@ void menuModelSelect(event_t event)
|
||||
|
||||
int8_t oldSub = menuVerticalPosition;
|
||||
|
||||
check_submenu_simple(_event_, MAX_MODELS - HEADER_LINE);
|
||||
check_submenu_simple(_event_, MAX_MODELS);
|
||||
|
||||
if (s_editMode > 0) s_editMode = 0;
|
||||
|
||||
|
||||
@@ -24,10 +24,13 @@
|
||||
MenuHandlerFunc menuHandlers[5];
|
||||
event_t menuEvent = 0;
|
||||
uint8_t menuVerticalPositions[4];
|
||||
uint8_t menuVerticalOffsets[4];
|
||||
uint8_t menuLevel = 0;
|
||||
|
||||
void popMenu()
|
||||
{
|
||||
killEvents(KEY_EXIT);
|
||||
|
||||
assert(menuLevel > 0);
|
||||
menuLevel = menuLevel - 1;
|
||||
menuEvent = EVT_ENTRY_UP;
|
||||
@@ -63,6 +66,7 @@ void pushMenu(MenuHandlerFunc newMenu)
|
||||
else {
|
||||
menuVerticalPositions[menuLevel] = menuVerticalPosition;
|
||||
}
|
||||
menuVerticalOffsets[menuLevel] = menuVerticalOffset;
|
||||
|
||||
menuLevel++;
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@ extern vertpos_t menuVerticalOffset;
|
||||
extern uint8_t menuCalibrationState;
|
||||
extern MenuHandlerFunc menuHandlers[5];
|
||||
extern uint8_t menuVerticalPositions[4];
|
||||
extern uint8_t menuVerticalOffsets[4];
|
||||
extern uint8_t menuLevel;
|
||||
extern event_t menuEvent;
|
||||
|
||||
|
||||
@@ -148,7 +148,8 @@ int checkIncDec(event_t event, int val, int i_min, int i_max,
|
||||
|
||||
tmr10ms_t menuEntryTime;
|
||||
|
||||
#define MAXCOL(row) (horTab ? *(horTab+min(row, (vertpos_t)horTabMax)) : (const uint8_t)0)
|
||||
#define MAXCOL_RAW(row) (horTab ? *(horTab+min(row, (vertpos_t)horTabMax)) : (const uint8_t)0)
|
||||
#define MAXCOL(row) (MAXCOL_RAW(row) >= HIDDEN_ROW ? MAXCOL_RAW(row) : (const uint8_t)(MAXCOL_RAW(row) & (~NAVIGATION_LINE_BY_LINE)))
|
||||
#define POS_HORZ_INIT(posVert) 0
|
||||
|
||||
uint8_t chgMenu(uint8_t curr, const MenuHandler * menuTab, uint8_t menuTabSize, int direction)
|
||||
@@ -272,7 +273,7 @@ void check(event_t event, uint8_t curr, const MenuHandler *menuTab,
|
||||
case EVT_KEY_FIRST(KEY_DOWN):
|
||||
if (s_editMode>0) break;
|
||||
do {
|
||||
INC(l_posVert, 0, maxrow);
|
||||
INC(l_posVert, 0, maxrow - 1);
|
||||
} while (CURSOR_NOT_ALLOWED_IN_ROW(l_posVert));
|
||||
l_posHorz = min<horzpos_t>(l_posHorz, MAXCOL(l_posVert));
|
||||
break;
|
||||
@@ -293,7 +294,7 @@ void check(event_t event, uint8_t curr, const MenuHandler *menuTab,
|
||||
if (s_editMode>0) break;
|
||||
|
||||
do {
|
||||
DEC(l_posVert, 0, maxrow);
|
||||
DEC(l_posVert, 0, maxrow - 1);
|
||||
} while (CURSOR_NOT_ALLOWED_IN_ROW(l_posVert));
|
||||
l_posHorz = min((uint8_t)l_posHorz, MAXCOL(l_posVert));
|
||||
break;
|
||||
|
||||
+2
-2
@@ -148,14 +148,14 @@ inline bool IS_KEY_EVT(event_t evt, uint8_t key)
|
||||
|
||||
inline bool IS_NEXT_EVENT(event_t evt)
|
||||
{
|
||||
return evt == EVT_KEY_FIRST(KEY_DOWN) || evt == EVT_KEY_REPT(KEY_DOWN) ||
|
||||
return evt == EVT_KEY_FIRST(KEY_RIGHT) || evt == EVT_KEY_REPT(KEY_RIGHT) ||
|
||||
evt == EVT_KEY_FIRST(KEY_MINUS) || evt == EVT_KEY_REPT(KEY_MINUS) ||
|
||||
evt == EVT_ROTARY_RIGHT;
|
||||
}
|
||||
|
||||
inline bool IS_PREVIOUS_EVENT(event_t evt)
|
||||
{
|
||||
return evt == EVT_KEY_FIRST(KEY_UP) || evt == EVT_KEY_REPT(KEY_UP) ||
|
||||
return evt == EVT_KEY_FIRST(KEY_LEFT) || evt == EVT_KEY_REPT(KEY_LEFT) ||
|
||||
evt == EVT_KEY_FIRST(KEY_PLUS) || evt == EVT_KEY_REPT(KEY_PLUS) ||
|
||||
evt == EVT_ROTARY_LEFT;
|
||||
}
|
||||
|
||||
+8
-2
@@ -492,8 +492,14 @@ void guiMain(event_t evt)
|
||||
|
||||
if (menuEvent) {
|
||||
// we have a popupMenuActive entry or exit event
|
||||
menuVerticalPosition =
|
||||
(menuEvent == EVT_ENTRY_UP) ? menuVerticalPositions[menuLevel] : 0;
|
||||
if (menuEvent == EVT_ENTRY_UP) {
|
||||
menuVerticalPosition = menuVerticalPositions[menuLevel];
|
||||
menuVerticalOffset = menuVerticalOffsets[menuLevel];
|
||||
} else {
|
||||
menuVerticalPosition = 0;
|
||||
menuVerticalOffset = 0;
|
||||
}
|
||||
|
||||
menuHorizontalPosition = 0;
|
||||
evt = menuEvent;
|
||||
menuEvent = 0;
|
||||
|
||||
Reference in New Issue
Block a user