SD card Models storage now complete, including scroll in Models List!
This commit is contained in:
+17
-3
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+10
-4
@@ -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<MENU_LINE_LENGTH-1; i++) {
|
||||
@@ -160,9 +169,6 @@ bool listSDcardModels()
|
||||
menu_entry[i] = fn[i];
|
||||
}
|
||||
s_menu[s_menu_count++] = menu_entry;
|
||||
// TODO better handling...
|
||||
if (s_menu_count == MENU_MAX_LINES)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -439,7 +445,7 @@ void menuProcModelSelect(uint8_t event)
|
||||
if (!s_sdcard_error)
|
||||
eeDeleteModel(sub); // delete the model, it's archived!
|
||||
}
|
||||
else if (result == STR_RESTORE_MODEL) {
|
||||
else if (result == STR_RESTORE_MODEL || result == STR_UPDATE_LIST) {
|
||||
if (!listSDcardModels()) {
|
||||
s_sdcard_error = PSTR("No Models on SD");
|
||||
}
|
||||
|
||||
@@ -380,6 +380,7 @@ extern const pm_char STR_DELETE_MODEL[];
|
||||
extern const pm_char STR_RESTORE_MODEL[];
|
||||
extern const pm_char STR_SDCARD_ERROR[];
|
||||
extern const pm_char STR_NO_SDCARD[];
|
||||
#define STR_UPDATE_LIST STR_DELAYDOWN
|
||||
#endif
|
||||
|
||||
extern const pm_uchar font[];
|
||||
|
||||
Reference in New Issue
Block a user