diff --git a/uisimulator/app.c b/uisimulator/app.c
index bb0c831729..a263810c7e 100644
--- a/uisimulator/app.c
+++ b/uisimulator/app.c
@@ -88,10 +88,7 @@ void app_main(void)
menu_init();
break;
case (LINE_BROWSE * LINE_HEIGHT):
- lcd_clearrect(0, 0, LCD_WIDTH, LCD_HEIGHT);
dirbrowse("/");
- lcd_update();
- while((!button_get()));
lcd_clearrect(0, 0, LCD_WIDTH, LCD_HEIGHT);
menu_init();
break;
diff --git a/uisimulator/tree.c b/uisimulator/tree.c
index f9d2af4439..4cd5f2a209 100644
--- a/uisimulator/tree.c
+++ b/uisimulator/tree.c
@@ -19,30 +19,75 @@
#include
#include
+#include
+#include
#define TREE_MAX_LEN 15
+#define TREE_MAX_ON_SCREEN 7
+
+int dircursor=0;
bool dirbrowse(char *root)
{
DIR *dir = opendir(root);
int i;
struct dirent *entry;
- char buffer[20];
+ char buffer[TREE_MAX_ON_SCREEN][20];
if(!dir)
return TRUE; /* failure */
+ lcd_clearrect(0, 0, LCD_WIDTH, LCD_HEIGHT);
+
+ lcd_puts(0,0, "[Browse]", 0);
+
i=0;
while((entry = readdir(dir))) {
- strncpy(buffer, entry->d_name, TREE_MAX_LEN);
- buffer[TREE_MAX_LEN]=0;
- lcd_puts(0, i*8, buffer, 0);
+ strncpy(buffer[i], entry->d_name, TREE_MAX_LEN);
+ buffer[i][TREE_MAX_LEN]=0;
+ lcd_puts(6, 8+i*8, buffer[i], 0);
- if(++i > 8)
+ if(++i > TREE_MAX_ON_SCREEN)
break;
}
closedir(dir);
+ lcd_puts(0, 8+dircursor, "-", 0);
+
+ lcd_update();
+
+ while(1) {
+ int key = button_get();
+
+ if(!key) {
+ sleep(1);
+ continue;
+ }
+ switch(key) {
+ case BUTTON_OFF:
+ case BUTTON_LEFT:
+ return FALSE;
+ break;
+
+ case BUTTON_UP:
+ if(dircursor) {
+ lcd_puts(0, 8+dircursor, " ", 0);
+ dircursor -= 8;
+ lcd_puts(0, 8+dircursor, "-", 0);
+ lcd_update();
+ }
+ break;
+ case BUTTON_DOWN:
+ if(dircursor < (8 * TREE_MAX_ON_SCREEN)) {
+ lcd_puts(0, 8+dircursor, " ", 0);
+ dircursor += 8;
+ lcd_puts(0, 8+dircursor, "-", 0);
+ lcd_update();
+ }
+ break;
+ }
+ }
+
return FALSE;
}