1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-18 22:05:10 +03:00

Screen index hidden on GVARS screen (after 2 seconds)

This commit is contained in:
Bertrand Songis 2014-02-23 19:09:17 +01:00
parent 7195ad3806
commit ed6fc15a13
3 changed files with 291 additions and 135 deletions

View file

@ -4091,8 +4091,9 @@ void menuModelGVars(uint8_t event)
{ {
tmr10ms_t tmr10ms = get_tmr10ms(); tmr10ms_t tmr10ms = get_tmr10ms();
const char * menuTitle; const char * menuTitle;
bool first2seconds = (tmr10ms - menuEntryTime > 200); /*2 seconds*/
if (tmr10ms - menuEntryTime > 200/*2 seconds*/) { if (first2seconds) {
menuTitle = "GLOBAL V."; // TODO translate menuTitle = "GLOBAL V."; // TODO translate
for (int i=0; i<MAX_GVARS; i++) { for (int i=0; i<MAX_GVARS; i++) {
putsStrIdx(GVARS_FM_COLUMN(i)-16, 1, STR_FP, i, SMLSIZE|(getFlightPhase()==i ? INVERS : 0)); putsStrIdx(GVARS_FM_COLUMN(i)-16, 1, STR_FP, i, SMLSIZE|(getFlightPhase()==i ? INVERS : 0));
@ -4102,7 +4103,7 @@ void menuModelGVars(uint8_t event)
menuTitle = STR_MENUGLOBALVARS; menuTitle = STR_MENUGLOBALVARS;
} }
MENU(menuTitle, menuTabModel, e_GVars, 1+MAX_GVARS, {0, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES}); MENU_FLAGS(menuTitle, menuTabModel, e_GVars, first2seconds ? CHECK_FLAG_NO_SCREEN_INDEX : 0, 1+MAX_GVARS, {0, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES, NAVIGATION_LINE_BY_LINE|MAX_PHASES});
uint8_t sub = m_posVert - 1; uint8_t sub = m_posVert - 1;

View file

@ -362,47 +362,21 @@ void onLongMenuPress(const char *result)
tmr10ms_t menuEntryTime; tmr10ms_t menuEntryTime;
#endif #endif
bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *horTab, uint8_t horTabMax, vertpos_t maxrow) #if defined(PCBTARANIS)
bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *horTab, uint8_t horTabMax, vertpos_t maxrow, uint8_t flags)
{ {
vertpos_t l_posVert = m_posVert; vertpos_t l_posVert = m_posVert;
horzpos_t l_posHorz = m_posHorz; horzpos_t l_posHorz = m_posHorz;
uint8_t maxcol = MAXCOL(l_posVert); uint8_t maxcol = MAXCOL(l_posVert);
#ifdef NAVIGATION_POT1
// check pot 1 - if changed -> scroll values
static int16_t p1val;
static int16_t p1valprev;
p1valdiff = (p1val-calibratedStick[6]) / SCROLL_POT1_TH;
if (p1valdiff) {
p1valdiff = (p1valprev-calibratedStick[6]) / 2;
p1val = calibratedStick[6];
}
p1valprev = calibratedStick[6];
#endif
#ifdef NAVIGATION_POT2
// check pot 2 - if changed -> scroll menu
static int16_t p2valprev;
p2valdiff = (p2valprev-calibratedStick[4]) / SCROLL_TH;
if (p2valdiff) p2valprev = calibratedStick[4];
#endif
#ifdef NAVIGATION_POT3
// check pot 3 if changed -> cursor down/up
static int16_t p3valprev;
int8_t scrollUD = (p3valprev-calibratedStick[5]) / SCROLL_TH;
if (scrollUD) p3valprev = calibratedStick[5];
#else
#define scrollUD 0 #define scrollUD 0
#endif
if (p2valdiff || scrollUD || p1valdiff) backlightOn(); // on keypress turn the light on if (p2valdiff || scrollUD || p1valdiff) backlightOn(); // on keypress turn the light on
if (menuTab) { if (menuTab) {
uint8_t attr = 0; uint8_t attr = 0;
#if defined(PCBTARANIS)
int8_t cc = curr; int8_t cc = curr;
switch(event) { switch(event) {
case EVT_KEY_LONG(KEY_MENU): case EVT_KEY_LONG(KEY_MENU):
@ -439,7 +413,271 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
chainMenu((MenuFuncP)pgm_read_adr(&menuTab[cc])); chainMenu((MenuFuncP)pgm_read_adr(&menuTab[cc]));
return false; return false;
} }
s_noScroll = 0;
if (!(flags&CHECK_FLAG_NO_SCREEN_INDEX)) {
displayScreenIndex(curr, menuTabSize, attr);
}
lcd_filled_rect(0, 0, LCD_W, FH, SOLID, FILL_WHITE|GREY_DEFAULT);
}
DISPLAY_PROGRESS_BAR(menuTab ? lcdLastPos-2*FW-((curr+1)/10*FWNUM)-2 : 20*FW+1);
if (s_editMode<=0) {
if (scrollUD) {
l_posVert = limit((int8_t)0, (int8_t)(l_posVert - scrollUD), (int8_t)maxrow);
l_posHorz = min((uint8_t)l_posHorz, MAXCOL(l_posVert));
}
if (p2valdiff && l_posVert>0) {
l_posHorz = limit((int8_t)0, (int8_t)((uint8_t)l_posHorz - p2valdiff), (int8_t)maxcol);
}
}
switch(event)
{
case EVT_ENTRY:
menuEntryTime = get_tmr10ms();
l_posVert = POS_VERT_INIT;
l_posHorz = POS_HORZ_INIT(l_posVert);
SET_SCROLLBAR_X(LCD_W-1);
#if defined(ROTARY_ENCODER_NAVIGATION)
if (menuTab) {
s_editMode = EDIT_MODE_INIT;
break;
}
// no break
#else #else
s_editMode = EDIT_MODE_INIT;
break;
#endif
case EVT_ENTRY_UP:
menuEntryTime = get_tmr10ms();
s_editMode = 0;
l_posHorz = POS_HORZ_INIT(l_posVert);
SET_SCROLLBAR_X(LCD_W-1);
break;
case EVT_ROTARY_BREAK:
if (s_editMode > 1) break;
if (m_posHorz < 0 && maxcol > 0 && READ_ONLY_UNLOCKED()) {
l_posHorz = 0;
break;
}
if (!menuTab || l_posVert>0) {
if (READ_ONLY_UNLOCKED()) {
s_editMode = (s_editMode<=0);
}
}
break;
#if defined(ROTARY_ENCODER_NAVIGATION)
case EVT_ROTARY_LONG:
if (s_editMode > 1) break;
killEvents(event);
if (l_posVert != POS_VERT_INIT) {
l_posVert = POS_VERT_INIT;
s_editMode = EDIT_MODE_INIT;
break;
}
// no break
#endif
case EVT_KEY_LONG(KEY_EXIT):
s_editMode = 0; // TODO needed? we call ENTRY_UP after which does the same
popMenu();
return false;
case EVT_KEY_BREAK(KEY_EXIT):
#if defined(ROTARY_ENCODER_NAVIGATION)
if (s_editMode == 0)
s_editMode = EDIT_MODE_INIT;
else
#endif
if (s_editMode>0) {
s_editMode = 0;
break;
}
if (l_posHorz >= 0 && (COLATTR(l_posVert) & NAVIGATION_LINE_BY_LINE)) {
l_posHorz = -1;
}
else
{
uint8_t posVertInit = POS_VERT_INIT;
if (s_pgOfs != 0 || l_posVert != posVertInit) {
s_pgOfs = 0;
l_posVert = posVertInit;
l_posHorz = POS_HORZ_INIT(l_posVert);
}
else {
popMenu();
return false;
}
}
break;
CASE_EVT_ROTARY_MOVE_RIGHT
if (s_editMode != 0) break;
if ((COLATTR(l_posVert) & NAVIGATION_LINE_BY_LINE)) {
if (l_posHorz >= 0) {
INC(l_posHorz, 0, maxcol);
break;
}
}
else {
if (l_posHorz < maxcol) {
l_posHorz++;
break;
}
else {
l_posHorz = 0;
if (!IS_ROTARY_MOVE_RIGHT(event))
break;
}
}
do {
INC(l_posVert, POS_VERT_INIT, maxrow);
} while (CURSOR_NOT_ALLOWED_IN_ROW(l_posVert));
s_editMode = 0; // if we go down, we must be in this mode
l_posHorz = POS_HORZ_INIT(l_posVert);
break;
CASE_EVT_ROTARY_MOVE_LEFT
if (s_editMode != 0) break;
if ((COLATTR(l_posVert) & NAVIGATION_LINE_BY_LINE)) {
if (l_posHorz >= 0) {
DEC(l_posHorz, 0, maxcol);
break;
}
}
else {
if (l_posHorz > 0) {
l_posHorz--;
break;
}
else if (IS_ROTARY_MOVE_LEFT(event) && s_editMode == 0) {
l_posHorz = 0xff;
}
else {
l_posHorz = maxcol;
break;
}
}
do {
DEC(l_posVert, POS_VERT_INIT, maxrow);
} while (CURSOR_NOT_ALLOWED_IN_ROW(l_posVert));
s_editMode = 0; // if we go up, we must be in this mode
if ((COLATTR(l_posVert) & NAVIGATION_LINE_BY_LINE))
l_posHorz = -1;
else
l_posHorz = min((uint8_t)l_posHorz, MAXCOL(l_posVert));
break;
}
#if defined(CPUARM)
if (l_posVert<1) s_pgOfs=0;
else if (menuTab && horTab) {
vertpos_t realPosVert = l_posVert;
vertpos_t realPgOfs = s_pgOfs;
vertpos_t realMaxrow = maxrow;
for (vertpos_t i=1; i<=maxrow; i++) {
if (MAXCOL(i) == HIDDEN_ROW) {
realMaxrow--;
if (i < l_posVert)
realPosVert--;
if (i < s_pgOfs)
realPgOfs--;
}
}
if (realPosVert>(LCD_LINES-1)+realPgOfs) realPgOfs = realPosVert-(LCD_LINES-1);
else if (realPosVert<1+realPgOfs) realPgOfs = realPosVert-1;
s_pgOfs = realPgOfs;
for (vertpos_t i=1; i<=realPgOfs; i++) {
if (MAXCOL(i) == HIDDEN_ROW) {
s_pgOfs++;
}
}
maxrow = realMaxrow;
}
else {
uint8_t max = menuTab ? LCD_LINES-1 : LCD_LINES-2;
if (l_posVert>max+s_pgOfs) s_pgOfs = l_posVert-max;
else if (l_posVert<1+s_pgOfs) s_pgOfs = l_posVert-1;
}
#if LCD_W >= 212
if (maxrow > LCD_LINES-1 && scrollbar_X)
displayScrollbar(scrollbar_X, FH, LCD_H-FH, s_pgOfs, menuTab ? maxrow : maxrow+1, LCD_LINES-1);
#endif
#else
uint8_t max = menuTab ? LCD_LINES-1 : LCD_LINES-2;
if (l_posVert<1) s_pgOfs=0;
else if (l_posVert>max+s_pgOfs) s_pgOfs = l_posVert-max;
else if (l_posVert<1+s_pgOfs) s_pgOfs = l_posVert-1;
#endif
m_posVert = l_posVert;
m_posHorz = l_posHorz;
if (s_pgOfs > 0) {
l_posVert--;
if (l_posVert == s_pgOfs && CURSOR_NOT_ALLOWED_IN_ROW(l_posVert))
s_pgOfs = l_posVert-1;
}
return true;
}
#else // defined(PCBTARANIS)
bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *horTab, uint8_t horTabMax, vertpos_t maxrow)
{
vertpos_t l_posVert = m_posVert;
horzpos_t l_posHorz = m_posHorz;
uint8_t maxcol = MAXCOL(l_posVert);
#if defined(NAVIGATION_POT1)
// check pot 1 - if changed -> scroll values
static int16_t p1val;
static int16_t p1valprev;
p1valdiff = (p1val-calibratedStick[6]) / SCROLL_POT1_TH;
if (p1valdiff) {
p1valdiff = (p1valprev-calibratedStick[6]) / 2;
p1val = calibratedStick[6];
}
p1valprev = calibratedStick[6];
#endif
#if defined(NAVIGATION_POT2)
// check pot 2 - if changed -> scroll menu
static int16_t p2valprev;
p2valdiff = (p2valprev-calibratedStick[4]) / SCROLL_TH;
if (p2valdiff) p2valprev = calibratedStick[4];
#endif
#if defined(NAVIGATION_POT3)
// check pot 3 if changed -> cursor down/up
static int16_t p3valprev;
int8_t scrollUD = (p3valprev-calibratedStick[5]) / SCROLL_TH;
if (scrollUD) p3valprev = calibratedStick[5];
#else
#define scrollUD 0
#endif
if (p2valdiff || scrollUD || p1valdiff) backlightOn(); // on keypress turn the light on
if (menuTab) {
uint8_t attr = 0;
if (l_posVert==0 && !s_noScroll) { if (l_posVert==0 && !s_noScroll) {
attr = INVERS; attr = INVERS;
@ -500,14 +738,10 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
attr = INVERS|BLINK; attr = INVERS|BLINK;
#endif #endif
} }
#endif
s_noScroll = 0; s_noScroll = 0;
displayScreenIndex(curr, menuTabSize, attr); displayScreenIndex(curr, menuTabSize, attr);
#if defined(PCBTARANIS)
lcd_filled_rect(0, 0, LCD_W, FH, SOLID, FILL_WHITE|GREY_DEFAULT);
#endif
} }
DISPLAY_PROGRESS_BAR(menuTab ? lcdLastPos-2*FW-((curr+1)/10*FWNUM)-2 : 20*FW+1); DISPLAY_PROGRESS_BAR(menuTab ? lcdLastPos-2*FW-((curr+1)/10*FWNUM)-2 : 20*FW+1);
@ -543,21 +777,7 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
break; break;
#endif #endif
#if defined(PCBTARANIS) #if defined(ROTARY_ENCODER_NAVIGATION)
case EVT_ENTRY_UP:
menuEntryTime = get_tmr10ms();
s_editMode = 0;
l_posHorz = POS_HORZ_INIT(l_posVert);
SET_SCROLLBAR_X(LCD_W-1);
break;
case EVT_ROTARY_BREAK:
if (s_editMode > 1) break;
if (m_posHorz < 0 && maxcol > 0 && READ_ONLY_UNLOCKED()) {
l_posHorz = 0;
break;
}
#elif defined(ROTARY_ENCODER_NAVIGATION)
case EVT_ENTRY_UP: case EVT_ENTRY_UP:
s_editMode = 0; s_editMode = 0;
SET_SCROLLBAR_X(LCD_W-1); SET_SCROLLBAR_X(LCD_W-1);
@ -567,9 +787,7 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
if (s_editMode > 1) break; if (s_editMode > 1) break;
#endif #endif
#if !defined(PCBTARANIS)
case EVT_KEY_FIRST(KEY_ENTER): case EVT_KEY_FIRST(KEY_ENTER):
#endif
if (!menuTab || l_posVert>0) { if (!menuTab || l_posVert>0) {
if (READ_ONLY_UNLOCKED()) { if (READ_ONLY_UNLOCKED()) {
s_editMode = (s_editMode<=0); s_editMode = (s_editMode<=0);
@ -603,24 +821,7 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
s_editMode = 0; s_editMode = 0;
break; break;
} }
#if defined(PCBTARANIS)
if (l_posHorz >= 0 && (COLATTR(l_posVert) & NAVIGATION_LINE_BY_LINE)) {
l_posHorz = -1;
}
else
{
uint8_t posVertInit = POS_VERT_INIT;
if (s_pgOfs != 0 || l_posVert != posVertInit) {
s_pgOfs = 0;
l_posVert = posVertInit;
l_posHorz = POS_HORZ_INIT(l_posVert);
}
else {
popMenu();
return false;
}
}
#else
if (l_posVert==0 || !menuTab) { if (l_posVert==0 || !menuTab) {
popMenu(); // beeps itself popMenu(); // beeps itself
return false; return false;
@ -630,39 +831,16 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
l_posVert = 0; l_posVert = 0;
l_posHorz = 0; l_posHorz = 0;
} }
#endif
break; break;
#if !defined(PCBTARANIS)
case EVT_KEY_REPT(KEY_RIGHT): //inc case EVT_KEY_REPT(KEY_RIGHT): //inc
if (l_posHorz==maxcol) break; if (l_posHorz==maxcol) break;
// no break // no break
case EVT_KEY_FIRST(KEY_RIGHT)://inc case EVT_KEY_FIRST(KEY_RIGHT)://inc
if (!horTab || s_editMode>0) break; if (!horTab || s_editMode>0) break;
#endif
#if defined(PCBTARANIS) #if defined(ROTARY_ENCODER_NAVIGATION)
CASE_EVT_ROTARY_MOVE_RIGHT
if (s_editMode != 0) break;
if ((COLATTR(l_posVert) & NAVIGATION_LINE_BY_LINE)) {
if (l_posHorz >= 0) {
INC(l_posHorz, 0, maxcol);
break;
}
}
else {
if (l_posHorz < maxcol) {
l_posHorz++;
break;
}
else {
l_posHorz = 0;
if (!IS_ROTARY_MOVE_RIGHT(event))
break;
}
}
#elif defined(ROTARY_ENCODER_NAVIGATION)
CASE_EVT_ROTARY_MOVE_RIGHT CASE_EVT_ROTARY_MOVE_RIGHT
if (s_editMode != 0) break; if (s_editMode != 0) break;
if (l_posHorz < maxcol) { if (l_posHorz < maxcol) {
@ -679,61 +857,31 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
break; break;
#endif #endif
#if !defined(PCBTARANIS)
case EVT_KEY_REPT(KEY_DOWN): //inc case EVT_KEY_REPT(KEY_DOWN): //inc
if (!IS_ROTARY_RIGHT(event) && l_posVert==maxrow) break; if (!IS_ROTARY_RIGHT(event) && l_posVert==maxrow) break;
// no break // no break
case EVT_KEY_FIRST(KEY_DOWN): //inc case EVT_KEY_FIRST(KEY_DOWN): //inc
if (s_editMode>0) break; if (s_editMode>0) break;
#endif
do { do {
INC(l_posVert, POS_VERT_INIT, maxrow); INC(l_posVert, POS_VERT_INIT, maxrow);
} while (CURSOR_NOT_ALLOWED_IN_ROW(l_posVert)); } while (CURSOR_NOT_ALLOWED_IN_ROW(l_posVert));
#if defined(ROTARY_ENCODER_NAVIGATION) || defined(PCBTARANIS) #if defined(ROTARY_ENCODER_NAVIGATION)
s_editMode = 0; // if we go down, we must be in this mode s_editMode = 0; // if we go down, we must be in this mode
#endif #endif
#if defined(PCBTARANIS)
l_posHorz = POS_HORZ_INIT(l_posVert);
#else
l_posHorz = min(l_posHorz, MAXCOL(l_posVert)); l_posHorz = min(l_posHorz, MAXCOL(l_posVert));
#endif
break; break;
#if !defined(PCBTARANIS)
case EVT_KEY_REPT(KEY_LEFT): //dec case EVT_KEY_REPT(KEY_LEFT): //dec
if (l_posHorz==0) break; if (l_posHorz==0) break;
// no break // no break
case EVT_KEY_FIRST(KEY_LEFT)://dec case EVT_KEY_FIRST(KEY_LEFT)://dec
if (!horTab || s_editMode>0) break; if (!horTab || s_editMode>0) break;
#endif
#if defined(PCBTARANIS) #if defined(ROTARY_ENCODER_NAVIGATION)
CASE_EVT_ROTARY_MOVE_LEFT
if (s_editMode != 0) break;
if ((COLATTR(l_posVert) & NAVIGATION_LINE_BY_LINE)) {
if (l_posHorz >= 0) {
DEC(l_posHorz, 0, maxcol);
break;
}
}
else {
if (l_posHorz > 0) {
l_posHorz--;
break;
}
else if (IS_ROTARY_MOVE_LEFT(event) && s_editMode == 0) {
l_posHorz = 0xff;
}
else {
l_posHorz = maxcol;
break;
}
}
#elif defined(ROTARY_ENCODER_NAVIGATION)
CASE_EVT_ROTARY_MOVE_LEFT CASE_EVT_ROTARY_MOVE_LEFT
if (s_editMode != 0) break; if (s_editMode != 0) break;
if (l_posHorz > 0) { if (l_posHorz > 0) {
@ -752,13 +900,11 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
break; break;
#endif #endif
#if !defined(PCBTARANIS)
case EVT_KEY_REPT(KEY_UP): //dec case EVT_KEY_REPT(KEY_UP): //dec
if (!IS_ROTARY_LEFT(event) && l_posVert==0) break; if (!IS_ROTARY_LEFT(event) && l_posVert==0) break;
// no break // no break
case EVT_KEY_FIRST(KEY_UP): //dec case EVT_KEY_FIRST(KEY_UP): //dec
if (s_editMode>0) break; if (s_editMode>0) break;
#endif
do { do {
DEC(l_posVert, POS_VERT_INIT, maxrow); DEC(l_posVert, POS_VERT_INIT, maxrow);
@ -768,14 +914,7 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
s_editMode = 0; // if we go up, we must be in this mode s_editMode = 0; // if we go up, we must be in this mode
#endif #endif
#if defined(PCBTARANIS)
if ((COLATTR(l_posVert) & NAVIGATION_LINE_BY_LINE))
l_posHorz = -1;
else
l_posHorz = min((uint8_t)l_posHorz, MAXCOL(l_posVert));
#else
l_posHorz = min((uint8_t)l_posHorz, MAXCOL(l_posVert)); l_posHorz = min((uint8_t)l_posHorz, MAXCOL(l_posVert));
#endif
break; break;
} }
@ -833,6 +972,7 @@ bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t
#endif #endif
return true; return true;
} }
#endif
MenuFuncP g_menuStack[5]; MenuFuncP g_menuStack[5];
uint8_t g_menuPos[4]; uint8_t g_menuPos[4];

View file

@ -230,7 +230,14 @@ int8_t checkIncDecGen(uint8_t event, int8_t i_val, int8_t i_min, int8_t i_max);
#else #else
#define NAVIGATION_LINE_BY_LINE 0 #define NAVIGATION_LINE_BY_LINE 0
#endif #endif
bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *subTab, uint8_t subTabMax, vertpos_t maxrow);
#if defined(PCBTARANIS)
#define CHECK_FLAG_NO_SCREEN_INDEX 1
bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *horTab, uint8_t horTabMax, vertpos_t maxrow, uint8_t flags=0);
#else
bool check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *horTab, uint8_t horTabMax, vertpos_t maxrow);
#endif
bool check_simple(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, vertpos_t maxrow); bool check_simple(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, vertpos_t maxrow);
bool check_submenu_simple(check_event_t event, uint8_t maxrow); bool check_submenu_simple(check_event_t event, uint8_t maxrow);
@ -246,11 +253,19 @@ void title(const pm_char * s);
#define MENU_CHECK(tab, menu, lines_count) \ #define MENU_CHECK(tab, menu, lines_count) \
check(event, menu, tab, DIM(tab), mstate_tab, DIM(mstate_tab)-1, (lines_count)-1) check(event, menu, tab, DIM(tab), mstate_tab, DIM(mstate_tab)-1, (lines_count)-1)
#define MENU_CHECK_FLAGS(tab, menu, flags, lines_count) \
check(event, menu, tab, DIM(tab), mstate_tab, DIM(mstate_tab)-1, (lines_count)-1, flags)
#define MENU(title, tab, menu, lines_count, ...) \ #define MENU(title, tab, menu, lines_count, ...) \
MENU_TAB(__VA_ARGS__); \ MENU_TAB(__VA_ARGS__); \
if (!MENU_CHECK(tab, menu, lines_count)) return; \ if (!MENU_CHECK(tab, menu, lines_count)) return; \
TITLE(title) TITLE(title)
#define MENU_FLAGS(title, tab, menu, flags, lines_count, ...) \
MENU_TAB(__VA_ARGS__); \
if (!MENU_CHECK_FLAGS(tab, menu, flags, lines_count)) return; \
TITLE(title)
#define SIMPLE_MENU_NOTITLE(tab, menu, lines_count) \ #define SIMPLE_MENU_NOTITLE(tab, menu, lines_count) \
if (!check_simple(event,menu,tab,DIM(tab),(lines_count)-1)) return; if (!check_simple(event,menu,tab,DIM(tab),(lines_count)-1)) return;