summaryrefslogtreecommitdiff
path: root/apps/tree.c
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2004-03-16 13:44:56 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2004-03-16 13:44:56 +0000
commit77936e6ec5c2d71f605df855ed24677c307b1bc7 (patch)
treef58c287f2a9f575c764b026116e32787c6c5bc0e /apps/tree.c
parentce0878bd40ea07d126181d1827a235f7c3ee1b00 (diff)
downloadrockbox-77936e6ec5c2d71f605df855ed24677c307b1bc7.tar.gz
rockbox-77936e6ec5c2d71f605df855ed24677c307b1bc7.zip
First shot at a nice little button bar at the bottom of the recorder LCD. Enable Button Bar in the Display settings. Only the dir browser uses it at the moment.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4391 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/tree.c')
-rw-r--r--apps/tree.c45
1 files changed, 33 insertions, 12 deletions
diff --git a/apps/tree.c b/apps/tree.c
index 7a7ba3a2f9..18758e3570 100644
--- a/apps/tree.c
+++ b/apps/tree.c
@@ -387,6 +387,24 @@ struct entry* load_and_sort_directory(char *dirname, int *dirfilter,
387 return dircache; 387 return dircache;
388} 388}
389 389
390#ifdef HAVE_LCD_BITMAP
391static int recalc_screen_height(void)
392{
393 int fw, fh;
394 int height = LCD_HEIGHT;
395
396 lcd_setfont(FONT_UI);
397 lcd_getstringsize("A", &fw, &fh);
398 if(global_settings.statusbar)
399 height -= STATUSBAR_HEIGHT;
400
401 if(global_settings.buttonbar)
402 height -= BUTTONBAR_HEIGHT;
403
404 return height / fh;
405}
406#endif
407
390static int showdir(char *path, int start, int *dirfilter) 408static int showdir(char *path, int start, int *dirfilter)
391{ 409{
392 int icon_type = 0; 410 int icon_type = 0;
@@ -399,7 +417,7 @@ static int showdir(char *path, int start, int *dirfilter)
399 int fw, fh; 417 int fw, fh;
400 lcd_setfont(FONT_UI); 418 lcd_setfont(FONT_UI);
401 lcd_getstringsize("A", &fw, &fh); 419 lcd_getstringsize("A", &fw, &fh);
402 tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh; 420 tree_max_on_screen = recalc_screen_height();
403 line_height = fh; 421 line_height = fh;
404#else 422#else
405 tree_max_on_screen = TREE_MAX_ON_SCREEN; 423 tree_max_on_screen = TREE_MAX_ON_SCREEN;
@@ -536,10 +554,18 @@ static int showdir(char *path, int start, int *dirfilter)
536#ifdef HAVE_LCD_BITMAP 554#ifdef HAVE_LCD_BITMAP
537 if (global_settings.scrollbar && (filesindir > tree_max_on_screen)) 555 if (global_settings.scrollbar && (filesindir > tree_max_on_screen))
538 scrollbar(SCROLLBAR_X, SCROLLBAR_Y, SCROLLBAR_WIDTH - 1, 556 scrollbar(SCROLLBAR_X, SCROLLBAR_Y, SCROLLBAR_WIDTH - 1,
539 LCD_HEIGHT - SCROLLBAR_Y, filesindir, start, 557 tree_max_on_screen * line_height, filesindir, start,
540 start + tree_max_on_screen, VERTICAL); 558 start + tree_max_on_screen, VERTICAL);
559
560 if(global_settings.buttonbar) {
561 buttonbar_set(str(LANG_DIRBROWSE_F1),
562 str(LANG_DIRBROWSE_F2),
563 str(LANG_DIRBROWSE_F3));
564 buttonbar_draw();
565 }
541#endif 566#endif
542 status_draw(true); 567 status_draw(true);
568
543 return filesindir; 569 return filesindir;
544} 570}
545 571
@@ -852,10 +878,7 @@ static bool dirbrowse(char *root, int *dirfilter)
852 has been refreshed on screen */ 878 has been refreshed on screen */
853 879
854#ifdef HAVE_LCD_BITMAP 880#ifdef HAVE_LCD_BITMAP
855 int fw, fh; 881 tree_max_on_screen = recalc_screen_height();
856 lcd_setfont(FONT_UI);
857 lcd_getstringsize("A", &fw, &fh);
858 tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh;
859#else 882#else
860 tree_max_on_screen = TREE_MAX_ON_SCREEN; 883 tree_max_on_screen = TREE_MAX_ON_SCREEN;
861#endif 884#endif
@@ -1065,8 +1088,7 @@ static bool dirbrowse(char *root, int *dirfilter)
1065 lcd_update(); 1088 lcd_update();
1066 1089
1067 /* maybe we have a new font */ 1090 /* maybe we have a new font */
1068 lcd_getstringsize("A", &fw, &fh); 1091 tree_max_on_screen = recalc_screen_height();
1069 tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh;
1070 /* make sure cursor is on screen */ 1092 /* make sure cursor is on screen */
1071 while ( dircursor > tree_max_on_screen ) 1093 while ( dircursor > tree_max_on_screen )
1072 { 1094 {
@@ -1114,8 +1136,7 @@ static bool dirbrowse(char *root, int *dirfilter)
1114 set_file(buf, global_settings.font_file, 1136 set_file(buf, global_settings.font_file,
1115 MAX_FILENAME); 1137 MAX_FILENAME);
1116 1138
1117 lcd_getstringsize("A", &fw, &fh); 1139 tree_max_on_screen = recalc_screen_height();
1118 tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh;
1119 /* make sure cursor is on screen */ 1140 /* make sure cursor is on screen */
1120 while ( dircursor > tree_max_on_screen ) { 1141 while ( dircursor > tree_max_on_screen ) {
1121 dircursor--; 1142 dircursor--;
@@ -1291,7 +1312,7 @@ static bool dirbrowse(char *root, int *dirfilter)
1291 reload_root = true; 1312 reload_root = true;
1292 1313
1293#ifdef HAVE_LCD_BITMAP 1314#ifdef HAVE_LCD_BITMAP
1294 tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh; 1315 tree_max_on_screen = recalc_screen_height();
1295#endif 1316#endif
1296 restore = true; 1317 restore = true;
1297 } 1318 }
@@ -1318,7 +1339,7 @@ static bool dirbrowse(char *root, int *dirfilter)
1318 if (wps_show() == SYS_USB_CONNECTED) 1339 if (wps_show() == SYS_USB_CONNECTED)
1319 reload_root = true; 1340 reload_root = true;
1320#ifdef HAVE_LCD_BITMAP 1341#ifdef HAVE_LCD_BITMAP
1321 tree_max_on_screen = (LCD_HEIGHT - MARGIN_Y) / fh; 1342 tree_max_on_screen = recalc_screen_height();
1322#endif 1343#endif
1323 restore = true; 1344 restore = true;
1324 start_wps=false; 1345 start_wps=false;