[sky9x/gruvin9x] Lists within Restore Models and Tracks for Function Switches are now sorted in alphabetical order.
This commit is contained in:
+7
-7
@@ -611,15 +611,16 @@ uint8_t s_menu_item = 0;
|
||||
uint8_t s_menu_count = 0;
|
||||
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;
|
||||
|
||||
lcd_filled_rect(10, 16, DISPLAY_W-20, s_menu_count * (FH+1) + 2, SOLID, WHITE);
|
||||
lcd_rect(10, 16, DISPLAY_W-20, s_menu_count * (FH+1) + 2);
|
||||
uint8_t display_count = min(s_menu_count, (uint8_t)MENU_MAX_LINES);
|
||||
|
||||
for (uint8_t i=0; i<s_menu_count; i++) {
|
||||
lcd_filled_rect(10, 16, DISPLAY_W-20, display_count * (FH+1) + 2, SOLID, WHITE);
|
||||
lcd_rect(10, 16, DISPLAY_W-20, display_count * (FH+1) + 2);
|
||||
|
||||
for (uint8_t i=0; i<display_count; i++) {
|
||||
lcd_putsAtt(16, i*(FH+1) + 2*FH + 2, s_menu[i], s_menu_flags);
|
||||
if (i == s_menu_item) lcd_filled_rect(11, i*(FH+1) + 2*FH + 1, DISPLAY_W-22, 9);
|
||||
}
|
||||
@@ -634,9 +635,9 @@ const char * displayMenu(uint8_t event)
|
||||
}
|
||||
break;
|
||||
case EVT_KEY_FIRST(KEY_DOWN):
|
||||
if (s_menu_item < s_menu_count - 1)
|
||||
if (s_menu_item < display_count - 1)
|
||||
s_menu_item++;
|
||||
else if (s_menu_more) {
|
||||
else if (s_menu_count > s_menu_offset + display_count) {
|
||||
s_menu_offset++;
|
||||
result = STR_UPDATE_LIST;
|
||||
}
|
||||
@@ -650,7 +651,6 @@ const char * displayMenu(uint8_t event)
|
||||
s_menu_item = 0;
|
||||
s_menu_flags = 0;
|
||||
s_menu_offset = 0;
|
||||
s_menu_more = false;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -235,7 +235,6 @@ extern char s_bss_menu[MENU_MAX_LINES][MENU_LINE_LENGTH];
|
||||
extern uint8_t s_menu_count;
|
||||
extern uint8_t s_menu_flags;
|
||||
extern uint8_t s_menu_offset;
|
||||
extern bool s_menu_more;
|
||||
const char * displayMenu(uint8_t event);
|
||||
|
||||
#define STATUS_LINE_LENGTH 32
|
||||
|
||||
+14
-51
@@ -119,22 +119,19 @@ bool listSdFiles(const char *path, const char *extension)
|
||||
#endif
|
||||
|
||||
s_menu_count = 0;
|
||||
s_menu_more = false;
|
||||
s_menu_flags = BSS;
|
||||
uint8_t offset = 0;
|
||||
|
||||
#if 0
|
||||
static uint16_t s_last_menu_offset = 65535;
|
||||
char hidden_line[MENU_LINE_LENGTH] = "";
|
||||
|
||||
if (s_menu_offset == 0)
|
||||
s_last_menu_offset = 0;
|
||||
/* else if (s_menu_offset >= reusableBuffer.sd.count-7)
|
||||
s_last_menu_offset = s_pgOfs+1; */
|
||||
/* else if (s_menu_offset >= s_menu_count-MENU_MAX_LINES)
|
||||
s_last_menu_offset = s_menu_offset+1; */
|
||||
else if (s_menu_offset > s_last_menu_offset)
|
||||
memcpy(hidden_line, &s_bss_menu[0], MENU_LINE_LENGTH);
|
||||
memcpy(hidden_line, s_bss_menu[0], MENU_LINE_LENGTH);
|
||||
else
|
||||
memcpy(hidden_line, &s_bss_menu[MENU_MAX_LINES-1], MENU_LINE_LENGTH);
|
||||
memcpy(hidden_line, s_bss_menu[MENU_MAX_LINES-1], MENU_LINE_LENGTH);
|
||||
|
||||
memset(s_bss_menu, 0, sizeof(s_bss_menu));
|
||||
|
||||
@@ -153,71 +150,37 @@ bool listSdFiles(const char *path, const char *extension)
|
||||
uint8_t len = strlen(fn);
|
||||
if (len < 5 || strcmp(fn+len-4, extension) || (fno.fattrib & AM_DIR)) continue;
|
||||
|
||||
printf("Fichier %s\n", fn);
|
||||
fn[len-4] = '\0';
|
||||
s_menu_count++;
|
||||
|
||||
for (uint8_t i=0; i<MENU_MAX_LINES; i++) {
|
||||
char *line;
|
||||
if (s_menu_offset >= s_last_menu_offset) {
|
||||
line = s_bss_menu[i];
|
||||
if ((!hidden_line[0] || (strcmp(hidden_line, fn) < 0)) && (line[0] == '\0' || strcmp(fn, line) < 0)) {
|
||||
if (i < MENU_MAX_LINES-1) {
|
||||
if (i < MENU_MAX_LINES-1)
|
||||
memmove(s_bss_menu[i+1], line, sizeof(s_bss_menu[i]) * (MENU_MAX_LINES-1-i));
|
||||
}
|
||||
strncpy(line, fn, MENU_LINE_LENGTH);
|
||||
strcpy(line, fn);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
line = s_bss_menu[MENU_MAX_LINES-1-i];
|
||||
if ((!hidden_line[0] || (strcmp(hidden_line, fn) > 0)) && (line[0] == '\0' || strcmp(fn, line) > 0)) {
|
||||
if (i < MENU_MAX_LINES-1) {
|
||||
if (i < MENU_MAX_LINES-1)
|
||||
memmove(s_bss_menu, s_bss_menu[1], sizeof(s_bss_menu[0]) * (MENU_MAX_LINES-1-i));
|
||||
}
|
||||
strncpy(line, fn, MENU_LINE_LENGTH);
|
||||
strcpy(line, fn);
|
||||
break;
|
||||
}
|
||||
}
|
||||
s_menu[i] = line;
|
||||
}
|
||||
}
|
||||
s_menu_count = MENU_MAX_LINES;
|
||||
s_menu_more = true;
|
||||
|
||||
for (uint8_t i=0; i<min(s_menu_count, (uint8_t)MENU_MAX_LINES); i++)
|
||||
s_menu[i] = s_bss_menu[i];
|
||||
}
|
||||
#else
|
||||
FRESULT res = f_opendir(&dir, path); /* Open the directory */
|
||||
if (res == FR_OK) {
|
||||
for (;;) {
|
||||
res = f_readdir(&dir, &fno); /* Read a directory item */
|
||||
if (res != FR_OK || fno.fname[0] == 0) break; /* Break on error or end of dir */
|
||||
|
||||
#if _USE_LFN
|
||||
fn = *fno.lfname ? fno.lfname : fno.fname;
|
||||
#else
|
||||
fn = fno.fname;
|
||||
#endif
|
||||
|
||||
uint8_t len = strlen(fn);
|
||||
if (len < 5 || strcmp(fn+len-4, extension) || (fno.fattrib & AM_DIR)) continue;
|
||||
|
||||
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];
|
||||
memclear(menu_entry, MENU_LINE_LENGTH);
|
||||
for (uint8_t i=0; i<MENU_LINE_LENGTH-1; i++) {
|
||||
if (fn[i] == '.')
|
||||
break;
|
||||
menu_entry[i] = fn[i];
|
||||
}
|
||||
s_menu[s_menu_count++] = menu_entry;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
s_last_menu_offset = s_menu_offset;
|
||||
|
||||
return s_menu_count;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user