diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/playlist_viewer.c | 21 | ||||
-rw-r--r-- | apps/tree.c | 246 | ||||
-rw-r--r-- | apps/tree.h | 22 |
3 files changed, 113 insertions, 176 deletions
diff --git a/apps/playlist_viewer.c b/apps/playlist_viewer.c index e872b495b3..98f04b8eaf 100644 --- a/apps/playlist_viewer.c +++ b/apps/playlist_viewer.c | |||
@@ -130,9 +130,7 @@ static void update_display_line(int line, bool scroll); | |||
130 | static void scroll_display(int lines); | 130 | static void scroll_display(int lines); |
131 | static void update_first_index(void); | 131 | static void update_first_index(void); |
132 | static bool update_playlist(bool force); | 132 | static bool update_playlist(bool force); |
133 | #ifdef TREE_SHIFT | ||
134 | static int onplay_menu(int index); | 133 | static int onplay_menu(int index); |
135 | #endif | ||
136 | static bool viewer_menu(void); | 134 | static bool viewer_menu(void); |
137 | static bool show_icons(void); | 135 | static bool show_icons(void); |
138 | static bool show_indices(void); | 136 | static bool show_indices(void); |
@@ -672,7 +670,6 @@ static bool update_playlist(bool force) | |||
672 | return true; | 670 | return true; |
673 | } | 671 | } |
674 | 672 | ||
675 | #ifdef TREE_SHIFT | ||
676 | /* Menu of playlist commands. Invoked via ON+PLAY on main viewer screen. | 673 | /* Menu of playlist commands. Invoked via ON+PLAY on main viewer screen. |
677 | Returns -1 if USB attached, 0 if no playlist change, and 1 if playlist | 674 | Returns -1 if USB attached, 0 if no playlist change, and 1 if playlist |
678 | changed. */ | 675 | changed. */ |
@@ -747,7 +744,6 @@ static int onplay_menu(int index) | |||
747 | 744 | ||
748 | return ret; | 745 | return ret; |
749 | } | 746 | } |
750 | #endif | ||
751 | 747 | ||
752 | /* Menu of viewer options. Invoked via F1(r) or Menu(p). */ | 748 | /* Menu of viewer options. Invoked via F1(r) or Menu(p). */ |
753 | static bool viewer_menu(void) | 749 | static bool viewer_menu(void) |
@@ -918,20 +914,22 @@ bool playlist_viewer_ex(char* filename) | |||
918 | update = true; | 914 | update = true; |
919 | break; | 915 | break; |
920 | 916 | ||
921 | case TREE_SHIFT | TREE_PREV: | 917 | #ifdef TREE_PGUP |
922 | case TREE_SHIFT | TREE_PREV | BUTTON_REPEAT: | 918 | case TREE_PGUP: |
919 | case TREE_PGUP | BUTTON_REPEAT: | ||
923 | /* Pageup */ | 920 | /* Pageup */ |
924 | scroll_display(-viewer.num_display_lines); | 921 | scroll_display(-viewer.num_display_lines); |
925 | update = true; | 922 | update = true; |
926 | break; | 923 | break; |
927 | 924 | ||
928 | case TREE_SHIFT | TREE_NEXT: | 925 | case TREE_PGDN: |
929 | case TREE_SHIFT | TREE_NEXT | BUTTON_REPEAT: | 926 | case TREE_PGDN | BUTTON_REPEAT: |
930 | /* Pagedown */ | 927 | /* Pagedown */ |
931 | scroll_display(viewer.num_display_lines); | 928 | scroll_display(viewer.num_display_lines); |
932 | update = true; | 929 | update = true; |
933 | break; | 930 | break; |
934 | 931 | #endif | |
932 | |||
935 | case TREE_RUN: | 933 | case TREE_RUN: |
936 | if (viewer.move_track >= 0) | 934 | if (viewer.move_track >= 0) |
937 | { | 935 | { |
@@ -973,7 +971,10 @@ bool playlist_viewer_ex(char* filename) | |||
973 | update = true; | 971 | update = true; |
974 | break; | 972 | break; |
975 | 973 | ||
976 | case TREE_SHIFT | TREE_RUN: | 974 | case TREE_CONTEXT: |
975 | #ifdef TREE_CONTEXT2 | ||
976 | case TREE_CONTEXT2: | ||
977 | #endif | ||
977 | { | 978 | { |
978 | /* ON+PLAY menu */ | 979 | /* ON+PLAY menu */ |
979 | int ret; | 980 | int ret; |
diff --git a/apps/tree.c b/apps/tree.c index a8eb0fcdd1..e9d747f253 100644 --- a/apps/tree.c +++ b/apps/tree.c | |||
@@ -764,134 +764,6 @@ void set_current_file(char *path) | |||
764 | } | 764 | } |
765 | } | 765 | } |
766 | 766 | ||
767 | #ifdef TREE_SHIFT | ||
768 | static bool handle_shift(int *ds, int *dc, int numentries, | ||
769 | int tree_max_on_screen, | ||
770 | const int *dirfilter) | ||
771 | { | ||
772 | bool exit = false; | ||
773 | bool used = false; | ||
774 | |||
775 | int dirstart = *ds; | ||
776 | int dircursor = *dc; | ||
777 | char buf[MAX_PATH]; | ||
778 | |||
779 | #ifdef HAVE_LCD_BITMAP | ||
780 | int fw, fh; | ||
781 | lcd_getstringsize("A", &fw, &fh); | ||
782 | #endif | ||
783 | |||
784 | while (!exit) { | ||
785 | switch (button_get(true)) { | ||
786 | case TREE_PREV: | ||
787 | #ifdef TREE_RC_PREV | ||
788 | case TREE_RC_PREV: | ||
789 | #endif | ||
790 | #ifdef TREE_SHIFT | ||
791 | case TREE_SHIFT | TREE_PREV: | ||
792 | case TREE_SHIFT | TREE_PREV | BUTTON_REPEAT: | ||
793 | #endif | ||
794 | used = true; | ||
795 | if ( dirstart ) { | ||
796 | dirstart -= tree_max_on_screen; | ||
797 | if ( dirstart < 0 ) | ||
798 | dirstart = 0; | ||
799 | } | ||
800 | else | ||
801 | dircursor = 0; | ||
802 | break; | ||
803 | |||
804 | case TREE_NEXT: | ||
805 | #ifdef TREE_RC_NEXT | ||
806 | case TREE_RC_NEXT: | ||
807 | #endif | ||
808 | #ifdef TREE_SHIFT | ||
809 | case TREE_SHIFT | TREE_NEXT: | ||
810 | case TREE_SHIFT | TREE_NEXT | BUTTON_REPEAT: | ||
811 | #endif | ||
812 | used = true; | ||
813 | if ( dirstart < numentries - tree_max_on_screen ) { | ||
814 | dirstart += tree_max_on_screen; | ||
815 | if ( dirstart > | ||
816 | numentries - tree_max_on_screen ) | ||
817 | dirstart = numentries - tree_max_on_screen; | ||
818 | } | ||
819 | else | ||
820 | dircursor = numentries - dirstart - 1; | ||
821 | break; | ||
822 | |||
823 | |||
824 | case TREE_RUN | BUTTON_REL: | ||
825 | #ifdef TREE_RC_PLAY | ||
826 | case TREE_RC_RUN: | ||
827 | #endif | ||
828 | #ifdef TREE_SHIFT | ||
829 | case TREE_SHIFT | TREE_RUN | BUTTON_REL: | ||
830 | #endif | ||
831 | { | ||
832 | int onplay_result; | ||
833 | |||
834 | if(!numentries) | ||
835 | onplay_result = onplay(NULL, 0); | ||
836 | else { | ||
837 | if (currdir[1]) | ||
838 | snprintf(buf, sizeof buf, "%s/%s", | ||
839 | currdir, dircache[dircursor+dirstart].name); | ||
840 | else | ||
841 | snprintf(buf, sizeof buf, "/%s", | ||
842 | dircache[dircursor+dirstart].name); | ||
843 | onplay_result = onplay(buf, | ||
844 | dircache[dircursor+dirstart].attr); | ||
845 | } | ||
846 | |||
847 | switch (onplay_result) | ||
848 | { | ||
849 | case ONPLAY_OK: | ||
850 | used = true; | ||
851 | break; | ||
852 | case ONPLAY_RELOAD_DIR: | ||
853 | reload_dir = 1; | ||
854 | used = true; | ||
855 | break; | ||
856 | case ONPLAY_START_PLAY: | ||
857 | used = false; /* this will enable the wps */ | ||
858 | break; | ||
859 | } | ||
860 | exit = true; | ||
861 | break; | ||
862 | } | ||
863 | #ifdef TREE_SHIFT | ||
864 | case TREE_SHIFT | BUTTON_REL: | ||
865 | case TREE_SHIFT | TREE_PREV | BUTTON_REL: | ||
866 | case TREE_SHIFT | TREE_NEXT | BUTTON_REL: | ||
867 | exit = true; | ||
868 | break; | ||
869 | #endif | ||
870 | } | ||
871 | if ( used && !exit ) { | ||
872 | #ifdef HAVE_LCD_BITMAP | ||
873 | int xpos,ypos; | ||
874 | #endif | ||
875 | showdir(currdir, dirstart, dirfilter); | ||
876 | #ifdef HAVE_LCD_BITMAP | ||
877 | if (global_settings.invert_cursor) { | ||
878 | xpos = lcd_getxmargin(); | ||
879 | ypos = (CURSOR_Y + dircursor) * fh + lcd_getymargin(); | ||
880 | lcd_invertrect(xpos, ypos, LCD_WIDTH-xpos, fh); | ||
881 | } | ||
882 | else | ||
883 | #endif | ||
884 | put_cursorxy(CURSOR_X, CURSOR_Y + dircursor, true); | ||
885 | lcd_update(); | ||
886 | } | ||
887 | } | ||
888 | *ds = dirstart; | ||
889 | *dc = dircursor; | ||
890 | |||
891 | return used; | ||
892 | } | ||
893 | #endif | ||
894 | |||
895 | static bool dirbrowse(const char *root, const int *dirfilter) | 767 | static bool dirbrowse(const char *root, const int *dirfilter) |
896 | { | 768 | { |
897 | int numentries=0; | 769 | int numentries=0; |
@@ -910,6 +782,7 @@ static bool dirbrowse(const char *root, const int *dirfilter) | |||
910 | long thumbnail_time = -1; /* for delaying a thumbnail */ | 782 | long thumbnail_time = -1; /* for delaying a thumbnail */ |
911 | bool update_all = false; /* set this to true when the whole file list | 783 | bool update_all = false; /* set this to true when the whole file list |
912 | has been refreshed on screen */ | 784 | has been refreshed on screen */ |
785 | int lastbutton = 0; | ||
913 | 786 | ||
914 | #ifdef HAVE_LCD_BITMAP | 787 | #ifdef HAVE_LCD_BITMAP |
915 | tree_max_on_screen = recalc_screen_height(); | 788 | tree_max_on_screen = recalc_screen_height(); |
@@ -1043,15 +916,14 @@ static bool dirbrowse(const char *root, const int *dirfilter) | |||
1043 | break; | 916 | break; |
1044 | #endif | 917 | #endif |
1045 | 918 | ||
919 | #ifdef TREE_ENTER | ||
1046 | case TREE_ENTER: | 920 | case TREE_ENTER: |
1047 | case TREE_ENTER | BUTTON_REPEAT: | 921 | case TREE_ENTER | BUTTON_REPEAT: |
1048 | #if defined TREE_RC_ENTER && (TREE_RC_ENTER != TREE_RC_RUN) | 922 | #endif |
923 | #ifdef TREE_RC_ENTER | ||
1049 | case TREE_RC_ENTER: | 924 | case TREE_RC_ENTER: |
1050 | #endif | 925 | #endif |
1051 | #if defined TREE_RUN && (TREE_RUN != TREE_ENTER) | ||
1052 | case TREE_RUN: | 926 | case TREE_RUN: |
1053 | case TREE_RUN | BUTTON_REPEAT: | ||
1054 | #endif | ||
1055 | if ( !numentries ) | 927 | if ( !numentries ) |
1056 | break; | 928 | break; |
1057 | if (currdir[1]) | 929 | if (currdir[1]) |
@@ -1320,6 +1192,33 @@ static bool dirbrowse(const char *root, const int *dirfilter) | |||
1320 | } | 1192 | } |
1321 | break; | 1193 | break; |
1322 | 1194 | ||
1195 | #ifdef TREE_PGUP | ||
1196 | case TREE_PGUP: | ||
1197 | case TREE_PGUP | BUTTON_REPEAT: | ||
1198 | if ( dirstart ) { | ||
1199 | dirstart -= tree_max_on_screen; | ||
1200 | if ( dirstart < 0 ) | ||
1201 | dirstart = 0; | ||
1202 | } | ||
1203 | else | ||
1204 | dircursor = 0; | ||
1205 | restore = true; | ||
1206 | break; | ||
1207 | |||
1208 | case TREE_PGDN: | ||
1209 | case TREE_PGDN | BUTTON_REPEAT: | ||
1210 | if ( dirstart < numentries - tree_max_on_screen ) { | ||
1211 | dirstart += tree_max_on_screen; | ||
1212 | if ( dirstart > | ||
1213 | numentries - tree_max_on_screen ) | ||
1214 | dirstart = numentries - tree_max_on_screen; | ||
1215 | } | ||
1216 | else | ||
1217 | dircursor = numentries - dirstart - 1; | ||
1218 | restore = true; | ||
1219 | break; | ||
1220 | #endif | ||
1221 | |||
1323 | case TREE_MENU: | 1222 | case TREE_MENU: |
1324 | if (*dirfilter < NUM_FILTER_MODES) | 1223 | if (*dirfilter < NUM_FILTER_MODES) |
1325 | { | 1224 | { |
@@ -1330,35 +1229,27 @@ static bool dirbrowse(const char *root, const int *dirfilter) | |||
1330 | } | 1229 | } |
1331 | break; | 1230 | break; |
1332 | 1231 | ||
1333 | #ifdef TREE_SHIFT /* I bet the folks without ON-button want this to | 1232 | case TREE_WPS: |
1334 | work on a different button */ | 1233 | #ifdef TREE_WPS_PRE |
1335 | case TREE_SHIFT: | 1234 | if (lastbutton != TREE_WPS_PRE) |
1336 | if (handle_shift(&dirstart, &dircursor, numentries, | 1235 | break; |
1337 | tree_max_on_screen, dirfilter)) | 1236 | #endif |
1338 | { | 1237 | /* don't enter wps from plugin browser etc */ |
1339 | /* start scroll */ | 1238 | if (*dirfilter < NUM_FILTER_MODES) |
1340 | restore = true; | ||
1341 | } | ||
1342 | else | ||
1343 | { | 1239 | { |
1344 | if (*dirfilter < NUM_FILTER_MODES) | 1240 | if (mpeg_status() & MPEG_STATUS_PLAY) |
1345 | /* don't catch single ON from .rockbox browsing */ | ||
1346 | { | 1241 | { |
1347 | if (mpeg_status() & MPEG_STATUS_PLAY) | 1242 | start_wps=true; |
1348 | { | 1243 | } |
1349 | start_wps=true; | 1244 | else |
1350 | } | 1245 | { |
1351 | else | 1246 | start_resume(false); |
1352 | { | 1247 | restore = true; |
1353 | start_resume(false); | ||
1354 | restore = true; | ||
1355 | } | ||
1356 | } | 1248 | } |
1357 | } | 1249 | } |
1358 | break; | 1250 | break; |
1359 | #endif | ||
1360 | 1251 | ||
1361 | #if CONFIG_KEYPAD == RECORDER_PAD | 1252 | #ifdef BUTTON_F2 |
1362 | case BUTTON_F2: | 1253 | case BUTTON_F2: |
1363 | if (*dirfilter < NUM_FILTER_MODES) | 1254 | if (*dirfilter < NUM_FILTER_MODES) |
1364 | { | 1255 | { |
@@ -1373,14 +1264,48 @@ static bool dirbrowse(const char *root, const int *dirfilter) | |||
1373 | { | 1264 | { |
1374 | if (quick_screen(CONTEXT_TREE, BUTTON_F3)) | 1265 | if (quick_screen(CONTEXT_TREE, BUTTON_F3)) |
1375 | reload_root = true; | 1266 | reload_root = true; |
1376 | |||
1377 | #ifdef HAVE_LCD_BITMAP | ||
1378 | tree_max_on_screen = recalc_screen_height(); | 1267 | tree_max_on_screen = recalc_screen_height(); |
1379 | #endif | ||
1380 | restore = true; | 1268 | restore = true; |
1381 | } | 1269 | } |
1270 | break; | ||
1382 | #endif | 1271 | #endif |
1272 | |||
1273 | case TREE_CONTEXT: | ||
1274 | #ifdef TREE_CONTEXT2 | ||
1275 | case TREE_CONTEXT2: | ||
1276 | #endif | ||
1277 | { | ||
1278 | int onplay_result; | ||
1279 | |||
1280 | if(!numentries) | ||
1281 | onplay_result = onplay(NULL, 0); | ||
1282 | else { | ||
1283 | if (currdir[1]) | ||
1284 | snprintf(buf, sizeof buf, "%s/%s", | ||
1285 | currdir, dircache[dircursor+dirstart].name); | ||
1286 | else | ||
1287 | snprintf(buf, sizeof buf, "/%s", | ||
1288 | dircache[dircursor+dirstart].name); | ||
1289 | onplay_result = onplay(buf, | ||
1290 | dircache[dircursor+dirstart].attr); | ||
1291 | } | ||
1292 | |||
1293 | switch (onplay_result) | ||
1294 | { | ||
1295 | case ONPLAY_OK: | ||
1296 | restore = true; | ||
1297 | break; | ||
1298 | |||
1299 | case ONPLAY_RELOAD_DIR: | ||
1300 | reload_dir = true; | ||
1301 | break; | ||
1302 | |||
1303 | case ONPLAY_START_PLAY: | ||
1304 | start_wps = true; | ||
1305 | break; | ||
1306 | } | ||
1383 | break; | 1307 | break; |
1308 | } | ||
1384 | 1309 | ||
1385 | case BUTTON_NONE: | 1310 | case BUTTON_NONE: |
1386 | if (thumbnail_time != -1 && | 1311 | if (thumbnail_time != -1 && |
@@ -1406,10 +1331,13 @@ static bool dirbrowse(const char *root, const int *dirfilter) | |||
1406 | } | 1331 | } |
1407 | 1332 | ||
1408 | if ( button ) | 1333 | if ( button ) |
1334 | { | ||
1409 | ata_spin(); | 1335 | ata_spin(); |
1336 | lastbutton = button; | ||
1337 | } | ||
1410 | 1338 | ||
1411 | if (start_wps) | 1339 | if (start_wps) |
1412 | { | 1340 | { |
1413 | lcd_stop_scroll(); | 1341 | lcd_stop_scroll(); |
1414 | if (wps_show() == SYS_USB_CONNECTED) | 1342 | if (wps_show() == SYS_USB_CONNECTED) |
1415 | reload_root = true; | 1343 | reload_root = true; |
diff --git a/apps/tree.h b/apps/tree.h index 4b3406416f..adbfc625ce 100644 --- a/apps/tree.h +++ b/apps/tree.h | |||
@@ -26,10 +26,15 @@ | |||
26 | #define TREE_PREV BUTTON_UP | 26 | #define TREE_PREV BUTTON_UP |
27 | #define TREE_EXIT BUTTON_LEFT | 27 | #define TREE_EXIT BUTTON_LEFT |
28 | #define TREE_ENTER BUTTON_RIGHT | 28 | #define TREE_ENTER BUTTON_RIGHT |
29 | #define TREE_RUN BUTTON_PLAY | 29 | #define TREE_RUN (BUTTON_PLAY | BUTTON_REL) |
30 | #define TREE_MENU BUTTON_F1 | 30 | #define TREE_MENU BUTTON_F1 |
31 | #define TREE_SHIFT BUTTON_ON | ||
32 | #define TREE_OFF BUTTON_OFF | 31 | #define TREE_OFF BUTTON_OFF |
32 | #define TREE_WPS (BUTTON_ON | BUTTON_REL) | ||
33 | #define TREE_WPS_PRE BUTTON_ON | ||
34 | #define TREE_PGUP (BUTTON_ON | BUTTON_UP) | ||
35 | #define TREE_PGDN (BUTTON_ON | BUTTON_DOWN) | ||
36 | #define TREE_CONTEXT (BUTTON_PLAY | BUTTON_REPEAT) | ||
37 | #define TREE_CONTEXT2 (BUTTON_ON | BUTTON_PLAY) | ||
33 | 38 | ||
34 | #define TREE_RC_NEXT BUTTON_RC_RIGHT | 39 | #define TREE_RC_NEXT BUTTON_RC_RIGHT |
35 | #define TREE_RC_REV BUTTON_RC_LEFT | 40 | #define TREE_RC_REV BUTTON_RC_LEFT |
@@ -41,10 +46,12 @@ | |||
41 | #define TREE_NEXT BUTTON_RIGHT | 46 | #define TREE_NEXT BUTTON_RIGHT |
42 | #define TREE_PREV BUTTON_LEFT | 47 | #define TREE_PREV BUTTON_LEFT |
43 | #define TREE_EXIT BUTTON_STOP | 48 | #define TREE_EXIT BUTTON_STOP |
44 | #define TREE_ENTER BUTTON_PLAY | 49 | #define TREE_RUN (BUTTON_PLAY | BUTTON_REL) |
45 | #define TREE_RUN BUTTON_PLAY | ||
46 | #define TREE_MENU BUTTON_MENU | 50 | #define TREE_MENU BUTTON_MENU |
47 | #define TREE_SHIFT BUTTON_ON | 51 | #define TREE_WPS (BUTTON_ON | BUTTON_REL) |
52 | #define TREE_WPS_PRE BUTTON_ON | ||
53 | #define TREE_CONTEXT (BUTTON_PLAY | BUTTON_REPEAT) | ||
54 | #define TREE_CONTEXT2 (BUTTON_ON | BUTTON_PLAY) | ||
48 | 55 | ||
49 | #define TREE_RC_NEXT BUTTON_RC_RIGHT | 56 | #define TREE_RC_NEXT BUTTON_RC_RIGHT |
50 | #define TREE_RC_REV BUTTON_RC_LEFT | 57 | #define TREE_RC_REV BUTTON_RC_LEFT |
@@ -56,10 +63,11 @@ | |||
56 | #define TREE_NEXT BUTTON_DOWN | 63 | #define TREE_NEXT BUTTON_DOWN |
57 | #define TREE_PREV BUTTON_UP | 64 | #define TREE_PREV BUTTON_UP |
58 | #define TREE_EXIT BUTTON_LEFT | 65 | #define TREE_EXIT BUTTON_LEFT |
59 | #define TREE_ENTER BUTTON_RIGHT | ||
60 | #define TREE_RUN BUTTON_RIGHT | 66 | #define TREE_RUN BUTTON_RIGHT |
61 | #define TREE_MENU (BUTTON_MENU | BUTTON_REPEAT) | 67 | #define TREE_MENU (BUTTON_MENU | BUTTON_REPEAT) |
62 | #define TREE_SHIFT BUTTON_MENU | 68 | #define TREE_WPS (BUTTON_MENU | BUTTON_REL) |
69 | #define TREE_WPS_PRE BUTTON_MENU | ||
70 | #define TREE_CONTEXT (BUTTON_RIGHT | BUTTON_REPEAT) | ||
63 | 71 | ||
64 | #endif | 72 | #endif |
65 | 73 | ||