summaryrefslogtreecommitdiff
path: root/uisimulator/tree.c
blob: 7f8a76518f9b99ca32d10586a2e8742d7d89c883 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/***************************************************************************
 *             __________               __   ___.
 *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
 *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
 *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
 *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
 *                     \/            \/     \/    \/            \/
 * $Id$
 *
 * Copyright (C) 2002 Daniel Stenberg
 *
 * All files in this archive are subject to the GNU General Public License.
 * See the file COPYING in the source tree root for full license agreement.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ****************************************************************************/

#include <dir.h>
#include <types.h>
#include <lcd.h>
#include <button.h>
#include "kernel.h"
#ifdef WIN32
#include <windows.h>
#endif // WIN32

#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[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[i], entry->d_name, TREE_MAX_LEN);
    buffer[i][TREE_MAX_LEN]=0;
    lcd_puts(6, 8+i*8, buffer[i], 0);

    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;
}