Mercurial > MadButterfly
annotate examples/menu/filebrowser.c @ 509:3e0d63d7c7ae Android_Skia
Remove absolute pathes from config.cache.
Absolute pathes in config.cache would be the source of problems when
the source tree of Android is different from what is in config.cache.
So, these cached values are removed and re-computed when running
configure.
author | Thinker K.F. Li <thinker@branda.to> |
---|---|
date | Tue, 01 Dec 2009 22:55:27 +0800 |
parents | 26c302b47de1 |
children | d7f224b97b7f |
rev | line source |
---|---|
309 | 1 /*! \file |
2 * | |
3 * This is the demo program for the animated menu. We will use to test the MBAF API. | |
4 * We need to have group item1-item9 in the SVG file. Initially, we will show | |
5 * item1-item8 only. When a up/down key is pressed, we will draw the next item in item9 and | |
6 * add two words to move item1-item9 smoothly. The first word move items to the 3/4 position | |
7 * fastly. The second will move it from 3/4 to the final position slowly to make retard effect. | |
8 * | |
9 * If we press another key before the second words finish, we will delete the word and replace | |
10 * it with a word to move it fastly to the final position and then we will repeat the procedure | |
11 * to add another two words to move it to the next position. | |
12 */ | |
13 #include <stdio.h> | |
14 #include <mb.h> | |
15 #include <string.h> | |
16 #include <dirent.h> | |
325 | 17 //#include "menu.h" |
456
26c302b47de1
Change name of header files.
Thinker K.F. Li <thinker@branda.to>
parents:
454
diff
changeset
|
18 #include "mb_af.h" |
26c302b47de1
Change name of header files.
Thinker K.F. Li <thinker@branda.to>
parents:
454
diff
changeset
|
19 #include <mb_ani_menu.h> |
309 | 20 |
21 | |
22 | |
23 struct fileinfo { | |
24 int height; | |
25 int width; | |
26 int depth; | |
27 int bitrate; | |
28 int duration; | |
29 int year; | |
30 char *comment; | |
31 }; | |
32 #define MAX_ENTRY 1000 | |
33 typedef struct { | |
34 mb_animated_menu_t *m; | |
35 char *curDir; | |
36 struct fileinfo *files[MAX_ENTRY]; | |
37 char *titles[MAX_ENTRY]; | |
38 int nFiles; | |
454
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
39 }app_data_t; |
309 | 40 |
454
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
41 mbaf_t *app; |
309 | 42 |
43 | |
44 | |
45 void myselect(mb_animated_menu_t *m, int select) | |
46 { | |
454
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
47 app_data_t *data = MBAF_DATA(app,app_data_t); |
309 | 48 char path[1024]; |
49 int len,i; | |
50 | |
51 if (strcmp(data->titles[select],"..")==0) { | |
52 strcpy(path, data->curDir); | |
53 len = strlen(path); | |
54 for(i=len-1;i>0;i--) { | |
55 if (path[i] == '/') { | |
56 path[i] = 0; | |
57 break; | |
58 } | |
59 } | |
60 } else { | |
61 snprintf(path,1024,"%s/%s", data->curDir,data->titles[select]); | |
62 } | |
63 | |
454
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
64 MyApp_fillDirInfo(app, path); |
309 | 65 } |
66 | |
67 | |
454
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
68 void mypreview(app_data_t *data, char *path) |
344 | 69 { |
454
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
70 redraw_man_t *rdman = MBAF_RDMAN(app); |
356
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
348
diff
changeset
|
71 paint_t *paint, *old_paint; |
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
348
diff
changeset
|
72 paint_t *previewimg_paint; |
454
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
73 shape_t *obj = (shape_t *) MB_SPRITE_GET_OBJ(app->rootsprite, "previewimg"); |
356
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
348
diff
changeset
|
74 int w, h; |
344 | 75 |
356
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
348
diff
changeset
|
76 previewimg_paint = |
454
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
77 (paint_t *)MB_SPRITE_GET_OBJ(app->rootsprite, |
356
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
348
diff
changeset
|
78 "previewimg_paint_img"); |
344 | 79 printf("Preview %s\n",path); |
356
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
348
diff
changeset
|
80 paint = rdman_img_ldr_load_paint(rdman, path); |
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
348
diff
changeset
|
81 if (paint) { |
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
348
diff
changeset
|
82 paint_image_get_size(paint, &w, &h); |
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
348
diff
changeset
|
83 printf("image %d %d\n",w, h); |
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
348
diff
changeset
|
84 old_paint = sh_get_fill(obj); |
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
348
diff
changeset
|
85 rdman_paint_fill(rdman, paint, obj); |
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
348
diff
changeset
|
86 if(old_paint != previewimg_paint) |
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
348
diff
changeset
|
87 rdman_paint_free(rdman, old_paint); |
3e84458968ec
Move mb_img_data_t out from argument list of rdman_shape_image_new().
Thinker K.F. Li <thinker@branda.to>
parents:
348
diff
changeset
|
88 |
454
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
89 rdman_shape_changed(MBAF_RDMAN(app),obj); |
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
90 rdman_redraw_changed(MBAF_RDMAN(app)); |
344 | 91 } |
92 } | |
93 | |
94 int endWith(char *path, char *ext) | |
95 { | |
96 int i; | |
97 char *s; | |
98 | |
99 s = path+strlen(path)-1; | |
100 for(i=strlen(ext)-1;i>=0;i--) { | |
101 if (*s != ext[i]) return 0; | |
102 s--; | |
103 if (s < path) return 0; | |
104 } | |
105 return 1; | |
106 } | |
107 | |
108 void myupdate(mb_animated_menu_t *m, int select) | |
109 { | |
454
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
110 app_data_t *data = MBAF_DATA(app,app_data_t); |
344 | 111 char *s = data->titles[select]; |
112 char path[1024]; | |
113 | |
114 printf("check %s\n",s); | |
115 | |
345 | 116 if (endWith(s,".png")) { |
344 | 117 snprintf(path,1024,"%s%s", data->curDir,data->titles[select]); |
118 mypreview(data,path); | |
119 } | |
120 } | |
121 | |
122 | |
123 | |
309 | 124 struct fileinfo *fileinfo_new() |
125 { | |
126 struct fileinfo *f = (struct fileinfo *) malloc(sizeof(struct fileinfo)); | |
127 | |
128 f->width = 0; | |
129 f->height = 0; | |
130 f->depth = 0; | |
131 f->bitrate = 0; | |
132 f->duration = 0; | |
133 f->year = 0; | |
134 f->comment = NULL; | |
135 return f; | |
136 } | |
137 | |
138 void fileinfo_free(struct fileinfo *f) | |
139 { | |
140 free(f); | |
141 } | |
142 | |
143 | |
454
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
144 MyApp_fillDirInfo(mbaf_t *app,char *curdir) |
309 | 145 { |
454
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
146 app_data_t *data = MBAF_DATA(app,app_data_t); |
309 | 147 DIR *dir; |
148 struct dirent *e; | |
149 struct fileinfo *f; | |
150 int i; | |
151 | |
152 dir = opendir(curdir); | |
153 if (dir == NULL) { | |
154 printf("We can not open the direftory %s\n", curdir); | |
155 return; | |
156 } | |
157 | |
329
740844ee48c4
Update position of light-bar after update menu item
Thinker K.F. Li <thinker@branda.to>
parents:
325
diff
changeset
|
158 if (data->curDir) |
740844ee48c4
Update position of light-bar after update menu item
Thinker K.F. Li <thinker@branda.to>
parents:
325
diff
changeset
|
159 free(data->curDir); |
740844ee48c4
Update position of light-bar after update menu item
Thinker K.F. Li <thinker@branda.to>
parents:
325
diff
changeset
|
160 data->curDir = strdup(curdir); |
740844ee48c4
Update position of light-bar after update menu item
Thinker K.F. Li <thinker@branda.to>
parents:
325
diff
changeset
|
161 |
309 | 162 if (data->files) { |
163 for(i=0;i<data->nFiles;i++) { | |
164 fileinfo_free(data->files[i]); | |
165 free(data->titles[i]); | |
166 } | |
167 } | |
168 data->nFiles = 0; | |
169 while(e = readdir(dir)) { | |
170 if (strcmp(e->d_name,".")==0) continue; | |
171 if (e->d_type == DT_DIR) { | |
172 if (data->nFiles < MAX_ENTRY) { | |
173 f = fileinfo_new(); | |
174 data->files[data->nFiles] = f; | |
175 data->titles[data->nFiles++] = strdup(e->d_name); | |
176 printf("%s\n", e->d_name); | |
177 } | |
178 } | |
179 } | |
180 | |
181 closedir(dir); | |
182 dir = opendir(curdir); | |
183 while(e = readdir(dir)) { | |
184 if (strcmp(e->d_name,".")==0) continue; | |
185 if (e->d_type == DT_REG) { | |
186 if (data->nFiles < MAX_ENTRY) { | |
187 f = fileinfo_new(); | |
188 data->files[data->nFiles] = f; | |
189 data->titles[data->nFiles++] = strdup(e->d_name); | |
190 printf("%s\n", e->d_name); | |
191 } | |
192 } | |
193 } | |
194 closedir(dir); | |
195 data->titles[data->nFiles] = NULL; | |
196 mb_animated_menu_set_titles(data->m,data->titles); | |
197 } | |
198 | |
199 | |
200 MyApp_InitContent(char *dir) | |
201 { | |
454
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
202 app_data_t *data = MBAF_DATA(app,app_data_t); |
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
203 subject_t *key = MBAF_KB_SUBJECT(app); |
309 | 204 char name[255]; |
205 coord_t *l; | |
206 int i; | |
454
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
207 mb_sprite_t *sprite=app->rootsprite; |
309 | 208 |
454
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
209 data->m = mb_animated_menu_new(app,app->rootsprite,"item",NULL); |
309 | 210 mb_animated_menu_set_callback(data->m, myselect); |
344 | 211 mb_animated_menu_set_update_callback(data->m, myupdate); |
309 | 212 data->curDir = NULL; |
213 data->nFiles=0; | |
454
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
214 MyApp_fillDirInfo(app,dir); |
309 | 215 mb_animated_menu_set_speed(data->m,300); |
216 } | |
217 | |
218 int main(int argc, char * const argv[]) { | |
219 subject_t *subject; | |
220 mb_obj_t *button; | |
454
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
221 app_data_t data; |
309 | 222 mb_timeval_t tmo,interval; |
223 char *dir; | |
224 | |
225 if (argc > 1) | |
226 dir = argv[1]; | |
227 else | |
228 dir ="/tmp"; | |
454
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
229 app = mbaf_init("browser", ".libs"); |
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
230 mbaf_set_data(app,&data); |
309 | 231 MyApp_InitContent(dir); |
232 | |
454
9b8dda201ccb
Make naming convention consistent with MadButterfly.
Thinker K.F. Li <thinker@branda.to>
parents:
453
diff
changeset
|
233 mbaf_loop(app); |
309 | 234 |
235 return 0; | |
236 } | |
237 | |
238 /* vim: set ts=4 */ |