diff options
author | Björn Stenberg <bjorn@haxx.se> | 2004-10-05 00:08:04 +0000 |
---|---|---|
committer | Björn Stenberg <bjorn@haxx.se> | 2004-10-05 00:08:04 +0000 |
commit | 2b816de0bbdc2bba05383c344f0e2f04889f21d0 (patch) | |
tree | 1fe3d230f63bc0749693444f83b62c5fd7e3f1a1 /apps/tree.c | |
parent | addbba0fba0d6959ddfcd5cee933e2d17a3bfb80 (diff) | |
download | rockbox-2b816de0bbdc2bba05383c344f0e2f04889f21d0.tar.gz rockbox-2b816de0bbdc2bba05383c344f0e2f04889f21d0.zip |
Flattened browser button code more. TREE_SHIFT removed. OnPlay menu is now available on PLAY+REPEAT too.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5166 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/tree.c')
-rw-r--r-- | apps/tree.c | 246 |
1 files changed, 87 insertions, 159 deletions
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; |