diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/lang/english.lang | 44 | ||||
-rw-r--r-- | apps/settings.c | 5 | ||||
-rw-r--r-- | apps/settings.h | 4 | ||||
-rw-r--r-- | apps/settings_menu.c | 27 | ||||
-rw-r--r-- | apps/tree.c | 38 | ||||
-rw-r--r-- | apps/tree.h | 11 |
6 files changed, 115 insertions, 14 deletions
diff --git a/apps/lang/english.lang b/apps/lang/english.lang index 4722d743a9..2c1f72ffb2 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang | |||
@@ -154,7 +154,7 @@ new: | |||
154 | id: LANG_SORT_CASE | 154 | id: LANG_SORT_CASE |
155 | desc: in settings_menu | 155 | desc: in settings_menu |
156 | eng: "Sort Case Sensitive" | 156 | eng: "Sort Case Sensitive" |
157 | voice: "" | 157 | voice: "Sort Case Sensitive" |
158 | new: | 158 | new: |
159 | 159 | ||
160 | id: LANG_RESUME | 160 | id: LANG_RESUME |
@@ -254,9 +254,9 @@ voice: "" | |||
254 | new: | 254 | new: |
255 | 255 | ||
256 | id: LANG_CASE_MENU | 256 | id: LANG_CASE_MENU |
257 | desc: in fileview_settings_menu() | 257 | desc: DEPRECATED |
258 | eng: "Sort Mode" | 258 | eng: "" |
259 | voice: "Sort Mode" | 259 | voice: "" |
260 | new: | 260 | new: |
261 | 261 | ||
262 | id: LANG_SCROLL_MENU | 262 | id: LANG_SCROLL_MENU |
@@ -2685,3 +2685,39 @@ desc: Onplay open with | |||
2685 | eng: "Open with" | 2685 | eng: "Open with" |
2686 | voice: "open with" | 2686 | voice: "open with" |
2687 | new: | 2687 | new: |
2688 | |||
2689 | id: LANG_SORT_DIR | ||
2690 | desc: browser sorting setting | ||
2691 | eng: "Sort Directories" | ||
2692 | voice: "sort directories" | ||
2693 | new: | ||
2694 | |||
2695 | id: LANG_SORT_FILE | ||
2696 | desc: browser sorting setting | ||
2697 | eng: "Sort Files" | ||
2698 | voice: "sort files" | ||
2699 | new: | ||
2700 | |||
2701 | id: LANG_SORT_ALPHA | ||
2702 | desc: browser sorting setting | ||
2703 | eng: "Alphabetical" | ||
2704 | voice: "Alphabetical" | ||
2705 | new: | ||
2706 | |||
2707 | id: LANG_SORT_DATE | ||
2708 | desc: browser sorting setting | ||
2709 | eng: "by date" | ||
2710 | voice: "by date" | ||
2711 | new: | ||
2712 | |||
2713 | id: LANG_SORT_DATE_REVERSE | ||
2714 | desc: browser sorting setting | ||
2715 | eng: "by newest date" | ||
2716 | voice: "by newest date" | ||
2717 | new: | ||
2718 | |||
2719 | id: LANG_SORT_TYPE | ||
2720 | desc: browser sorting setting | ||
2721 | eng: "by type" | ||
2722 | voice: "by type" | ||
2723 | new: | ||
diff --git a/apps/settings.c b/apps/settings.c index 56f61eb9b7..36fcff3814 100644 --- a/apps/settings.c +++ b/apps/settings.c | |||
@@ -318,8 +318,11 @@ static struct bit_entry hd_bits[] = | |||
318 | {2, S_O(talk_file), 0, "talk file", "off,number,spell" }, | 318 | {2, S_O(talk_file), 0, "talk file", "off,number,spell" }, |
319 | {1, S_O(talk_menu), true, "talk menu", off_on }, | 319 | {1, S_O(talk_menu), true, "talk menu", off_on }, |
320 | 320 | ||
321 | /* new stuff to be added here */ | 321 | /* new stuff to be added at the end */ |
322 | /* If values are just added to the end, no need to bump the version. */ | 322 | /* If values are just added to the end, no need to bump the version. */ |
323 | {2, S_O(sort_file), 0, "sort files", "alpha,oldest,newest,type" }, | ||
324 | {2, S_O(sort_dir), 0, "sort dirs", "alpha,oldest,newest" }, | ||
325 | |||
323 | 326 | ||
324 | /* Sum of all bit sizes must not grow beyond 0xB8*8 = 1472 */ | 327 | /* Sum of all bit sizes must not grow beyond 0xB8*8 = 1472 */ |
325 | }; | 328 | }; |
diff --git a/apps/settings.h b/apps/settings.h index 315824cd9e..ddc3aca599 100644 --- a/apps/settings.h +++ b/apps/settings.h | |||
@@ -208,6 +208,10 @@ struct user_settings | |||
208 | bool talk_menu; /* enable voice UI */ | 208 | bool talk_menu; /* enable voice UI */ |
209 | int talk_dir; /* talkbox mode: 0=off 1=number 2=clip@enter 3=clip@hover */ | 209 | int talk_dir; /* talkbox mode: 0=off 1=number 2=clip@enter 3=clip@hover */ |
210 | int talk_file; /* voice filename mode: 0=off, 1=number, other t.b.d. */ | 210 | int talk_file; /* voice filename mode: 0=off, 1=number, other t.b.d. */ |
211 | |||
212 | /* file browser sorting */ | ||
213 | int sort_file; /* 0=alpha, 1=date, 2=date (new first), 3=type */ | ||
214 | int sort_dir; /* 0=alpha, 1=date (old first), 2=date (new first) */ | ||
211 | }; | 215 | }; |
212 | 216 | ||
213 | enum optiontype { INT, BOOL }; | 217 | enum optiontype { INT, BOOL }; |
diff --git a/apps/settings_menu.c b/apps/settings_menu.c index 34f7a99c2a..d20aa3bda0 100644 --- a/apps/settings_menu.c +++ b/apps/settings_menu.c | |||
@@ -476,6 +476,29 @@ static bool sort_case(void) | |||
476 | return set_bool( str(LANG_SORT_CASE), &global_settings.sort_case ); | 476 | return set_bool( str(LANG_SORT_CASE), &global_settings.sort_case ); |
477 | } | 477 | } |
478 | 478 | ||
479 | static bool sort_file(void) | ||
480 | { | ||
481 | struct opt_items names[] = { | ||
482 | { STR(LANG_SORT_ALPHA) }, | ||
483 | { STR(LANG_SORT_DATE) }, | ||
484 | { STR(LANG_SORT_DATE_REVERSE) }, | ||
485 | { STR(LANG_SORT_TYPE) } | ||
486 | }; | ||
487 | return set_option( str(LANG_SORT_FILE), &global_settings.sort_file, INT, | ||
488 | names, 4, NULL ); | ||
489 | } | ||
490 | |||
491 | static bool sort_dir(void) | ||
492 | { | ||
493 | struct opt_items names[] = { | ||
494 | { STR(LANG_SORT_ALPHA) }, | ||
495 | { STR(LANG_SORT_DATE) }, | ||
496 | { STR(LANG_SORT_DATE_REVERSE) } | ||
497 | }; | ||
498 | return set_option( str(LANG_SORT_DIR), &global_settings.sort_dir, INT, | ||
499 | names, 3, NULL ); | ||
500 | } | ||
501 | |||
479 | static bool resume(void) | 502 | static bool resume(void) |
480 | { | 503 | { |
481 | struct opt_items names[] = { | 504 | struct opt_items names[] = { |
@@ -1056,7 +1079,9 @@ static bool fileview_settings_menu(void) | |||
1056 | bool result; | 1079 | bool result; |
1057 | 1080 | ||
1058 | struct menu_item items[] = { | 1081 | struct menu_item items[] = { |
1059 | { STR(LANG_CASE_MENU), sort_case }, | 1082 | { STR(LANG_SORT_CASE), sort_case }, |
1083 | { STR(LANG_SORT_DIR), sort_dir }, | ||
1084 | { STR(LANG_SORT_FILE), sort_file }, | ||
1060 | { STR(LANG_FILTER), dir_filter }, | 1085 | { STR(LANG_FILTER), dir_filter }, |
1061 | { STR(LANG_FOLLOW), browse_current }, | 1086 | { STR(LANG_FOLLOW), browse_current }, |
1062 | { STR(LANG_SHOW_ICONS), show_icons }, | 1087 | { STR(LANG_SHOW_ICONS), show_icons }, |
diff --git a/apps/tree.c b/apps/tree.c index 09391b31b6..c68927be60 100644 --- a/apps/tree.c +++ b/apps/tree.c | |||
@@ -255,14 +255,46 @@ static int compare(const void* p1, const void* p2) | |||
255 | { | 255 | { |
256 | struct entry* e1 = (struct entry*)p1; | 256 | struct entry* e1 = (struct entry*)p1; |
257 | struct entry* e2 = (struct entry*)p2; | 257 | struct entry* e2 = (struct entry*)p2; |
258 | int criteria; | ||
258 | 259 | ||
259 | if (( e1->attr & ATTR_DIRECTORY ) == ( e2->attr & ATTR_DIRECTORY )) | 260 | if (e1->attr & ATTR_DIRECTORY && e2->attr & ATTR_DIRECTORY) |
261 | { /* two directories */ | ||
262 | criteria = global_settings.sort_dir; | ||
263 | } | ||
264 | else if (!(e1->attr & ATTR_DIRECTORY) && !(e2->attr & ATTR_DIRECTORY)) | ||
265 | { /* two files */ | ||
266 | criteria = global_settings.sort_file; | ||
267 | } | ||
268 | else /* dir and file, dir goes first */ | ||
269 | return ( e2->attr & ATTR_DIRECTORY ) - ( e1->attr & ATTR_DIRECTORY ); | ||
270 | |||
271 | switch(criteria) | ||
272 | { | ||
273 | case 3: /* sort type */ | ||
274 | { | ||
275 | int t1 = e1->attr & TREE_ATTR_MASK; | ||
276 | int t2 = e2->attr & TREE_ATTR_MASK; | ||
277 | |||
278 | if (!t1) /* unknown type */ | ||
279 | t1 = 0x7FFFFFFF; /* gets a high number, to sort after known */ | ||
280 | if (!t2) /* unknown type */ | ||
281 | t2 = 0x7FFFFFFF; /* gets a high number, to sort after known */ | ||
282 | |||
283 | if (t1 - t2) /* if different */ | ||
284 | return t1 - t2; | ||
285 | /* else fall through to alphabetical sorting */ | ||
286 | } | ||
287 | case 0: /* sort alphabetically */ | ||
260 | if (global_settings.sort_case) | 288 | if (global_settings.sort_case) |
261 | return strncmp(e1->name, e2->name, MAX_PATH); | 289 | return strncmp(e1->name, e2->name, MAX_PATH); |
262 | else | 290 | else |
263 | return strncasecmp(e1->name, e2->name, MAX_PATH); | 291 | return strncasecmp(e1->name, e2->name, MAX_PATH); |
264 | else | 292 | case 1: /* sort date */ |
265 | return ( e2->attr & ATTR_DIRECTORY ) - ( e1->attr & ATTR_DIRECTORY ); | 293 | return e1->time_write - e2->time_write; |
294 | case 2: /* sort date, newest first */ | ||
295 | return e2->time_write - e1->time_write; | ||
296 | } | ||
297 | return 0; /* never reached */ | ||
266 | } | 298 | } |
267 | 299 | ||
268 | static void showfileline(int line, int direntry, bool scroll, int *dirfilter) | 300 | static void showfileline(int line, int direntry, bool scroll, int *dirfilter) |
diff --git a/apps/tree.h b/apps/tree.h index a0015b6e76..01f3669477 100644 --- a/apps/tree.h +++ b/apps/tree.h | |||
@@ -36,15 +36,16 @@ struct filetype { | |||
36 | 36 | ||
37 | 37 | ||
38 | /* using attribute not used by FAT */ | 38 | /* using attribute not used by FAT */ |
39 | #define TREE_ATTR_MPA 0x0100 /* mpeg audio file */ | 39 | /* (this also reflects the sort order if by type) */ |
40 | #define TREE_ATTR_BMARK 0x0100 /* book mark file */ | ||
40 | #define TREE_ATTR_M3U 0x0200 /* playlist */ | 41 | #define TREE_ATTR_M3U 0x0200 /* playlist */ |
41 | #define TREE_ATTR_WPS 0x0300 /* wps config file */ | 42 | #define TREE_ATTR_MPA 0x0300 /* mpeg audio file */ |
42 | #define TREE_ATTR_MOD 0x0400 /* firmware file */ | 43 | #define TREE_ATTR_CFG 0x0400 /* config file */ |
43 | #define TREE_ATTR_CFG 0x0500 /* config file */ | 44 | #define TREE_ATTR_WPS 0x0500 /* wps config file */ |
44 | #define TREE_ATTR_FONT 0x0600 /* font file */ | 45 | #define TREE_ATTR_FONT 0x0600 /* font file */ |
45 | #define TREE_ATTR_LNG 0x0700 /* binary lang file */ | 46 | #define TREE_ATTR_LNG 0x0700 /* binary lang file */ |
46 | #define TREE_ATTR_ROCK 0x0800 /* binary rockbox plugin */ | 47 | #define TREE_ATTR_ROCK 0x0800 /* binary rockbox plugin */ |
47 | #define TREE_ATTR_BMARK 0x0900 /* book mark file */ | 48 | #define TREE_ATTR_MOD 0x0900 /* firmware file */ |
48 | #define TREE_ATTR_MASK 0xFFC0 /* which bits tree.c uses (above) */ | 49 | #define TREE_ATTR_MASK 0xFFC0 /* which bits tree.c uses (above) */ |
49 | 50 | ||
50 | void tree_get_filetypes(struct filetype**, int*); | 51 | void tree_get_filetypes(struct filetype**, int*); |