summaryrefslogtreecommitdiff
path: root/apps/tree.c
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2004-10-05 00:08:04 +0000
committerBjörn Stenberg <bjorn@haxx.se>2004-10-05 00:08:04 +0000
commit2b816de0bbdc2bba05383c344f0e2f04889f21d0 (patch)
tree1fe3d230f63bc0749693444f83b62c5fd7e3f1a1 /apps/tree.c
parentaddbba0fba0d6959ddfcd5cee933e2d17a3bfb80 (diff)
downloadrockbox-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.c246
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
768static 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
895static bool dirbrowse(const char *root, const int *dirfilter) 767static 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;