Mercurial > mplayer.hg
annotate libmenu/menu_cmdlist.c @ 25455:4120fe275a0f
The lagarith DLL requires an MMX2 CPU.
author | diego |
---|---|
date | Fri, 21 Dec 2007 11:41:42 +0000 |
parents | f3acd58a3eff |
children | 4852e5553d4e |
rev | line source |
---|---|
8197 | 1 |
16862 | 2 #include "config.h" |
17994
6927fabaef92
Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents:
17945
diff
changeset
|
3 #include "mp_msg.h" |
6927fabaef92
Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents:
17945
diff
changeset
|
4 #include "help_mp.h" |
8197 | 5 |
6 #include <stdlib.h> | |
7 #include <stdio.h> | |
8 #include <ctype.h> | |
8623
440301fef3fe
Added/reordered #includes to silence warnings about "implicit declaration".
rathann
parents:
8197
diff
changeset
|
9 #include <string.h> |
8197 | 10 |
19431
ac69ba536915
Explicitly include libmpcodecs/img_format.h and libvo/fastmemcpy.h.
diego
parents:
18819
diff
changeset
|
11 #include "libmpcodecs/img_format.h" |
ac69ba536915
Explicitly include libmpcodecs/img_format.h and libvo/fastmemcpy.h.
diego
parents:
18819
diff
changeset
|
12 #include "libmpcodecs/mp_image.h" |
8197 | 13 |
16862 | 14 #include "m_option.h" |
15 #include "m_struct.h" | |
16 #include "asxparser.h" | |
8197 | 17 #include "menu.h" |
18 #include "menu_list.h" | |
19 | |
16862 | 20 #include "libvo/font_load.h" |
8197 | 21 |
16862 | 22 #include "input/input.h" |
23 #include "version.h" | |
8197 | 24 |
25 | |
26 | |
27 struct list_entry_s { | |
28 struct list_entry p; | |
29 | |
30 char* ok; | |
31 char* cancel; | |
17945
98f4e3704a76
Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents:
16862
diff
changeset
|
32 char* left; |
98f4e3704a76
Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents:
16862
diff
changeset
|
33 char* right; |
8197 | 34 }; |
35 | |
36 struct menu_priv_s { | |
37 menu_list_priv_t p; | |
18819
cd0491dc2afa
support for auto_close parameter in menu command list (geexbox patch)
ben
parents:
18817
diff
changeset
|
38 int auto_close; |
8197 | 39 }; |
40 | |
18819
cd0491dc2afa
support for auto_close parameter in menu command list (geexbox patch)
ben
parents:
18817
diff
changeset
|
41 #define ST_OFF(m) M_ST_OFF(struct menu_priv_s, m) |
cd0491dc2afa
support for auto_close parameter in menu command list (geexbox patch)
ben
parents:
18817
diff
changeset
|
42 |
8197 | 43 static struct menu_priv_s cfg_dflt = { |
18819
cd0491dc2afa
support for auto_close parameter in menu command list (geexbox patch)
ben
parents:
18817
diff
changeset
|
44 MENU_LIST_PRIV_DFLT, |
cd0491dc2afa
support for auto_close parameter in menu command list (geexbox patch)
ben
parents:
18817
diff
changeset
|
45 0, |
8197 | 46 }; |
47 | |
48 static m_option_t cfg_fields[] = { | |
49 MENU_LIST_PRIV_FIELDS, | |
50 { "title",M_ST_OFF(struct menu_priv_s,p.title), CONF_TYPE_STRING, 0, 0, 0, NULL }, | |
18819
cd0491dc2afa
support for auto_close parameter in menu command list (geexbox patch)
ben
parents:
18817
diff
changeset
|
51 { "auto-close", ST_OFF(auto_close), CONF_TYPE_FLAG, 0, 0, 1, NULL }, |
8197 | 52 { NULL, NULL, NULL, 0,0,0,NULL } |
53 }; | |
54 | |
55 #define mpriv (menu->priv) | |
56 | |
57 static void read_cmd(menu_t* menu,int cmd) { | |
58 switch(cmd) { | |
17945
98f4e3704a76
Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents:
16862
diff
changeset
|
59 case MENU_CMD_RIGHT: |
98f4e3704a76
Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents:
16862
diff
changeset
|
60 if(mpriv->p.current->right) { |
25320
4fbf536cc033
Support to run multiple mplayer commands set in menu.conf
ulion
parents:
25263
diff
changeset
|
61 mp_input_parse_and_queue_cmds(mpriv->p.current->right); |
17945
98f4e3704a76
Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents:
16862
diff
changeset
|
62 break; |
98f4e3704a76
Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents:
16862
diff
changeset
|
63 } // fallback on ok if right is not defined |
8197 | 64 case MENU_CMD_OK: { |
65 if(mpriv->p.current->ok) { | |
25320
4fbf536cc033
Support to run multiple mplayer commands set in menu.conf
ulion
parents:
25263
diff
changeset
|
66 if (mp_input_parse_and_queue_cmds(mpriv->p.current->ok)) |
18819
cd0491dc2afa
support for auto_close parameter in menu command list (geexbox patch)
ben
parents:
18817
diff
changeset
|
67 { |
cd0491dc2afa
support for auto_close parameter in menu command list (geexbox patch)
ben
parents:
18817
diff
changeset
|
68 if (mpriv->auto_close) |
cd0491dc2afa
support for auto_close parameter in menu command list (geexbox patch)
ben
parents:
18817
diff
changeset
|
69 mp_input_queue_cmd (mp_input_parse_cmd ("menu hide")); |
cd0491dc2afa
support for auto_close parameter in menu command list (geexbox patch)
ben
parents:
18817
diff
changeset
|
70 } |
8197 | 71 } |
72 } break; | |
17945
98f4e3704a76
Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents:
16862
diff
changeset
|
73 case MENU_CMD_LEFT: |
98f4e3704a76
Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents:
16862
diff
changeset
|
74 if(mpriv->p.current->left) { |
25320
4fbf536cc033
Support to run multiple mplayer commands set in menu.conf
ulion
parents:
25263
diff
changeset
|
75 mp_input_parse_and_queue_cmds(mpriv->p.current->left); |
17945
98f4e3704a76
Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents:
16862
diff
changeset
|
76 break; |
98f4e3704a76
Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents:
16862
diff
changeset
|
77 } // fallback on cancel if left is not defined |
8197 | 78 case MENU_CMD_CANCEL: |
79 if(mpriv->p.current->cancel) { | |
25320
4fbf536cc033
Support to run multiple mplayer commands set in menu.conf
ulion
parents:
25263
diff
changeset
|
80 mp_input_parse_and_queue_cmds(mpriv->p.current->cancel); |
8197 | 81 break; |
82 } | |
83 default: | |
84 menu_list_read_cmd(menu,cmd); | |
85 } | |
86 } | |
87 | |
88 static void free_entry(list_entry_t* entry) { | |
89 if(entry->ok) | |
90 free(entry->ok); | |
91 if(entry->cancel) | |
92 free(entry->cancel); | |
25401 | 93 if(entry->left) |
94 free(entry->left); | |
95 if(entry->right) | |
96 free(entry->right); | |
8197 | 97 free(entry->p.txt); |
98 free(entry); | |
99 } | |
100 | |
18817
a2b064a48775
declaring static functions with the same name than libc ones was not the best idea ever
ben
parents:
18006
diff
changeset
|
101 static void close_menu(menu_t* menu) { |
8197 | 102 menu_list_uninit(menu,free_entry); |
103 } | |
104 | |
105 static int parse_args(menu_t* menu,char* args) { | |
17945
98f4e3704a76
Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents:
16862
diff
changeset
|
106 char *element,*body, **attribs, *name; |
8197 | 107 list_entry_t* m = NULL; |
108 int r; | |
109 ASX_Parser_t* parser = asx_parser_new(); | |
110 | |
111 while(1) { | |
112 r = asx_get_element(parser,&args,&element,&body,&attribs); | |
113 if(r < 0) { | |
17994
6927fabaef92
Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents:
17945
diff
changeset
|
114 mp_msg(MSGT_GLOBAL,MSGL_WARN,MSGTR_LIBMENU_SyntaxErrorAtLine,parser->line); |
8197 | 115 asx_parser_free(parser); |
116 return -1; | |
117 } else if(r == 0) { | |
118 asx_parser_free(parser); | |
119 if(!m) | |
17994
6927fabaef92
Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents:
17945
diff
changeset
|
120 mp_msg(MSGT_GLOBAL,MSGL_WARN,MSGTR_LIBMENU_NoEntryFoundInTheMenuDefinition); |
8197 | 121 return m ? 1 : 0; |
122 } | |
123 // Has it a name ? | |
124 name = asx_get_attrib("name",attribs); | |
125 if(!name) { | |
17994
6927fabaef92
Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents:
17945
diff
changeset
|
126 mp_msg(MSGT_GLOBAL,MSGL_WARN,MSGTR_LIBMENU_ListMenuEntryDefinitionsNeedAName,parser->line); |
8197 | 127 free(element); |
128 if(body) free(body); | |
129 asx_free_attribs(attribs); | |
130 continue; | |
131 } | |
132 m = calloc(1,sizeof(struct list_entry_s)); | |
133 m->p.txt = name; | |
17945
98f4e3704a76
Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents:
16862
diff
changeset
|
134 m->ok = asx_get_attrib("ok",attribs); |
98f4e3704a76
Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents:
16862
diff
changeset
|
135 m->cancel = asx_get_attrib("cancel",attribs); |
98f4e3704a76
Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents:
16862
diff
changeset
|
136 m->left = asx_get_attrib("left",attribs); |
98f4e3704a76
Allow 6 ways (up/down/left/right/ok/cancel) navigation.
albeu
parents:
16862
diff
changeset
|
137 m->right = asx_get_attrib("right",attribs); |
8197 | 138 menu_list_add_entry(menu,m); |
139 | |
140 free(element); | |
141 if(body) free(body); | |
142 asx_free_attribs(attribs); | |
143 } | |
144 } | |
145 | |
23366
b344b6520518
rename some menu open functions, to avoid confusion with libc native open()
ben
parents:
19431
diff
changeset
|
146 static int open_cmdlist(menu_t* menu, char* args) { |
8197 | 147 menu->draw = menu_list_draw; |
148 menu->read_cmd = read_cmd; | |
18817
a2b064a48775
declaring static functions with the same name than libc ones was not the best idea ever
ben
parents:
18006
diff
changeset
|
149 menu->close = close_menu; |
8197 | 150 |
151 if(!args) { | |
18006
ce1a5b200c39
Minor spelling and grammar fixes for part 1 of Otvos Attila's
corey
parents:
17994
diff
changeset
|
152 mp_msg(MSGT_GLOBAL,MSGL_WARN,MSGTR_LIBMENU_ListMenuNeedsAnArgument); |
8197 | 153 return 0; |
154 } | |
155 | |
156 menu_list_init(menu); | |
157 if(!parse_args(menu,args)) | |
158 return 0; | |
159 return 1; | |
160 } | |
161 | |
162 const menu_info_t menu_info_cmdlist = { | |
163 "Command list menu", | |
164 "cmdlist", | |
165 "Albeu", | |
166 "", | |
167 { | |
168 "cmdlist_cfg", | |
169 sizeof(struct menu_priv_s), | |
170 &cfg_dflt, | |
171 cfg_fields | |
172 }, | |
23366
b344b6520518
rename some menu open functions, to avoid confusion with libc native open()
ben
parents:
19431
diff
changeset
|
173 open_cmdlist |
8197 | 174 }; |