From e100ddfd8c924786e59579a898348b2d3d9ba701 Mon Sep 17 00:00:00 2001 From: bsongis Date: Sat, 21 Apr 2012 17:50:47 +0000 Subject: [PATCH] SD card Models storage now complete, including scroll in Models List! --- src/menus.cpp | 20 +++++++++++++++++--- src/model_menus.cpp | 14 ++++++++++---- src/o9xstrings.h | 1 + 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/menus.cpp b/src/menus.cpp index 54f76b315..aee5799cf 100644 --- a/src/menus.cpp +++ b/src/menus.cpp @@ -541,7 +541,9 @@ const char *s_menu[MENU_MAX_LINES]; char s_bss_menu[MENU_MAX_LINES*MENU_LINE_LENGTH]; uint8_t s_menu_item = 0; uint8_t s_menu_count = 0; -uint8_t s_menu_flags; +uint8_t s_menu_flags = 0; +uint8_t s_menu_offset = 0; +bool s_menu_more = false; const char * displayMenu(uint8_t event) { const char * result = NULL; @@ -556,10 +558,20 @@ const char * displayMenu(uint8_t event) switch(event) { case EVT_KEY_FIRST(KEY_UP): - if (s_menu_item > 0) s_menu_item--; + if (s_menu_item > 0) + s_menu_item--; + else if (s_menu_offset > 0) { + s_menu_offset--; + result = STR_UPDATE_LIST; + } break; case EVT_KEY_FIRST(KEY_DOWN): - if (s_menu_item < s_menu_count - 1) s_menu_item++; + if (s_menu_item < s_menu_count - 1) + s_menu_item++; + else if (s_menu_more) { + s_menu_offset++; + result = STR_UPDATE_LIST; + } break; case EVT_KEY_FIRST(KEY_MENU): result = s_menu[s_menu_item]; @@ -569,6 +581,8 @@ const char * displayMenu(uint8_t event) s_menu_count = 0; s_menu_item = 0; s_menu_flags = 0; + s_menu_offset = 0; + s_menu_more = false; break; } diff --git a/src/model_menus.cpp b/src/model_menus.cpp index 9a9a4f5cf..4107bf9ad 100644 --- a/src/model_menus.cpp +++ b/src/model_menus.cpp @@ -139,6 +139,7 @@ bool listSDcardModels() s_menu_count = 0; s_menu_flags = BSS; + uint8_t offset = 0; FRESULT res = f_opendir(&dir, MODELS_PATH); /* Open the directory */ if (res == FR_OK) { @@ -152,6 +153,14 @@ bool listSDcardModels() fn = fno.fname; #endif if (~fno.fattrib & AM_DIR) { /* It is a file. */ + if (offset < s_menu_offset) { + offset++; + continue; + } + if (s_menu_count == MENU_MAX_LINES) { + s_menu_more = true; + break; + } char *menu_entry = &s_bss_menu[s_menu_count*MENU_LINE_LENGTH]; memset(menu_entry, 0, MENU_LINE_LENGTH); for (uint8_t i=0; i