From 4c4d3bc24d4cc624f0558c236d85d72933784038 Mon Sep 17 00:00:00 2001 From: bsongis Date: Sat, 4 Jul 2015 14:17:09 +0200 Subject: [PATCH] Fixes #2413 --- radio/src/gui/9X/menus.h | 49 ++++++++++++++++---------------- radio/src/gui/Taranis/menus.h | 4 +-- radio/src/gui/Taranis/popups.cpp | 2 +- radio/src/sdcard.cpp | 27 ++++++++++-------- 4 files changed, 43 insertions(+), 39 deletions(-) diff --git a/radio/src/gui/9X/menus.h b/radio/src/gui/9X/menus.h index fd9556ec4..aa2832559 100755 --- a/radio/src/gui/9X/menus.h +++ b/radio/src/gui/9X/menus.h @@ -389,7 +389,7 @@ void displayWarning(uint8_t event); #define POPUP_WARNING(...) #define POPUP_CONFIRMATION(...) #define POPUP_INPUT(...) - #define WARNING_INFO_FLAGS 0 + #define WARNING_INFO_FLAGS 0 #define SET_WARNING_INFO(...) #elif defined(CPUARM) #define DISPLAY_WARNING (*popupFunc) @@ -399,23 +399,24 @@ void displayWarning(uint8_t event); #define WARNING_INFO_FLAGS s_warning_info_flags #define SET_WARNING_INFO(info, len, flags) (s_warning_info = info, s_warning_info_len = len, s_warning_info_flags = flags) #else - #define DISPLAY_WARNING displayWarning - #define POPUP_WARNING(s) s_warning = s - #define POPUP_CONFIRMATION(s) (s_warning = s, s_warning_type = WARNING_TYPE_CONFIRM) - #define WARNING_INFO_FLAGS ZCHAR + #define DISPLAY_WARNING displayWarning + #define POPUP_WARNING(s) s_warning = s + #define POPUP_CONFIRMATION(s) (s_warning = s, s_warning_type = WARNING_TYPE_CONFIRM) + #define WARNING_INFO_FLAGS ZCHAR #define SET_WARNING_INFO(info, len, flags) (s_warning_info = info, s_warning_info_len = len) #endif #if defined(SDCARD) || (defined(ROTARY_ENCODER_NAVIGATION) && !defined(CPUM64)) #define NAVIGATION_MENUS #define MENU_ADD_ITEM(s) s_menu[s_menu_count++] = s - #define MENU_MAX_LINES 6 + #define MENU_MAX_LINES 6 + #define MENU_MAX_DISPLAY_LINES MENU_MAX_LINES #if defined(SDCARD) - #define MENU_ADD_SD_ITEM(s) MENU_ADD_ITEM(s) + #define MENU_ADD_SD_ITEM(s) MENU_ADD_ITEM(s) #else #define MENU_ADD_SD_ITEM(s) #endif - #define MENU_LINE_LENGTH (LEN_MODEL_NAME+1) + #define MENU_LINE_LENGTH (LEN_MODEL_NAME+1) extern const char *s_menu[MENU_MAX_LINES]; extern uint16_t s_menu_count; extern uint8_t s_menu_flags; @@ -427,7 +428,7 @@ void displayWarning(uint8_t event); #endif #if defined(SDCARD) - #define STATUS_LINE_LENGTH 32 + #define STATUS_LINE_LENGTH 32 extern char statusLineMsg[STATUS_LINE_LENGTH]; void showStatusLine(); void drawStatusLine(); @@ -436,7 +437,7 @@ void displayWarning(uint8_t event); #endif #if defined(CPUARM) - #define TEXT_FILENAME_MAXLEN 40 + #define TEXT_FILENAME_MAXLEN 40 extern char s_text_file[TEXT_FILENAME_MAXLEN]; void menuTextView(uint8_t event); void pushMenuTextView(const char *filename); @@ -444,30 +445,30 @@ void displayWarning(uint8_t event); void pushModelNotes(); #endif -#define LABEL(...) (uint8_t)-1 +#define LABEL(...) (uint8_t)-1 #define KEY_MOVE_UP KEY_UP #define KEY_MOVE_DOWN KEY_DOWN -#define CURSOR_MOVED_LEFT(event) (IS_ROTARY_LEFT(event) || EVT_KEY_MASK(event) == KEY_LEFT) -#define CURSOR_MOVED_RIGHT(event) (IS_ROTARY_RIGHT(event) || EVT_KEY_MASK(event) == KEY_RIGHT) -#define CASE_EVT_ROTARY_MOVE_RIGHT CASE_EVT_ROTARY_RIGHT -#define CASE_EVT_ROTARY_MOVE_LEFT CASE_EVT_ROTARY_LEFT -#define IS_ROTARY_MOVE_RIGHT IS_ROTARY_RIGHT -#define IS_ROTARY_MOVE_LEFT IS_ROTARY_LEFT +#define CURSOR_MOVED_LEFT(event) (IS_ROTARY_LEFT(event) || EVT_KEY_MASK(event) == KEY_LEFT) +#define CURSOR_MOVED_RIGHT(event) (IS_ROTARY_RIGHT(event) || EVT_KEY_MASK(event) == KEY_RIGHT) +#define CASE_EVT_ROTARY_MOVE_RIGHT CASE_EVT_ROTARY_RIGHT +#define CASE_EVT_ROTARY_MOVE_LEFT CASE_EVT_ROTARY_LEFT +#define IS_ROTARY_MOVE_RIGHT IS_ROTARY_RIGHT +#define IS_ROTARY_MOVE_LEFT IS_ROTARY_LEFT #if defined(ROTARY_ENCODER_NAVIGATION) void repeatLastCursorMove(uint8_t event); - #define REPEAT_LAST_CURSOR_MOVE() { if (EVT_KEY_MASK(event) >= 0x0e) putEvent(event); else repeatLastCursorMove(event); } - #define MOVE_CURSOR_FROM_HERE() if (m_posHorz > 0) REPEAT_LAST_CURSOR_MOVE() + #define REPEAT_LAST_CURSOR_MOVE() { if (EVT_KEY_MASK(event) >= 0x0e) putEvent(event); else repeatLastCursorMove(event); } + #define MOVE_CURSOR_FROM_HERE() if (m_posHorz > 0) REPEAT_LAST_CURSOR_MOVE() #else void repeatLastCursorMove(uint8_t event); - #define REPEAT_LAST_CURSOR_MOVE() repeatLastCursorMove(event) - #define MOVE_CURSOR_FROM_HERE() REPEAT_LAST_CURSOR_MOVE() + #define REPEAT_LAST_CURSOR_MOVE() repeatLastCursorMove(event) + #define MOVE_CURSOR_FROM_HERE() REPEAT_LAST_CURSOR_MOVE() #endif -#define POS_VERT_INIT 0 -#define POS_HORZ_INIT(posVert) 0 -#define EDIT_MODE_INIT -1 +#define POS_VERT_INIT 0 +#define POS_HORZ_INIT(posVert) 0 +#define EDIT_MODE_INIT -1 typedef int16_t (*FnFuncP) (int16_t x); void DrawFunction(FnFuncP fn, uint8_t offset=0); diff --git a/radio/src/gui/Taranis/menus.h b/radio/src/gui/Taranis/menus.h index f27d38304..79d577abc 100755 --- a/radio/src/gui/Taranis/menus.h +++ b/radio/src/gui/Taranis/menus.h @@ -327,8 +327,8 @@ extern uint8_t s_warning_info_flags; #define NAVIGATION_MENUS #define MENU_ADD_ITEM(s) do { s_menu_offset_type = MENU_OFFSET_INTERNAL; if (s_menu_count < MENU_MAX_LINES) s_menu[s_menu_count++] = s; } while (0) -#define MENU_MAX_LINES 12 -#define MENU_MAX_DISPLAY_LINES 6 +#define MENU_MAX_LINES 12 +#define MENU_MAX_DISPLAY_LINES 6 #define MENU_ADD_SD_ITEM(s) MENU_ADD_ITEM(s) #define MENU_LINE_LENGTH (LEN_MODEL_NAME+12) extern const char *s_menu[MENU_MAX_LINES]; diff --git a/radio/src/gui/Taranis/popups.cpp b/radio/src/gui/Taranis/popups.cpp index 8607a12b3..9eb322a37 100755 --- a/radio/src/gui/Taranis/popups.cpp +++ b/radio/src/gui/Taranis/popups.cpp @@ -128,7 +128,7 @@ const char * displayMenu(uint8_t event) { const char * result = NULL; - uint8_t display_count = min(s_menu_count, MENU_MAX_DISPLAY_LINES); + uint8_t display_count = min(s_menu_count, MENU_MAX_DISPLAY_LINES); uint8_t y = (display_count >= 5 ? MENU_Y - FH - 1 : MENU_Y); drawFilledRect(MENU_X, y, MENU_W, display_count * (FH+1) + 2, SOLID, ERASE); lcd_rect(MENU_X, y, MENU_W, display_count * (FH+1) + 2); diff --git a/radio/src/sdcard.cpp b/radio/src/sdcard.cpp index afdb85f58..b67dabbaa 100644 --- a/radio/src/sdcard.cpp +++ b/radio/src/sdcard.cpp @@ -79,7 +79,7 @@ bool listSdFiles(const char *path, const char *extension, const uint8_t maxlen, s_last_menu_offset = 0; memset(reusableBuffer.modelsel.menu_bss, 0, sizeof(reusableBuffer.modelsel.menu_bss)); } - else if (s_menu_offset == s_menu_count - MENU_MAX_LINES) { + else if (s_menu_offset == s_menu_count - MENU_MAX_DISPLAY_LINES) { s_last_menu_offset = 0xffff; memset(reusableBuffer.modelsel.menu_bss, 0, sizeof(reusableBuffer.modelsel.menu_bss)); } @@ -88,11 +88,11 @@ bool listSdFiles(const char *path, const char *extension, const uint8_t maxlen, return true; } else if (s_menu_offset > s_last_menu_offset) { - memmove(reusableBuffer.modelsel.menu_bss[0], reusableBuffer.modelsel.menu_bss[1], (MENU_MAX_LINES-1)*MENU_LINE_LENGTH); - memset(reusableBuffer.modelsel.menu_bss[MENU_MAX_LINES-1], 0xff, MENU_LINE_LENGTH); + memmove(reusableBuffer.modelsel.menu_bss[0], reusableBuffer.modelsel.menu_bss[1], (MENU_MAX_DISPLAY_LINES-1)*MENU_LINE_LENGTH); + memset(reusableBuffer.modelsel.menu_bss[MENU_MAX_DISPLAY_LINES-1], 0xff, MENU_LINE_LENGTH); } else { - memmove(reusableBuffer.modelsel.menu_bss[1], reusableBuffer.modelsel.menu_bss[0], (MENU_MAX_LINES-1)*MENU_LINE_LENGTH); + memmove(reusableBuffer.modelsel.menu_bss[1], reusableBuffer.modelsel.menu_bss[0], (MENU_MAX_DISPLAY_LINES-1)*MENU_LINE_LENGTH); memset(reusableBuffer.modelsel.menu_bss[0], 0, MENU_LINE_LENGTH); } @@ -136,21 +136,23 @@ bool listSdFiles(const char *path, const char *extension, const uint8_t maxlen, s_last_menu_offset++; } else { - for (uint8_t i=0; i=0; i--) { + for (int i=MENU_MAX_DISPLAY_LINES-1; i>=0; i--) { char *line = reusableBuffer.modelsel.menu_bss[i]; if (line[0] == '\0' || strcasecmp(fn, line) > 0) { if (i > 0) memmove(reusableBuffer.modelsel.menu_bss[0], reusableBuffer.modelsel.menu_bss[1], sizeof(reusableBuffer.modelsel.menu_bss[i]) * i); @@ -159,13 +161,14 @@ bool listSdFiles(const char *path, const char *extension, const uint8_t maxlen, break; } } - for (uint8_t i=0; i s_last_menu_offset) { - if (strcasecmp(fn, reusableBuffer.modelsel.menu_bss[MENU_MAX_LINES-2]) > 0 && strcasecmp(fn, reusableBuffer.modelsel.menu_bss[MENU_MAX_LINES-1]) < 0) { - memset(reusableBuffer.modelsel.menu_bss[MENU_MAX_LINES-1], 0, MENU_LINE_LENGTH); - strcpy(reusableBuffer.modelsel.menu_bss[MENU_MAX_LINES-1], fn); + if (strcasecmp(fn, reusableBuffer.modelsel.menu_bss[MENU_MAX_DISPLAY_LINES-2]) > 0 && strcasecmp(fn, reusableBuffer.modelsel.menu_bss[MENU_MAX_DISPLAY_LINES-1]) < 0) { + memset(reusableBuffer.modelsel.menu_bss[MENU_MAX_DISPLAY_LINES-1], 0, MENU_LINE_LENGTH); + strcpy(reusableBuffer.modelsel.menu_bss[MENU_MAX_DISPLAY_LINES-1], fn); } } else {