From 51ae30cc27f396727d7b091ac9c73a980415e7b8 Mon Sep 17 00:00:00 2001 From: bsongis Date: Wed, 27 May 2015 07:12:19 +0200 Subject: [PATCH] Fixes #2335 --- radio/src/gui/9X/popups.cpp | 3 +-- radio/src/gui/Taranis/menus.h | 7 ++++++- radio/src/gui/Taranis/popups.cpp | 9 +++++---- radio/src/sdcard.cpp | 3 +++ 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/radio/src/gui/9X/popups.cpp b/radio/src/gui/9X/popups.cpp index 810b245c1..4c97bf67e 100755 --- a/radio/src/gui/9X/popups.cpp +++ b/radio/src/gui/9X/popups.cpp @@ -149,8 +149,7 @@ const char * displayMenu(uint8_t event) { const char * result = NULL; - uint8_t display_count = min(s_menu_count, (uint16_t)MENU_MAX_LINES); - + uint8_t display_count = min(s_menu_count, MENU_MAX_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/gui/Taranis/menus.h b/radio/src/gui/Taranis/menus.h index 283a51809..adc996854 100755 --- a/radio/src/gui/Taranis/menus.h +++ b/radio/src/gui/Taranis/menus.h @@ -326,7 +326,7 @@ extern uint8_t 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) #define NAVIGATION_MENUS -#define MENU_ADD_ITEM(s) s_menu[s_menu_count++] = s +#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_ADD_SD_ITEM(s) MENU_ADD_ITEM(s) @@ -335,6 +335,11 @@ extern const char *s_menu[MENU_MAX_LINES]; extern uint16_t s_menu_count; extern uint8_t s_menu_flags; extern uint16_t s_menu_offset; +enum { + MENU_OFFSET_INTERNAL, + MENU_OFFSET_EXTERNAL +}; +extern uint8_t s_menu_offset_type; const char * displayMenu(uint8_t event); extern void (*menuHandler)(const char *result); diff --git a/radio/src/gui/Taranis/popups.cpp b/radio/src/gui/Taranis/popups.cpp index b55afd760..8607a12b3 100755 --- a/radio/src/gui/Taranis/popups.cpp +++ b/radio/src/gui/Taranis/popups.cpp @@ -51,6 +51,7 @@ uint8_t s_menu_item = 0; uint16_t s_menu_count = 0; uint8_t s_menu_flags = 0; uint16_t s_menu_offset = 0; +uint8_t s_menu_offset_type = MENU_OFFSET_INTERNAL; void (*menuHandler)(const char *result); void displayBox(const char *title) @@ -127,13 +128,13 @@ const char * displayMenu(uint8_t event) { const char * result = NULL; - uint8_t display_count = min(s_menu_count, (uint16_t)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); for (uint8_t i=0; i(display_count, MENU_MAX_DISPLAY_LINES) - 1; if (s_menu_count > MENU_MAX_DISPLAY_LINES) { s_menu_offset = s_menu_count - MENU_MAX_DISPLAY_LINES; result = STR_UPDATE_LIST; @@ -179,7 +180,7 @@ const char * displayMenu(uint8_t event) break; CASE_EVT_ROTARY_BREAK case EVT_KEY_BREAK(KEY_ENTER): - result = s_menu[s_menu_item+s_menu_offset]; + result = s_menu[s_menu_item + (s_menu_offset_type == MENU_OFFSET_INTERNAL ? s_menu_offset : 0)]; // no break case EVT_KEY_BREAK(KEY_EXIT): s_menu_count = 0; diff --git a/radio/src/sdcard.cpp b/radio/src/sdcard.cpp index 06326f2ef..afdb85f58 100644 --- a/radio/src/sdcard.cpp +++ b/radio/src/sdcard.cpp @@ -51,6 +51,9 @@ bool listSdFiles(const char *path, const char *extension, const uint8_t maxlen, fno.lfsize = sizeof(lfn); #endif +#if defined(PCBTARANIS) + s_menu_offset_type = MENU_OFFSET_EXTERNAL; +#endif static uint16_t s_last_menu_offset = 0; #if defined(CPUARM)