summaryrefslogtreecommitdiff
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
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
-rw-r--r--apps/playlist_viewer.c21
-rw-r--r--apps/tree.c246
-rw-r--r--apps/tree.h22
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);
130static void scroll_display(int lines); 130static void scroll_display(int lines);
131static void update_first_index(void); 131static void update_first_index(void);
132static bool update_playlist(bool force); 132static bool update_playlist(bool force);
133#ifdef TREE_SHIFT
134static int onplay_menu(int index); 133static int onplay_menu(int index);
135#endif
136static bool viewer_menu(void); 134static bool viewer_menu(void);
137static bool show_icons(void); 135static bool show_icons(void);
138static bool show_indices(void); 136static 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). */
753static bool viewer_menu(void) 749static 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
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;
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