Mercurial > mplayer.hg
annotate libmenu/menu_list.c @ 25460:3086b6d39052
Move two variable to the scope where they are indeed used.
author | ulion |
---|---|
date | Sat, 22 Dec 2007 03:45:14 +0000 |
parents | 11cd0fdfcb4a |
children | 7ef04742572c |
rev | line source |
---|---|
8197 | 1 |
2 #include <stdlib.h> | |
3 #include <stdio.h> | |
4 #include <ctype.h> | |
8623
440301fef3fe
Added/reordered #includes to silence warnings about "implicit declaration".
rathann
parents:
8197
diff
changeset
|
5 #include <string.h> |
8197 | 6 |
16862 | 7 #include "config.h" |
8197 | 8 |
19431
ac69ba536915
Explicitly include libmpcodecs/img_format.h and libvo/fastmemcpy.h.
diego
parents:
18204
diff
changeset
|
9 #include "libmpcodecs/img_format.h" |
ac69ba536915
Explicitly include libmpcodecs/img_format.h and libvo/fastmemcpy.h.
diego
parents:
18204
diff
changeset
|
10 #include "libmpcodecs/mp_image.h" |
8197 | 11 |
12 #include "m_struct.h" | |
13 #include "menu.h" | |
14 | |
16862 | 15 #include "libvo/font_load.h" |
16 #include "osdep/keycodes.h" | |
8197 | 17 |
18 #define IMPL 1 | |
19 #include "menu_list.h" | |
20 | |
21 #define mpriv (menu->priv) | |
22 | |
23 void menu_list_draw(menu_t* menu,mp_image_t* mpi) { | |
24 int x = mpriv->x; | |
25 int y = mpriv->y; | |
26 int i; | |
27 int h = mpriv->h; | |
28 int w = mpriv->w; | |
29 int dh = 0,dw = 0; | |
25438
11cd0fdfcb4a
Add variable bx, dx to simplify code of function menu_draw_list.
ulion
parents:
25437
diff
changeset
|
30 int bx, dx, dy = 0; |
17946
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
31 int need_h = 0,need_w = 0,ptr_l,sidx = 0; |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
32 int th,count = 0; |
17993
98eb966a4024
Add a function to draw flat boxes and use it to make the list
albeu
parents:
17980
diff
changeset
|
33 int bg_w; |
25437
2664bccccb80
Add local variable 'line_h' to simplify code of function menu_list_draw.
ulion
parents:
25435
diff
changeset
|
34 int line_h; |
8197 | 35 list_entry_t* m; |
36 | |
37 if(mpriv->count < 1) | |
38 return; | |
39 | |
40 if(h <= 0) h = mpi->height; | |
41 if(w <= 0) w = mpi->width; | |
42 dh = h - 2*mpriv->minb; | |
43 dw = w - 2*mpriv->minb; | |
17946
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
44 ptr_l = mpriv->ptr ? menu_text_length(mpriv->ptr) : 0; |
8197 | 45 // mpi is too small |
46 if(h - vo_font->height <= 0 || w - ptr_l <= 0 || dw <= 0 || dh <= 0) | |
47 return; | |
48 | |
25437
2664bccccb80
Add local variable 'line_h' to simplify code of function menu_list_draw.
ulion
parents:
25435
diff
changeset
|
49 line_h = mpriv->vspace + vo_font->height; |
2664bccccb80
Add local variable 'line_h' to simplify code of function menu_list_draw.
ulion
parents:
25435
diff
changeset
|
50 th = menu_text_num_lines(mpriv->title,dw) * line_h + mpriv->vspace; |
8197 | 51 |
17946
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
52 // the selected item is hidden, find a visible one |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
53 if(mpriv->current->hide) { |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
54 // try the next |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
55 for(m = mpriv->current->next ; m ; m = m->next) |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
56 if(!m->hide) break; |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
57 if(!m) // or the previous |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
58 for(m = mpriv->current->prev ; m ; m = m->prev) |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
59 if(!m->hide) break; |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
60 if(m) mpriv->current = m; |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
61 else ptr_l = 0; |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
62 } |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
63 |
8197 | 64 for(i = 0, m = mpriv->menu ; m ; m = m->next, i++) { |
17946
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
65 int ll; |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
66 if(m->hide) continue; |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
67 ll = menu_text_length(m->txt); |
8197 | 68 if(ptr_l + ll > need_w) need_w = ptr_l + ll; |
69 if(m == mpriv->current) sidx = i; | |
17946
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
70 count++; |
8197 | 71 } |
72 if(need_w > dw) need_w = dw; | |
25421
cc1b8a9d0ae2
Here should add the minb to x when x>=0 because in later code
ulion
parents:
25263
diff
changeset
|
73 if(x >= 0) |
8197 | 74 x += mpriv->minb; |
75 if(y > 0) | |
76 y += mpriv->minb; | |
77 else | |
78 y = mpriv->minb; | |
79 | |
25437
2664bccccb80
Add local variable 'line_h' to simplify code of function menu_list_draw.
ulion
parents:
25435
diff
changeset
|
80 need_h = count * line_h - mpriv->vspace; |
8197 | 81 if( need_h + th > dh) { |
82 int start,end; | |
25437
2664bccccb80
Add local variable 'line_h' to simplify code of function menu_list_draw.
ulion
parents:
25435
diff
changeset
|
83 mpriv->disp_lines = (dh + mpriv->vspace - th) / line_h; |
24979
476d4922566a
Make page up and down with proper page size instead of always 10 rows.
ulion
parents:
19431
diff
changeset
|
84 if(mpriv->disp_lines < 4) { |
8197 | 85 th = 0; |
25437
2664bccccb80
Add local variable 'line_h' to simplify code of function menu_list_draw.
ulion
parents:
25435
diff
changeset
|
86 mpriv->disp_lines = (dh + mpriv->vspace) / line_h; |
8197 | 87 } |
88 // Too smoll | |
24979
476d4922566a
Make page up and down with proper page size instead of always 10 rows.
ulion
parents:
19431
diff
changeset
|
89 if(mpriv->disp_lines < 1) return; |
25437
2664bccccb80
Add local variable 'line_h' to simplify code of function menu_list_draw.
ulion
parents:
25435
diff
changeset
|
90 need_h = mpriv->disp_lines * line_h - mpriv->vspace; |
8197 | 91 |
24979
476d4922566a
Make page up and down with proper page size instead of always 10 rows.
ulion
parents:
19431
diff
changeset
|
92 start = sidx - (mpriv->disp_lines/2); |
8197 | 93 if(start < 0) start = 0; |
24979
476d4922566a
Make page up and down with proper page size instead of always 10 rows.
ulion
parents:
19431
diff
changeset
|
94 end = start + mpriv->disp_lines; |
17946
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
95 if(end > count) { |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
96 end = count; |
24979
476d4922566a
Make page up and down with proper page size instead of always 10 rows.
ulion
parents:
19431
diff
changeset
|
97 if(end - start < mpriv->disp_lines) |
476d4922566a
Make page up and down with proper page size instead of always 10 rows.
ulion
parents:
19431
diff
changeset
|
98 start = end - mpriv->disp_lines < 0 ? 0 : end - mpriv->disp_lines; |
8197 | 99 } |
100 m = mpriv->menu; | |
17946
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
101 for(i = 0 ; m->next && i < start ; ) { |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
102 if(!m->hide) i++; |
8197 | 103 m = m->next; |
17946
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
104 } |
24979
476d4922566a
Make page up and down with proper page size instead of always 10 rows.
ulion
parents:
19431
diff
changeset
|
105 } else { |
8197 | 106 m = mpriv->menu; |
24979
476d4922566a
Make page up and down with proper page size instead of always 10 rows.
ulion
parents:
19431
diff
changeset
|
107 mpriv->disp_lines = count; |
476d4922566a
Make page up and down with proper page size instead of always 10 rows.
ulion
parents:
19431
diff
changeset
|
108 } |
8197 | 109 |
17993
98eb966a4024
Add a function to draw flat boxes and use it to make the list
albeu
parents:
17980
diff
changeset
|
110 bg_w = need_w+2*mpriv->minb; |
8197 | 111 if(th > 0) { |
25435
5779358c3f86
Currently menu title did not align center together with menu items when x>=0.
ulion
parents:
25421
diff
changeset
|
112 int tw,th2; |
5779358c3f86
Currently menu title did not align center together with menu items when x>=0.
ulion
parents:
25421
diff
changeset
|
113 menu_text_size(mpriv->title,dw,mpriv->vspace,1,&tw,&th2); |
17993
98eb966a4024
Add a function to draw flat boxes and use it to make the list
albeu
parents:
17980
diff
changeset
|
114 if(mpriv->title_bg >= 0) { |
98eb966a4024
Add a function to draw flat boxes and use it to make the list
albeu
parents:
17980
diff
changeset
|
115 if(tw+2*mpriv->minb > bg_w) bg_w = tw+2*mpriv->minb; |
98eb966a4024
Add a function to draw flat boxes and use it to make the list
albeu
parents:
17980
diff
changeset
|
116 menu_draw_box(mpi,mpriv->title_bg,mpriv->title_bg_alpha, |
18204 | 117 x < 0 ? (mpi->w-bg_w)/2 : x-mpriv->minb,dy+y-mpriv->vspace/2,bg_w,th); |
17993
98eb966a4024
Add a function to draw flat boxes and use it to make the list
albeu
parents:
17980
diff
changeset
|
118 } |
8197 | 119 menu_draw_text_full(mpi,mpriv->title, |
120 x < 0 ? mpi->w / 2 : x, | |
25435
5779358c3f86
Currently menu title did not align center together with menu items when x>=0.
ulion
parents:
25421
diff
changeset
|
121 dy+y, x < 0 ? dw : (tw > need_w ? tw : need_w), 0, |
8197 | 122 mpriv->vspace,1, |
123 MENU_TEXT_TOP|MENU_TEXT_HCENTER, | |
124 MENU_TEXT_TOP|(x < 0 ? MENU_TEXT_HCENTER :MENU_TEXT_LEFT)); | |
125 dy += th; | |
126 } | |
127 | |
25438
11cd0fdfcb4a
Add variable bx, dx to simplify code of function menu_draw_list.
ulion
parents:
25437
diff
changeset
|
128 dx = x < 0 ? (mpi->w - need_w) / 2 : x; |
11cd0fdfcb4a
Add variable bx, dx to simplify code of function menu_draw_list.
ulion
parents:
25437
diff
changeset
|
129 bx = x < 0 ? (mpi->w - bg_w) / 2 : x - mpriv->minb; |
8197 | 130 for( ; m != NULL && dy + vo_font->height < dh ; m = m->next ) { |
17946
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
131 if(m->hide) continue; |
17993
98eb966a4024
Add a function to draw flat boxes and use it to make the list
albeu
parents:
17980
diff
changeset
|
132 if(m == mpriv->current) { |
98eb966a4024
Add a function to draw flat boxes and use it to make the list
albeu
parents:
17980
diff
changeset
|
133 if(mpriv->ptr_bg >= 0) |
98eb966a4024
Add a function to draw flat boxes and use it to make the list
albeu
parents:
17980
diff
changeset
|
134 menu_draw_box(mpi,mpriv->ptr_bg,mpriv->ptr_bg_alpha, |
25438
11cd0fdfcb4a
Add variable bx, dx to simplify code of function menu_draw_list.
ulion
parents:
25437
diff
changeset
|
135 bx, dy + y - mpriv->vspace / 2, |
25437
2664bccccb80
Add local variable 'line_h' to simplify code of function menu_list_draw.
ulion
parents:
25435
diff
changeset
|
136 bg_w, line_h); |
17993
98eb966a4024
Add a function to draw flat boxes and use it to make the list
albeu
parents:
17980
diff
changeset
|
137 if(ptr_l > 0) |
98eb966a4024
Add a function to draw flat boxes and use it to make the list
albeu
parents:
17980
diff
changeset
|
138 menu_draw_text_full(mpi,mpriv->ptr, |
25438
11cd0fdfcb4a
Add variable bx, dx to simplify code of function menu_draw_list.
ulion
parents:
25437
diff
changeset
|
139 dx, |
17993
98eb966a4024
Add a function to draw flat boxes and use it to make the list
albeu
parents:
17980
diff
changeset
|
140 dy+y,dw,dh - dy, |
98eb966a4024
Add a function to draw flat boxes and use it to make the list
albeu
parents:
17980
diff
changeset
|
141 mpriv->vspace,0, |
25438
11cd0fdfcb4a
Add variable bx, dx to simplify code of function menu_draw_list.
ulion
parents:
25437
diff
changeset
|
142 MENU_TEXT_TOP|MENU_TEXT_LEFT, |
11cd0fdfcb4a
Add variable bx, dx to simplify code of function menu_draw_list.
ulion
parents:
25437
diff
changeset
|
143 MENU_TEXT_TOP|MENU_TEXT_LEFT); |
17993
98eb966a4024
Add a function to draw flat boxes and use it to make the list
albeu
parents:
17980
diff
changeset
|
144 } else if(mpriv->item_bg >= 0) |
98eb966a4024
Add a function to draw flat boxes and use it to make the list
albeu
parents:
17980
diff
changeset
|
145 menu_draw_box(mpi,mpriv->item_bg,mpriv->item_bg_alpha, |
25438
11cd0fdfcb4a
Add variable bx, dx to simplify code of function menu_draw_list.
ulion
parents:
25437
diff
changeset
|
146 bx, dy + y - mpriv->vspace / 2, |
25437
2664bccccb80
Add local variable 'line_h' to simplify code of function menu_list_draw.
ulion
parents:
25435
diff
changeset
|
147 bg_w, line_h); |
8197 | 148 menu_draw_text_full(mpi,m->txt, |
25438
11cd0fdfcb4a
Add variable bx, dx to simplify code of function menu_draw_list.
ulion
parents:
25437
diff
changeset
|
149 dx + ptr_l, |
8197 | 150 dy+y,dw-ptr_l,dh - dy, |
151 mpriv->vspace,0, | |
152 MENU_TEXT_TOP|MENU_TEXT_LEFT, | |
153 MENU_TEXT_TOP|MENU_TEXT_LEFT); | |
25437
2664bccccb80
Add local variable 'line_h' to simplify code of function menu_list_draw.
ulion
parents:
25435
diff
changeset
|
154 dy += line_h; |
8197 | 155 } |
156 | |
157 } | |
158 | |
159 void menu_list_read_cmd(menu_t* menu,int cmd) { | |
25263
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
160 list_entry_t* m; |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
161 int i; |
8197 | 162 switch(cmd) { |
163 case MENU_CMD_UP: | |
17980 | 164 while(mpriv->current->prev) { |
165 mpriv->current = mpriv->current->prev; | |
17946
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
166 if(!mpriv->current->hide) return; |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
167 } |
17980 | 168 for( ; mpriv->current->next != NULL ; mpriv->current = mpriv->current->next) |
169 /* NOTHING */; | |
170 if(!mpriv->current->hide) return; | |
17946
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
171 while(mpriv->current->prev) { |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
172 mpriv->current = mpriv->current->prev; |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
173 if(!mpriv->current->hide) return; |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
174 } |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
175 break; |
8197 | 176 case MENU_CMD_DOWN: |
17980 | 177 while(mpriv->current->next) { |
178 mpriv->current = mpriv->current->next; | |
17946
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
179 if(!mpriv->current->hide) return; |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
180 } |
17980 | 181 mpriv->current = mpriv->menu; |
182 if(!mpriv->current->hide) return; | |
17946
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
183 while(mpriv->current->next) { |
8197 | 184 mpriv->current = mpriv->current->next; |
17946
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
185 if(!mpriv->current->hide) return; |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
186 } |
0afe12256464
Allow hiding list elements and disableing the pointer.
albeu
parents:
17945
diff
changeset
|
187 break; |
25263
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
188 case MENU_CMD_HOME: |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
189 mpriv->current = mpriv->menu; |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
190 break; |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
191 case MENU_CMD_END: |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
192 for(m = mpriv->current ; m && m->next ; m = m->next) |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
193 /**/; |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
194 if(m) |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
195 mpriv->current = m; |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
196 break; |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
197 case MENU_CMD_PAGE_UP: |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
198 for(i = 0, m = mpriv->current ; m && m->prev && i < mpriv->disp_lines ; m = m->prev, i++) |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
199 /**/; |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
200 if(m) |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
201 mpriv->current = m; |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
202 break; |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
203 case MENU_CMD_PAGE_DOWN: |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
204 for(i = 0, m = mpriv->current ; m && m->next && i < mpriv->disp_lines ; m = m->next, i++) |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
205 /**/; |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
206 if(m) |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
207 mpriv->current = m; |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
208 break; |
17945
98f4e3704a76
Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents:
16862
diff
changeset
|
209 case MENU_CMD_LEFT: |
8197 | 210 case MENU_CMD_CANCEL: |
211 menu->show = 0; | |
212 menu->cl = 1; | |
213 break; | |
214 } | |
215 } | |
216 | |
25263
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
217 int menu_list_jump_to_key(menu_t* menu,int c) { |
10935
ec8a1e6443d5
Fix long-known bug with handling 'down key' in lists.
lumag
parents:
9380
diff
changeset
|
218 if(c < 256 && isalnum(c)) { |
8197 | 219 list_entry_t* e = mpriv->current; |
220 if(e->txt[0] == c) e = e->next; | |
221 for( ; e ; e = e->next) { | |
222 if(e->txt[0] == c) { | |
223 mpriv->current = e; | |
25263
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
224 return 1; |
8197 | 225 } |
226 } | |
227 for(e = mpriv->menu ; e ; e = e->next) { | |
228 if(e->txt[0] == c) { | |
229 mpriv->current = e; | |
25263
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
230 return 1; |
8197 | 231 } |
232 } | |
25263
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
233 return 1; |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
234 } |
96d0992c7920
Remove hardcoded key->cmd bindings in libmenu, support custom key bindings
ulion
parents:
24979
diff
changeset
|
235 return 0; |
8197 | 236 } |
237 | |
238 void menu_list_add_entry(menu_t* menu,list_entry_t* entry) { | |
239 list_entry_t* l; | |
240 mpriv->count++; | |
241 | |
242 if(mpriv->menu == NULL) { | |
243 mpriv->menu = mpriv->current = entry; | |
244 return; | |
245 } | |
246 | |
247 for(l = mpriv->menu ; l->next != NULL ; l = l->next) | |
248 /* NOP */; | |
249 l->next = entry; | |
250 entry->prev = l; | |
251 } | |
252 | |
253 void menu_list_init(menu_t* menu) { | |
254 if(!mpriv) | |
255 mpriv = calloc(1,sizeof(struct menu_priv_s)); | |
256 | |
257 } | |
258 | |
259 void menu_list_uninit(menu_t* menu,free_entry_t free_func) { | |
260 list_entry_t *i,*j; | |
261 | |
262 if(!free_func) free_func = (free_entry_t)free; | |
263 | |
264 for(i = mpriv->menu ; i != NULL ; ) { | |
265 j = i->next; | |
266 free_func(i); | |
267 i = j; | |
268 } | |
269 | |
270 mpriv->menu = mpriv->current = NULL; | |
271 | |
272 } | |
17945
98f4e3704a76
Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents:
16862
diff
changeset
|
273 |