diff --git a/radio/src/gui/Taranis/menu_general.cpp b/radio/src/gui/Taranis/menu_general.cpp index 666e8a8be..f49703291 100755 --- a/radio/src/gui/Taranis/menu_general.cpp +++ b/radio/src/gui/Taranis/menu_general.cpp @@ -100,6 +100,6 @@ const MenuFuncP_PROGMEM menuTabGeneral[] PROGMEM = { void menuGeneralCustomFunctions(uint8_t event) { - MENU(STR_MENUGLOBALFUNCS, menuTabGeneral, e_GeneralCustomFunctions, NUM_CFN+1, {0, NAVIGATION_LINE_BY_LINE|4/*repeated*/}); + MENU(STR_MENUGLOBALFUNCS, menuTabGeneral, e_GeneralCustomFunctions, NUM_CFN, { NAVIGATION_LINE_BY_LINE|4/*repeated*/ }); return menuCustomFunctions(event, g_eeGeneral.customFn, globalFunctionsContext); } diff --git a/radio/src/gui/Taranis/menu_general_diaganas.cpp b/radio/src/gui/Taranis/menu_general_diaganas.cpp index 5cdfbf3cd..41cb25f73 100755 --- a/radio/src/gui/Taranis/menu_general_diaganas.cpp +++ b/radio/src/gui/Taranis/menu_general_diaganas.cpp @@ -38,11 +38,11 @@ void menuGeneralDiagAna(uint8_t event) { - SIMPLE_MENU(STR_MENUANA, menuTabGeneral, e_Ana, 2); + SIMPLE_MENU(STR_MENUANA, menuTabGeneral, e_Ana, 1); STICK_SCROLL_DISABLE(); - for (uint8_t i=0; i 9 coord_t y = MENU_TITLE_HEIGHT + 1 + (i/3)*FH; const uint8_t x_coord[] = {0, 70, 154}; @@ -65,7 +65,6 @@ void menuGeneralDiagAna(uint8_t event) uint32_t batCalV = (adcBatt + (adcBatt*g_eeGeneral.vBatCalib)/128) * BATT_SCALE; batCalV >>= 11; batCalV += 2; // because of the diode - putsVolts(LEN_CALIB_FIELDS*FW+4*FW, MENU_TITLE_HEIGHT+1+5*FH, batCalV, (m_posVert==1 ? INVERS : 0)); - - if (m_posVert==1) CHECK_INCDEC_GENVAR(event, g_eeGeneral.vBatCalib, -127, 127); + putsVolts(LEN_CALIB_FIELDS*FW+4*FW, MENU_TITLE_HEIGHT+1+5*FH, batCalV, s_editMode > 0 ? BLINK|INVERS : INVERS); + if (s_editMode > 0) CHECK_INCDEC_GENVAR(event, g_eeGeneral.vBatCalib, -127, 127); } diff --git a/radio/src/gui/Taranis/menu_general_hardware.cpp b/radio/src/gui/Taranis/menu_general_hardware.cpp index 2192ea087..87259334a 100755 --- a/radio/src/gui/Taranis/menu_general_hardware.cpp +++ b/radio/src/gui/Taranis/menu_general_hardware.cpp @@ -91,18 +91,18 @@ enum menuGeneralHwItems { void menuGeneralHardware(uint8_t event) { - MENU(STR_HARDWARE, menuTabGeneral, e_Hardware, ITEM_SETUP_HW_MAX+1, {0, LABEL(Sticks), 0, 0, 0, 0, LABEL(Pots), POTS_ROWS, LABEL(Switches), SWITCHES_ROWS, 0}); + MENU(STR_HARDWARE, menuTabGeneral, e_Hardware, ITEM_SETUP_HW_MAX, { LABEL(Sticks), 0, 0, 0, 0, LABEL(Pots), POTS_ROWS, LABEL(Switches), SWITCHES_ROWS, 0 }); - uint8_t sub = m_posVert - 1; + uint8_t sub = m_posVert; - for (uint8_t i=0; i0) ? BLINK|INVERS : INVERS) : 0); + LcdFlags attr = (sub == k ? ((s_editMode>0) ? BLINK|INVERS : INVERS) : 0); switch (k) { case ITEM_SETUP_HW_LABEL_STICKS: lcd_putsLeft(y, "Sticks"); diff --git a/radio/src/gui/Taranis/menu_general_sdmanager.cpp b/radio/src/gui/Taranis/menu_general_sdmanager.cpp index 999ed8238..a5e46889b 100755 --- a/radio/src/gui/Taranis/menu_general_sdmanager.cpp +++ b/radio/src/gui/Taranis/menu_general_sdmanager.cpp @@ -120,7 +120,7 @@ void onSdManagerMenu(const char *result) // TODO possible buffer overflows here! - uint8_t index = m_posVert-1-s_pgOfs; + uint8_t index = m_posVert-s_pgOfs; char *line = reusableBuffer.sdmanager.lines[index]; if (result == STR_SD_INFO) { @@ -159,7 +159,7 @@ void onSdManagerMenu(const char *result) strcpy_P(statusLineMsg+min((uint8_t)strlen(statusLineMsg), (uint8_t)13), STR_REMOVED); showStatusLine(); REFRESH_FILES(); - if (m_posVert == reusableBuffer.sdmanager.count) + if (m_posVert == reusableBuffer.sdmanager.count-1) m_posVert--; } /* TODO else if (result == STR_LOAD_FILE) { @@ -228,14 +228,15 @@ void menuGeneralSdManager(uint8_t _event) int lastPos = m_posVert; uint8_t event = (EVT_KEY_MASK(_event) == KEY_ENTER ? 0 : _event); - SIMPLE_MENU(SD_IS_HC() ? STR_SDHC_CARD : STR_SD_CARD, menuTabGeneral, e_Sd, 1+reusableBuffer.sdmanager.count); + SIMPLE_MENU(SD_IS_HC() ? STR_SDHC_CARD : STR_SD_CARD, menuTabGeneral, e_Sd, reusableBuffer.sdmanager.count); - int index = m_posVert-1-s_pgOfs; + int index = m_posVert-s_pgOfs; switch(_event) { case EVT_ENTRY: f_chdir(ROOT_PATH); REFRESH_FILES(); + lastPos = -1; break; case EVT_KEY_LONG(KEY_MENU): @@ -256,16 +257,14 @@ void menuGeneralSdManager(uint8_t _event) break; } else { - if (m_posVert > 0) { - if (!reusableBuffer.sdmanager.lines[index][SD_SCREEN_FILE_LENGTH+1]) { - f_chdir(reusableBuffer.sdmanager.lines[index]); - s_pgOfs = 0; - m_posVert = 1; - index = 1; - REFRESH_FILES(); - killEvents(_event); - return; - } + if (!reusableBuffer.sdmanager.lines[index][SD_SCREEN_FILE_LENGTH+1]) { + f_chdir(reusableBuffer.sdmanager.lines[index]); + s_pgOfs = 0; + m_posVert = 1; + index = 1; + REFRESH_FILES(); + killEvents(_event); + return; } } // no break @@ -348,7 +347,7 @@ void menuGeneralSdManager(uint8_t _event) bool isfile = !(fno.fattrib & AM_DIR); if (s_pgOfs == 0) { - for (uint8_t i=0; i0) && (event==EVT_KEY_FIRST(KEY_ENTER) || event==EVT_KEY_FIRST(KEY_EXIT) || IS_ROTARY_BREAK(event) || IS_ROTARY_LONG(event))) { // set the date and time into RTC chip @@ -126,9 +126,9 @@ void menuGeneralSetup(uint8_t event) } #endif - MENU(STR_MENURADIOSETUP, menuTabGeneral, e_Setup, ITEM_SETUP_MAX+1, { 0, 2, 2, 1, LABEL(SOUND), 0, 0, 0, 0, 0, 0, 0, CASE_VARIO_CPUARM(LABEL(VARIO)) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_HAPTIC(LABEL(HAPTIC)) CASE_HAPTIC(0) CASE_HAPTIC(0) CASE_HAPTIC(0) 0, LABEL(ALARMS), 0, 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, 0, CASE_REVPLUS(0) CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, CASE_SPLASH_PARAM(0) CASE_GPS(0) CASE_GPS(0) CASE_PXX(0) 0, 0, IF_FAI_CHOICE(0) CASE_MAVLINK(0) 0, 0, LABEL(TX_MODE), 0, 1/*to force edit mode*/ }); + MENU(STR_MENURADIOSETUP, menuTabGeneral, e_Setup, ITEM_SETUP_MAX, { 2, 2, 1, LABEL(SOUND), 0, 0, 0, 0, 0, 0, 0, CASE_VARIO_CPUARM(LABEL(VARIO)) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_HAPTIC(LABEL(HAPTIC)) CASE_HAPTIC(0) CASE_HAPTIC(0) CASE_HAPTIC(0) 0, LABEL(ALARMS), 0, 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, 0, CASE_REVPLUS(0) CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, CASE_SPLASH_PARAM(0) CASE_GPS(0) CASE_GPS(0) CASE_PXX(0) 0, 0, IF_FAI_CHOICE(0) CASE_MAVLINK(0) 0, 0, LABEL(TX_MODE), 0, 1/*to force edit mode*/ }); - uint8_t sub = m_posVert - 1; + int sub = m_posVert; for (unsigned int i=0; i0) ? BLINK|INVERS : INVERS); - lcd_puts(3*FW, MENU_TITLE_HEIGHT+1, STR_MODESRC); + LcdFlags attr; + LcdFlags blink = ((s_editMode>0) ? BLINK|INVERS : INVERS); - y = MENU_TITLE_HEIGHT + 1 + FH; + lcd_puts(3*FW, MENU_TITLE_HEIGHT+1, STR_MODESRC); - for (uint8_t i=1; i<=NUM_STICKS; i++) { - uint8_t chan = channel_order(i); - volatile TrainerMix *td = &g_eeGeneral.trainer.mix[chan-1]; + y = MENU_TITLE_HEIGHT + 1 + FH; + int sub = m_posVert + 1; - putsMixerSource(0, y, MIXSRC_Rud-1+chan, (m_posVert==i && CURSOR_ON_LINE()) ? INVERS : 0); + for (int i=1; i<=NUM_STICKS; i++) { + uint8_t chan = channel_order(i); + volatile TrainerMix *td = &g_eeGeneral.trainer.mix[chan-1]; - for (uint8_t j=0; j<3; j++) { + putsMixerSource(0, y, MIXSRC_Rud-1+chan, (sub==i && CURSOR_ON_LINE()) ? INVERS : 0); - attr = ((m_posVert==i && m_posHorz==j) ? blink : 0); + for (int j=0; j<3; j++) { - switch(j) { - case 0: - lcd_putsiAtt(4*FW, y, STR_TRNMODE, td->mode, attr); - if (attr&BLINK) CHECK_INCDEC_GENVAR(event, td->mode, 0, 2); - break; + attr = ((sub==i && m_posHorz==j) ? blink : 0); - case 1: - lcd_outdezAtt(11*FW, y, td->studWeight, attr); - if (attr&BLINK) CHECK_INCDEC_GENVAR(event, td->studWeight, -125, 125); - break; + switch(j) { + case 0: + lcd_putsiAtt(4*FW, y, STR_TRNMODE, td->mode, attr); + if (attr&BLINK) CHECK_INCDEC_GENVAR(event, td->mode, 0, 2); + break; - case 2: - lcd_putsiAtt(12*FW, y, STR_TRNCHN, td->srcChn, attr); - if (attr&BLINK) CHECK_INCDEC_GENVAR(event, td->srcChn, 0, 3); - break; - } + case 1: + lcd_outdezAtt(11*FW, y, td->studWeight, attr); + if (attr&BLINK) CHECK_INCDEC_GENVAR(event, td->studWeight, -125, 125); + break; + + case 2: + lcd_putsiAtt(12*FW, y, STR_TRNCHN, td->srcChn, attr); + if (attr&BLINK) CHECK_INCDEC_GENVAR(event, td->srcChn, 0, 3); + break; } - y += FH; } + y += FH; + } - attr = (m_posVert==5) ? blink : 0; - lcd_putsLeft(MENU_TITLE_HEIGHT+1+5*FH, STR_MULTIPLIER); - lcd_outdezAtt(LEN_MULTIPLIER*FW+3*FW, MENU_TITLE_HEIGHT+1+5*FH, g_eeGeneral.PPM_Multiplier+10, attr|PREC1); - if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.PPM_Multiplier, -10, 40); + attr = (sub==5) ? blink : 0; + lcd_putsLeft(MENU_TITLE_HEIGHT+1+5*FH, STR_MULTIPLIER); + lcd_outdezAtt(LEN_MULTIPLIER*FW+3*FW, MENU_TITLE_HEIGHT+1+5*FH, g_eeGeneral.PPM_Multiplier+10, attr|PREC1); + if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.PPM_Multiplier, -10, 40); - attr = (m_posVert==6) ? INVERS : 0; - if (attr) s_editMode = 0; - lcd_putsAtt(0*FW, MENU_TITLE_HEIGHT+1+6*FH, STR_CAL, attr); - for (uint8_t i=0; i<4; i++) { - uint8_t x = (i*TRAINER_CALIB_POS+16)*FW/2; + attr = (sub==6) ? INVERS : 0; + if (attr) s_editMode = 0; + lcd_putsAtt(0*FW, MENU_TITLE_HEIGHT+1+6*FH, STR_CAL, attr); + for (int i=0; i<4; i++) { + uint8_t x = (i*TRAINER_CALIB_POS+16)*FW/2; #if defined (PPM_UNIT_PERCENT_PREC1) - lcd_outdezAtt(x, MENU_TITLE_HEIGHT+1+6*FH, (g_ppmIns[i]-g_eeGeneral.trainer.calib[i])*2, PREC1); + lcd_outdezAtt(x, MENU_TITLE_HEIGHT+1+6*FH, (g_ppmIns[i]-g_eeGeneral.trainer.calib[i])*2, PREC1); #else - lcd_outdezAtt(x, MENU_TITLE_HEIGHT+1+6*FH, (g_ppmIns[i]-g_eeGeneral.trainer.calib[i])/5, 0); + lcd_outdezAtt(x, MENU_TITLE_HEIGHT+1+6*FH, (g_ppmIns[i]-g_eeGeneral.trainer.calib[i])/5, 0); #endif - } + } - if (attr) { - if (event==EVT_KEY_LONG(KEY_ENTER)){ - memcpy(g_eeGeneral.trainer.calib, g_ppmIns, sizeof(g_eeGeneral.trainer.calib)); - eeDirty(EE_GENERAL); - AUDIO_WARNING1(); - } + if (attr) { + if (event==EVT_KEY_LONG(KEY_ENTER)){ + memcpy(g_eeGeneral.trainer.calib, g_ppmIns, sizeof(g_eeGeneral.trainer.calib)); + eeDirty(EE_GENERAL); + AUDIO_WARNING1(); } } } diff --git a/radio/src/gui/Taranis/menu_model_curves.cpp b/radio/src/gui/Taranis/menu_model_curves.cpp index f06a2d8cd..b0cd2a632 100644 --- a/radio/src/gui/Taranis/menu_model_curves.cpp +++ b/radio/src/gui/Taranis/menu_model_curves.cpp @@ -289,32 +289,25 @@ void editCurveRef(coord_t x, coord_t y, CurveRef & curve, uint8_t event, uint8_t } } -#if defined(GVARS) - #define CURVE_SELECTED() (sub >= 0 && sub < MAX_CURVES) - #define GVAR_SELECTED() (sub >= MAX_CURVES) -#else - #define CURVE_SELECTED() (sub >= 0) -#endif - void menuModelCurvesAll(uint8_t event) { - SIMPLE_MENU(STR_MENUCURVES, menuTabModel, e_CurvesAll, 1+MAX_CURVES); + SIMPLE_MENU(STR_MENUCURVES, menuTabModel, e_CurvesAll, MAX_CURVES); - int8_t sub = m_posVert - 1; + int sub = m_posVert; switch (event) { case EVT_KEY_BREAK(KEY_ENTER): - if (CURVE_SELECTED() && !READ_ONLY()) { + if (!READ_ONLY()) { s_curveChan = sub; pushMenu(menuModelCurveOne); } break; } - for (uint8_t i=0; i=0 && m_posHorz<0 && event==EVT_KEY_LONG(KEY_ENTER) && !READ_ONLY()) { - killEvents(event); - CustomFunctionData *cfn = &functions[sub]; - if (!CFN_EMPTY(cfn)) - MENU_ADD_ITEM(STR_COPY); - if (clipboard.type == CLIPBOARD_TYPE_CUSTOM_FUNCTION) - MENU_ADD_ITEM(STR_PASTE); - if (!CFN_EMPTY(cfn) && CFN_EMPTY(&functions[NUM_CFN-1])) - MENU_ADD_ITEM(STR_INSERT); - if (!CFN_EMPTY(cfn)) - MENU_ADD_ITEM(STR_CLEAR); - for (int i=sub+1; i0 ? BLINK|INVERS : INVERS) : 0); + int i = k + s_pgOfs; + LcdFlags attr = (sub==i ? (s_editMode>0 ? BLINK|INVERS : INVERS) : 0); if (i == ITEM_MODEL_CUSTOMSCRIPT_FILE) { lcd_putsLeft(y, STR_SCRIPT); @@ -139,18 +139,14 @@ void menuModelCustomScripts(uint8_t event) lcd_outdezAtt(19*FW, 0, luaGetMemUsed(), 0); lcd_puts(19*FW+1, 0, STR_BYTES); - MENU(STR_MENUCUSTOMSCRIPTS, menuTabModel, e_CustomScripts, MAX_SCRIPTS+1, {0, NAVIGATION_LINE_BY_LINE|3/*repeated*/}); + MENU(STR_MENUCUSTOMSCRIPTS, menuTabModel, e_CustomScripts, MAX_SCRIPTS, { NAVIGATION_LINE_BY_LINE|3/*repeated*/ }); coord_t y; - int8_t sub = m_posVert - 1; + int8_t sub = m_posVert; - switch (event) { - case EVT_KEY_FIRST(KEY_ENTER): - if (sub >= 0) { - s_currIdx = sub; - pushMenu(menuModelCustomScriptOne); - } - break; + if (event == EVT_KEY_FIRST(KEY_ENTER)) { + s_currIdx = sub; + pushMenu(menuModelCustomScriptOne); } for (int i=0, scriptIndex=0; i 0) { posHorz += 1; } diff --git a/radio/src/gui/Taranis/menu_model_gvars.cpp b/radio/src/gui/Taranis/menu_model_gvars.cpp index 4e48e5fd3..9887322ca 100755 --- a/radio/src/gui/Taranis/menu_model_gvars.cpp +++ b/radio/src/gui/Taranis/menu_model_gvars.cpp @@ -37,7 +37,7 @@ void onGVARSMenu(const char *result) { - int8_t sub = m_posVert - 1; + int sub = m_posVert; if (result == STR_ENABLE_POPUP) { g_model.gvars[sub].popup = true; @@ -73,35 +73,21 @@ void menuModelGVars(uint8_t event) menuTitle = STR_MENUGLOBALVARS; } - MENU_FLAGS(menuTitle, menuTabModel, e_GVars, first2seconds ? CHECK_FLAG_NO_SCREEN_INDEX : 0, 1+MAX_GVARS, {0, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES}); + MENU_FLAGS(menuTitle, menuTabModel, e_GVars, first2seconds ? CHECK_FLAG_NO_SCREEN_INDEX : 0, MAX_GVARS, { NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES, NAVIGATION_LINE_BY_LINE|MAX_FLIGHT_MODES }); - uint8_t sub = m_posVert - 1; + int sub = m_posVert; -#if MAX_GVARS > 6 - for (uint8_t l=0; l0) ? BLINK|INVERS : INVERS) : 0); coord_t x = GVARS_FM_COLUMN(j-1); -#if MAX_GVARS == 6 - if (i==0 && j!=9) putsStrIdx(x+2, FH+1, STR_FP, j, SMLSIZE); -#elif MAX_GVARS <= 5 - if (i==0 && j!=9) putsStrIdx(x+2, 2*FH, STR_FP, j, SMLSIZE); -#endif - switch(j) { case 0: @@ -141,7 +127,7 @@ void menuModelGVars(uint8_t event) } } - if (m_posVert > 0 && m_posHorz < 0 && event==EVT_KEY_LONG(KEY_ENTER)) { + if (m_posHorz < 0 && event==EVT_KEY_LONG(KEY_ENTER)) { killEvents(event); if (g_model.gvars[sub].popup) MENU_ADD_ITEM(STR_DISABLE_POPUP); diff --git a/radio/src/gui/Taranis/menu_model_inputs_mixes.cpp b/radio/src/gui/Taranis/menu_model_inputs_mixes.cpp index 95d39e819..f398dcfd0 100644 --- a/radio/src/gui/Taranis/menu_model_inputs_mixes.cpp +++ b/radio/src/gui/Taranis/menu_model_inputs_mixes.cpp @@ -44,9 +44,9 @@ FlightModesType editFlightModes(coord_t x, coord_t y, uint8_t event, FlightModes { lcd_putsColumnLeft(x, y, STR_FLMODE); - uint8_t posHorz = m_posHorz; + int posHorz = m_posHorz; - for (uint8_t p=0; p0 ? BLINK|INVERS : INVERS) : 0); + LcdFlags attr = (sub==i ? (s_editMode>0 ? BLINK|INVERS : INVERS) : 0); switch(i) { case EXPO_FIELD_INPUT_NAME: @@ -500,7 +500,7 @@ void menuModelMixOne(uint8_t event) int8_t sub = m_posVert; int8_t editMode = s_editMode; - for (uint8_t k=0; k= LCD_LINES-1) { @@ -513,7 +513,7 @@ void menuModelMixOne(uint8_t event) } int8_t i = k; - uint8_t attr = (sub==i ? (editMode>0 ? BLINK|INVERS : INVERS) : 0); + LcdFlags attr = (sub==i ? (editMode>0 ? BLINK|INVERS : INVERS) : 0); switch(i) { case MIX_FIELD_NAME: editSingleName(COLUMN_X+MIXES_2ND_COLUMN, y, STR_MIXNAME, md2->name, sizeof(md2->name), event, attr); @@ -735,7 +735,7 @@ void menuModelExpoMix(uint8_t expo, uint8_t event) } break; case EVT_KEY_BREAK(KEY_ENTER): - if (sub != 0 && (!s_currCh || (s_copyMode && !s_copyTgtOfs)) && !READ_ONLY()) { + if ((!s_currCh || (s_copyMode && !s_copyTgtOfs)) && !READ_ONLY()) { s_copyMode = (s_copyMode == COPY_MODE ? MOVE_MODE : COPY_MODE); s_copySrcIdx = s_currIdx; s_copySrcCh = chn; @@ -751,7 +751,7 @@ void menuModelExpoMix(uint8_t expo, uint8_t event) s_copyMode = 0; s_copyTgtOfs = 0; } - else if (sub != 0) { + else { if (READ_ONLY()) { if (!s_currCh) { pushMenu(expo ? menuModelExpoOne : menuModelMixOne); @@ -829,14 +829,14 @@ void menuModelExpoMix(uint8_t expo, uint8_t event) sub = m_posVert; s_currCh = 0; - uint8_t cur = 1; - uint8_t i = 0; + int cur = 0; + int i = 0; - for (uint8_t ch=1; ch<=(expo ? NUM_INPUTS : NUM_CHNOUT); ch++) { + for (int ch=1; ch<=(expo ? NUM_INPUTS : NUM_CHNOUT); ch++) { void *pointer = NULL; MixData * &md = (MixData * &)pointer; ExpoData * &ed = (ExpoData * &)pointer; - coord_t y = MENU_TITLE_HEIGHT-FH+1+(cur-s_pgOfs)*FH; + coord_t y = MENU_TITLE_HEIGHT+1+(cur-s_pgOfs)*FH; if (expo ? (ichn+1 == ch && EXPO_VALID(ed)) : (isrcRaw && md->destCh+1 == ch)) { - if (s_pgOfs < cur && cur-s_pgOfs < LCD_LINES) { + if (cur-s_pgOfs >= 0 && cur-s_pgOfs < NUM_BODY_LINES) { if (expo) { putsMixerSource(0, y, ch, 0); } @@ -847,7 +847,7 @@ void menuModelExpoMix(uint8_t expo, uint8_t event) uint8_t mixCnt = 0; do { if (s_copyMode) { - if (s_copyMode == MOVE_MODE && s_pgOfs < cur && cur-s_pgOfs < 8 && s_copySrcCh == ch && s_copyTgtOfs != 0 && i == (s_copySrcIdx + (s_copyTgtOfs<0))) { + if (s_copyMode == MOVE_MODE && cur-s_pgOfs >= 0 && cur-s_pgOfs < NUM_BODY_LINES && s_copySrcCh == ch && s_copyTgtOfs != 0 && i == (s_copySrcIdx + (s_copyTgtOfs<0))) { lcd_rect(expo ? 18 : 22, y-1, expo ? LCD_W-18 : LCD_W-22, 9, DOTTED); cur++; y+=FH; } @@ -859,7 +859,7 @@ void menuModelExpoMix(uint8_t expo, uint8_t event) else if (sub == cur) { s_currIdx = i; } - if (s_pgOfs < cur && cur-s_pgOfs < 8) { + if (cur-s_pgOfs >= 0 && cur-s_pgOfs < NUM_BODY_LINES) { uint8_t attr = ((s_copyMode || sub != cur) ? 0 : INVERS); if (expo) { ed->weight = GVAR_MENU_ITEM(EXPO_LINE_WEIGHT_POS, y, ed->weight, MIN_EXPO_WEIGHT, 100, attr | (isExpoActive(i) ? BOLD : 0), 0, event); @@ -901,7 +901,7 @@ void menuModelExpoMix(uint8_t expo, uint8_t event) } cur++; y+=FH; mixCnt++; i++; if (expo) ed++; else md++; } while (expo ? (ichn+1 == ch && EXPO_VALID(ed)) : (isrcRaw && md->destCh+1 == ch)); - if (s_copyMode == MOVE_MODE && s_pgOfs < cur && cur-s_pgOfs < LCD_LINES && s_copySrcCh == ch && i == (s_copySrcIdx + (s_copyTgtOfs<0))) { + if (s_copyMode == MOVE_MODE && cur-s_pgOfs >= 0 && cur-s_pgOfs < NUM_BODY_LINES && s_copySrcCh == ch && i == (s_copySrcIdx + (s_copyTgtOfs<0))) { lcd_rect(expo ? EXPO_LINE_SELECT_POS : 22, y-1, expo ? LCD_W-EXPO_LINE_SELECT_POS : LCD_W-22, 9, DOTTED); cur++; y+=FH; } @@ -915,7 +915,7 @@ void menuModelExpoMix(uint8_t expo, uint8_t event) attr = INVERS; } } - if (s_pgOfs < cur && cur-s_pgOfs < LCD_LINES) { + if (cur-s_pgOfs >= 0 && cur-s_pgOfs < NUM_BODY_LINES) { if (expo) { putsMixerSource(0, y, ch, attr); } diff --git a/radio/src/gui/Taranis/menu_model_limits.cpp b/radio/src/gui/Taranis/menu_model_limits.cpp index ede297b26..9aeb162a8 100755 --- a/radio/src/gui/Taranis/menu_model_limits.cpp +++ b/radio/src/gui/Taranis/menu_model_limits.cpp @@ -37,7 +37,7 @@ bool isThrottleOutput(uint8_t ch) { - for (uint8_t i=0; idestCh==ch && mix->srcRaw==MIXSRC_Thr) return true; @@ -94,7 +94,7 @@ enum LimitsItems { void onLimitsMenu(const char *result) { - uint8_t ch = m_posVert - 1; + int ch = m_posVert; if (result == STR_RESET) { LimitData *ld = limitAddress(ch); @@ -115,7 +115,7 @@ void onLimitsMenu(const char *result) void menuModelLimits(uint8_t event) { - uint8_t sub = m_posVert - 1; + int sub = m_posVert; if (sub < NUM_CHNOUT) { #if defined(PPM_CENTER_ADJUSTABLE) || defined(PPM_UNIT_US) @@ -126,7 +126,7 @@ void menuModelLimits(uint8_t event) #endif } - MENU(STR_MENULIMITS, menuTabModel, e_Limits, 1+NUM_CHNOUT+1, {0, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, 0}); + MENU(STR_MENULIMITS, menuTabModel, e_Limits, NUM_CHNOUT+1, { NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, NAVIGATION_LINE_BY_LINE|ITEM_LIMITS_MAXROW, 0 }); if (sub=0) { displayColumnHeader(STR_LIMITS_HEADERS, m_posHorz); @@ -139,7 +139,7 @@ void menuModelLimits(uint8_t event) eeDirty(EE_MODEL); } - for (uint8_t i=0; i0) ? BLINK|INVERS : INVERS) : 0); + for (int j=0; j0) ? BLINK|INVERS : INVERS) : 0); uint8_t active = (attr && s_editMode>0) ; if (active) STICK_SCROLL_DISABLE(); switch(j) diff --git a/radio/src/gui/Taranis/menu_model_logical_switches.cpp b/radio/src/gui/Taranis/menu_model_logical_switches.cpp index 256557a2d..217b1f4e5 100755 --- a/radio/src/gui/Taranis/menu_model_logical_switches.cpp +++ b/radio/src/gui/Taranis/menu_model_logical_switches.cpp @@ -75,7 +75,7 @@ void putsEdgeDelayParam(coord_t x, coord_t y, LogicalSwitchData *cs, uint8_t lat void onLogicalSwitchesMenu(const char *result) { - int8_t sub = m_posVert-1; + int8_t sub = m_posVert; LogicalSwitchData * cs = lswAddress(sub); if (result == STR_COPY) { @@ -96,17 +96,17 @@ void menuModelLogicalSwitches(uint8_t event) { INCDEC_DECLARE_VARS(EE_MODEL); - MENU(STR_MENULOGICALSWITCHES, menuTabModel, e_LogicalSwitches, NUM_LOGICAL_SWITCH+1, {0, NAVIGATION_LINE_BY_LINE|LS_FIELD_LAST/*repeated...*/}); + MENU(STR_MENULOGICALSWITCHES, menuTabModel, e_LogicalSwitches, NUM_LOGICAL_SWITCH, { NAVIGATION_LINE_BY_LINE|LS_FIELD_LAST/*repeated...*/ }); int k = 0; - int sub = m_posVert - 1; + int sub = m_posVert; horzpos_t horz = m_posHorz; if (horz>=0) { displayColumnHeader(STR_CSW_HEADERS, horz); } - if (sub>=0 && horz<0 && event==EVT_KEY_LONG(KEY_ENTER) && !READ_ONLY()) { + if (horz<0 && event==EVT_KEY_LONG(KEY_ENTER) && !READ_ONLY()) { killEvents(event); LogicalSwitchData * cs = lswAddress(sub); if (cs->func) @@ -118,7 +118,7 @@ void menuModelLogicalSwitches(uint8_t event) menuHandler = onLogicalSwitchesMenu; } - for (int i=0; i0) ? BLINK|INVERS : INVERS) : 0); diff --git a/radio/src/gui/Taranis/menu_model_select.cpp b/radio/src/gui/Taranis/menu_model_select.cpp index 51db6f2cb..b07f17adf 100644 --- a/radio/src/gui/Taranis/menu_model_select.cpp +++ b/radio/src/gui/Taranis/menu_model_select.cpp @@ -36,7 +36,6 @@ #include "../../opentx.h" #define MODELSIZE_POS_X 170 - #define MODELSEL_W 133 void onModelSelectMenu(const char *result) @@ -94,11 +93,11 @@ void menuModelSelect(uint8_t event) int8_t oldSub = m_posVert; - check_submenu_simple(_event_, MAX_MODELS-1); + check_submenu_simple(_event_, MAX_MODELS); if (s_editMode > 0) s_editMode = 0; - int8_t sub = m_posVert; + int sub = m_posVert; switch (event) { diff --git a/radio/src/gui/Taranis/menu_model_setup.cpp b/radio/src/gui/Taranis/menu_model_setup.cpp index 0c9033e5b..d77ad75f7 100644 --- a/radio/src/gui/Taranis/menu_model_setup.cpp +++ b/radio/src/gui/Taranis/menu_model_setup.cpp @@ -135,13 +135,12 @@ void menuModelSetup(uint8_t event) #define TRAINER_CHANNELS_ROWS() IF_TRAINER_ON(1) #define PORT_CHANNELS_ROWS(x) (x==INTERNAL_MODULE ? INTERNAL_MODULE_CHANNELS_ROWS() : (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS() : TRAINER_CHANNELS_ROWS())) #define FAILSAFE_ROWS(x) ((g_model.moduleData[x].rfProtocol==RF_PROTO_X16 || g_model.moduleData[x].rfProtocol==RF_PROTO_LR12) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : HIDDEN_ROW) - #define MODEL_SETUP_MAX_LINES (1+ITEM_MODEL_SETUP_MAX) #define POT_WARN_ITEMS() ((g_model.nPotsToWarn >> 6) ? (uint8_t)NUM_POTS : (uint8_t)0) #define TIMER_ROWS 2|NAVIGATION_LINE_BY_LINE, 0, CASE_PERSISTENT_TIMERS(0) 0, 0 bool CURSOR_ON_CELL = (m_posHorz >= 0); - MENU_TAB({ 0, 0, 0, TIMER_ROWS, TIMER_ROWS, TIMER_ROWS, 0, 1, 0, 0, LABEL(Throttle), 0, 0, 0, LABEL(PreflightCheck), 0, 0, uint8_t(NAVIGATION_LINE_BY_LINE|getSwitchWarningsAllowed()), ONE_2x2POS_DEFINED() ? TITLE_ROW : HIDDEN_ROW, POT_WARN_ITEMS(), NAVIGATION_LINE_BY_LINE|(NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1), 0, LABEL(InternalModule), 0, IF_INTERNAL_MODULE_ON(1), IF_INTERNAL_MODULE_ON(IS_D8_RX(0) ? (uint8_t)1 : (uint8_t)2), IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), LABEL(ExternalModule), (IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0, EXTERNAL_MODULE_CHANNELS_ROWS(), (IS_MODULE_XJT(EXTERNAL_MODULE) && IS_D8_RX(EXTERNAL_MODULE)) ? (uint8_t)1 : (IS_MODULE_PPM(EXTERNAL_MODULE) || IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW, IF_EXTERNAL_MODULE_XJT(FAILSAFE_ROWS(EXTERNAL_MODULE)), LABEL(Trainer), 0, TRAINER_CHANNELS_ROWS(), IF_TRAINER_ON(2)}); + MENU_TAB({ 0, 0, TIMER_ROWS, TIMER_ROWS, TIMER_ROWS, 0, 1, 0, 0, LABEL(Throttle), 0, 0, 0, LABEL(PreflightCheck), 0, 0, uint8_t(NAVIGATION_LINE_BY_LINE|getSwitchWarningsAllowed()), ONE_2x2POS_DEFINED() ? TITLE_ROW : HIDDEN_ROW, POT_WARN_ITEMS(), NAVIGATION_LINE_BY_LINE|(NUM_STICKS+NUM_POTS+NUM_ROTARY_ENCODERS-1), 0, LABEL(InternalModule), 0, IF_INTERNAL_MODULE_ON(1), IF_INTERNAL_MODULE_ON(IS_D8_RX(0) ? (uint8_t)1 : (uint8_t)2), IF_INTERNAL_MODULE_ON(FAILSAFE_ROWS(INTERNAL_MODULE)), LABEL(ExternalModule), (IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0, EXTERNAL_MODULE_CHANNELS_ROWS(), (IS_MODULE_XJT(EXTERNAL_MODULE) && IS_D8_RX(EXTERNAL_MODULE)) ? (uint8_t)1 : (IS_MODULE_PPM(EXTERNAL_MODULE) || IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW, IF_EXTERNAL_MODULE_XJT(FAILSAFE_ROWS(EXTERNAL_MODULE)), LABEL(Trainer), 0, TRAINER_CHANNELS_ROWS(), IF_TRAINER_ON(2)}); - MENU_CHECK(menuTabModel, e_ModelSetup, MODEL_SETUP_MAX_LINES); + MENU_CHECK(menuTabModel, e_ModelSetup, ITEM_MODEL_SETUP_MAX); #if (defined(DSM2) || defined(PXX)) if (menuEvent) { @@ -152,14 +151,14 @@ void menuModelSetup(uint8_t event) TITLE(STR_MENUSETUP); - uint8_t sub = m_posVert - 1; + uint8_t sub = m_posVert; int8_t editMode = s_editMode; for (uint8_t i=0; i= 16) { + if (m_posVert > 16) { ch = 16; } diff --git a/radio/src/gui/Taranis/menu_model_telemetry.cpp b/radio/src/gui/Taranis/menu_model_telemetry.cpp index dbacaa0b5..3b6f75ea6 100644 --- a/radio/src/gui/Taranis/menu_model_telemetry.cpp +++ b/radio/src/gui/Taranis/menu_model_telemetry.cpp @@ -179,7 +179,7 @@ bool isAltSensor(int sensor) bool isVoltsSensor(int sensor) { - return isSensorUnit(sensor, UNIT_VOLTS); + return isSensorUnit(sensor, UNIT_VOLTS) || isSensorUnit(sensor, UNIT_CELLS); } bool isCurrentSensor(int sensor) @@ -214,18 +214,18 @@ void menuModelSensor(uint8_t event) putsTelemetryChannelValue(SENSOR_2ND_COLUMN, 0, s_currIdx, getValue(MIXSRC_FIRST_TELEM+3*s_currIdx), LEFT); - int8_t sub = m_posVert; + int sub = m_posVert; - for (uint8_t i=0; i0 ? BLINK|INVERS : INVERS) : 0); + LcdFlags attr = (sub==k ? (s_editMode>0 ? BLINK|INVERS : INVERS) : 0); switch (k) { @@ -396,7 +396,7 @@ void menuModelSensor(uint8_t event) void onSensorMenu(const char *result) { - uint8_t index = m_posVert - 1 - ITEM_TELEMETRY_SENSOR1; + int index = m_posVert - ITEM_TELEMETRY_SENSOR1; if (index < TELEM_VALUES_MAX) { if (result == STR_EDIT) { @@ -408,7 +408,7 @@ void onSensorMenu(const char *result) if (index 0) REPEAT_LAST_CURSOR_MOVE() -#define POS_VERT_INIT (menuTab ? (MAXCOL((uint16_t)1) >= HIDDEN_ROW ? (MAXCOL((uint16_t)2) >= HIDDEN_ROW ? 3 : 2) : 1) : 0) +#define POS_VERT_INIT (menuTab ? (MAXCOL((uint16_t)0) >= HIDDEN_ROW ? (MAXCOL((uint16_t)1) >= HIDDEN_ROW ? 2 : 1) : 0) : 0) #define POS_HORZ_INIT(posVert) ((COLATTR(posVert) & NAVIGATION_LINE_BY_LINE) ? -1 : 0) #define EDIT_MODE_INIT 0 // TODO enum diff --git a/radio/src/gui/Taranis/navigation.cpp b/radio/src/gui/Taranis/navigation.cpp index d71dad190..95e270814 100755 --- a/radio/src/gui/Taranis/navigation.cpp +++ b/radio/src/gui/Taranis/navigation.cpp @@ -231,7 +231,7 @@ void onLongMenuPress(const char *result) tmr10ms_t menuEntryTime; -void 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) +void check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *horTab, uint8_t horTabMax, vertpos_t rowcount, uint8_t flags) { vertpos_t l_posVert = m_posVert; horzpos_t l_posHorz = m_posHorz; @@ -239,7 +239,7 @@ void check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t uint8_t maxcol = MAXCOL(l_posVert); if (menuTab) { - int8_t cc = curr; + int cc = curr; switch (event) { case EVT_KEY_LONG(KEY_MENU): if (menuTab == menuTabModel) { @@ -307,10 +307,8 @@ void check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t l_posHorz = 0; break; } - if (!menuTab || l_posVert>0) { - if (READ_ONLY_UNLOCKED()) { - s_editMode = (s_editMode<=0); - } + if (READ_ONLY_UNLOCKED()) { + s_editMode = (s_editMode<=0); } break; @@ -363,7 +361,7 @@ void check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t } do { - INC(l_posVert, POS_VERT_INIT, maxrow); + INC(l_posVert, POS_VERT_INIT, rowcount-1); } while (CURSOR_NOT_ALLOWED_IN_ROW(l_posVert)); s_editMode = 0; // if we go down, we must be in this mode @@ -394,7 +392,7 @@ void check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t } do { - DEC(l_posVert, POS_VERT_INIT, maxrow); + DEC(l_posVert, POS_VERT_INIT, rowcount-1); } while (CURSOR_NOT_ALLOWED_IN_ROW(l_posVert)); s_editMode = 0; // if we go up, we must be in this mode @@ -407,33 +405,48 @@ void check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t break; } - if (l_posVert == 0 || (l_posVert==2 && MAXCOL(vertpos_t(1)) >= HIDDEN_ROW) || (l_posVert==3 && MAXCOL(vertpos_t(1)) >= HIDDEN_ROW && MAXCOL(vertpos_t(2)) >= HIDDEN_ROW)) { + int linesCount = rowcount; + + if (l_posVert == 0 || (l_posVert==1 && MAXCOL(vertpos_t(0)) >= HIDDEN_ROW) || (l_posVert==2 && MAXCOL(vertpos_t(0)) >= HIDDEN_ROW && MAXCOL(vertpos_t(1)) >= HIDDEN_ROW)) { s_pgOfs = 0; + if (horTab) { + linesCount = 0; + for (int i=0; i max) { + if (rowcount > NUM_BODY_LINES) { while (1) { vertpos_t firstLine = 0; - for (int numLines=0; firstLine<=maxrow && numLines lastLine) { + if (l_posVert >= lastLine) { s_pgOfs++; } else { + linesCount = s_pgOfs + NUM_BODY_LINES; + for (int i=lastLine; imax+s_pgOfs) { - s_pgOfs = l_posVert-max; + if (l_posVert>=NUM_BODY_LINES+s_pgOfs) { + s_pgOfs = l_posVert-NUM_BODY_LINES+1; } - else if (l_posVert<1+s_pgOfs) { - s_pgOfs = l_posVert-1; + else if (l_posVert NUM_BODY_LINES && scrollbar_X) { - displayScrollbar(scrollbar_X, MENU_TITLE_HEIGHT, LCD_H-MENU_TITLE_HEIGHT-MENU_NAVIG_HEIGHT, s_pgOfs, menuTab ? maxrow : maxrow+1, NUM_BODY_LINES); + if (scrollbar_X && linesCount > NUM_BODY_LINES) { + displayScrollbar(scrollbar_X, MENU_TITLE_HEIGHT, LCD_H-MENU_TITLE_HEIGHT-MENU_NAVIG_HEIGHT, s_pgOfs, linesCount, NUM_BODY_LINES); } m_posVert = l_posVert; @@ -459,14 +471,14 @@ void check(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t } -void check_simple(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, vertpos_t maxrow) +void check_simple(check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, vertpos_t rowcount) { - check(event, curr, menuTab, menuTabSize, 0, 0, maxrow); + check(event, curr, menuTab, menuTabSize, 0, 0, rowcount); } -void check_submenu_simple(check_event_t event, uint8_t maxrow) +void check_submenu_simple(check_event_t event, uint8_t rowcount) { - check_simple(event, 0, 0, 0, maxrow); + check_simple(event, 0, 0, 0, rowcount); } void repeatLastCursorMove(uint8_t event)