annotate libmenu/menu_param.c @ 22697:2fe9bd97a7f6

Fix configure -march detection for athlon-xp The configure script uses SSE support to distinguish between athlon and athlon-xp, but SSE support was tested _after_ deciding the basic CPU type. Thus athlon-xp was always misdetected as athlon. Fix this by moving the CPU extensions check before the CPU type check. Patch from Andrew Savchenko, bircoph list ru.
author uau
date Sun, 18 Mar 2007 13:38:55 +0000
parents 83366c8e1928
children a5e55cb59bbc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
1
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
2 #include "config.h"
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
3
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
4 #include <stdlib.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
5 #include <stdio.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
6 #include <dirent.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
7 #include <errno.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
8 #include <string.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
9 #include <sys/types.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
10 #include <sys/stat.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
11 #include <ctype.h>
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
12
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
13 #include "mp_msg.h"
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
14 #include "help_mp.h"
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
15
16862
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 10864
diff changeset
16 #include "m_struct.h"
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 10864
diff changeset
17 #include "m_option.h"
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
18 #include "m_property.h"
16862
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 10864
diff changeset
19 #include "asxparser.h"
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
20
19431
ac69ba536915 Explicitly include libmpcodecs/img_format.h and libvo/fastmemcpy.h.
diego
parents: 19059
diff changeset
21 #include "libmpcodecs/img_format.h"
ac69ba536915 Explicitly include libmpcodecs/img_format.h and libvo/fastmemcpy.h.
diego
parents: 19059
diff changeset
22 #include "libmpcodecs/mp_image.h"
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
23
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
24 #include "menu.h"
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
25 #include "menu_list.h"
16862
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 10864
diff changeset
26 #include "input/input.h"
931bdbc37ee0 Unify include paths, -I.. is in CFLAGS.
diego
parents: 10864
diff changeset
27 #include "osdep/keycodes.h"
19532
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
28 #include "metadata.h"
19529
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
29
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
30 struct list_entry_s {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
31 struct list_entry p;
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
32 char* name;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
33 m_option_t* opt;
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
34 char* menu;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
35 };
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
36
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
37 struct menu_priv_s {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
38 menu_list_priv_t p;
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
39 char* ptr;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
40 int edit;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
41 /// Cfg fields
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
42 char* na;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
43 int hide_na;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
44 };
19532
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
45
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
46 static struct menu_priv_s cfg_dflt = {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
47 MENU_LIST_PRIV_DFLT,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
48 NULL,
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
49 0,
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
50 "N/A",
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
51 1
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
52 };
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
53
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
54 static m_option_t cfg_fields[] = {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
55 MENU_LIST_PRIV_FIELDS,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
56 { "title", M_ST_OFF(menu_list_priv_t,title), CONF_TYPE_STRING, 0, 0, 0, NULL },
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
57 { "na", M_ST_OFF(struct menu_priv_s,na), CONF_TYPE_STRING, 0, 0, 0, NULL },
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
58 { "hide-na", M_ST_OFF(struct menu_priv_s,hide_na), CONF_TYPE_FLAG, CONF_RANGE, 0, 1, NULL },
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
59 { NULL, NULL, NULL, 0,0,0,NULL }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
60 };
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
61
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
62 #define mpriv (menu->priv)
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
63
19529
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
64 #define OPT_NAME "name"
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
65 #define OPT_VCODEC "vcodec"
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
66 #define OPT_VBITRATE "vbitrate"
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
67 #define OPT_RESOLUTION "resolution"
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
68 #define OPT_ACODEC "acodec"
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
69 #define OPT_ABITRATE "abitrate"
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
70 #define OPT_SAMPLES "asamples"
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
71 #define OPT_INFO_TITLE "title"
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
72 #define OPT_INFO_ARTIST "artist"
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
73 #define OPT_INFO_ALBUM "album"
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
74 #define OPT_INFO_YEAR "year"
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
75 #define OPT_INFO_COMMENT "comment"
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
76 #define OPT_INFO_TRACK "track"
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
77 #define OPT_INFO_GENRE "genre"
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
78
19059
231c0e700597 Compilation fix: Mark mp_property_find parameter as const.
diego
parents: 18006
diff changeset
79 m_option_t* mp_property_find(const char* name);
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
80
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
81 static void entry_set_text(menu_t* menu, list_entry_t* e) {
22284
83366c8e1928 Fix menu to work with mpctx
uau
parents: 19532
diff changeset
82 char* val = m_property_print(e->opt, menu->ctx);
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
83 int l,edit = (mpriv->edit && e == mpriv->p.current);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
84 if(!val) {
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
85 if(mpriv->hide_na) {
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
86 e->p.hide = 1;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
87 return;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
88 }
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
89 val = strdup(mpriv->na);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
90 } else if(mpriv->hide_na)
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
91 e->p.hide = 0;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
92 l = strlen(e->name) + 2 + strlen(val) + (edit ? 4 : 0) + 1;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
93 if(e->p.txt) free(e->p.txt);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
94 e->p.txt = malloc(l);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
95 sprintf(e->p.txt,"%s: %s%s%s",e->name,edit ? "> " : "",val,edit ? " <" : "");
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
96 free(val);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
97 }
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
98
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
99 static void update_entries(menu_t* menu) {
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
100 list_entry_t* e;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
101 for(e = mpriv->p.menu ; e ; e = e->p.next)
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
102 if(e->opt) entry_set_text(menu,e);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
103 }
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
104
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
105 static int parse_args(menu_t* menu,char* args) {
19529
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
106 char *element,*body, **attribs, *name, *meta, *val;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
107 list_entry_t* m = NULL;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
108 int r;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
109 m_option_t* opt;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
110 ASX_Parser_t* parser = asx_parser_new();
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
111
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
112
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
113 while(1) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
114 r = asx_get_element(parser,&args,&element,&body,&attribs);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
115 if(r < 0) {
17994
6927fabaef92 Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents: 17949
diff changeset
116 mp_msg(MSGT_OSD_MENU,MSGL_ERR,MSGTR_LIBMENU_SyntaxErrorAtLine,parser->line);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
117 asx_parser_free(parser);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
118 return -1;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
119 } else if(r == 0) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
120 asx_parser_free(parser);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
121 if(!m)
17994
6927fabaef92 Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents: 17949
diff changeset
122 mp_msg(MSGT_OSD_MENU,MSGL_WARN,MSGTR_LIBMENU_NoEntryFoundInTheMenuDefinition);
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
123 m = calloc(1,sizeof(struct list_entry_s));
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
124 m->p.txt = strdup("Back");
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
125 menu_list_add_entry(menu,m);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
126 return 1;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
127 }
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
128 if(!strcmp(element,"menu")) {
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
129 name = asx_get_attrib("menu",attribs);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
130 if(!name) {
17994
6927fabaef92 Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents: 17949
diff changeset
131 mp_msg(MSGT_OSD_MENU,MSGL_WARN,MSGTR_LIBMENU_SubmenuDefinitionNeedAMenuAttribut);
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
132 goto next_element;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
133 }
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
134 m = calloc(1,sizeof(struct list_entry_s));
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
135 m->menu = name;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
136 name = NULL; // we want to keep it
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
137 m->p.txt = asx_get_attrib("name",attribs);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
138 if(!m->p.txt) m->p.txt = strdup(m->menu);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
139 menu_list_add_entry(menu,m);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
140 goto next_element;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
141 }
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
142
19529
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
143 meta = asx_get_attrib("meta",attribs);
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
144 val = NULL;
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
145 if(meta) {
19532
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
146 if (!strcmp (meta, OPT_NAME))
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
147 val = get_metadata (META_NAME);
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
148 else if (!strcmp (meta, OPT_VCODEC))
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
149 val = get_metadata (META_VIDEO_CODEC);
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
150 else if (!strcmp(meta, OPT_VBITRATE))
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
151 val = get_metadata (META_VIDEO_BITRATE);
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
152 else if(!strcmp(meta, OPT_RESOLUTION))
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
153 val = get_metadata (META_VIDEO_RESOLUTION);
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
154 else if (!strcmp(meta, OPT_ACODEC))
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
155 val = get_metadata (META_AUDIO_CODEC);
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
156 else if(!strcmp(meta, OPT_ABITRATE))
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
157 val = get_metadata (META_AUDIO_BITRATE);
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
158 else if(!strcmp(meta, OPT_SAMPLES))
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
159 val = get_metadata (META_AUDIO_SAMPLES);
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
160 else if (!strcmp (meta, OPT_INFO_TITLE))
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
161 val = get_metadata (META_INFO_TITLE);
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
162 else if (!strcmp (meta, OPT_INFO_ARTIST))
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
163 val = get_metadata (META_INFO_ARTIST);
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
164 else if (!strcmp (meta, OPT_INFO_ALBUM))
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
165 val = get_metadata (META_INFO_ALBUM);
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
166 else if (!strcmp (meta, OPT_INFO_YEAR))
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
167 val = get_metadata (META_INFO_YEAR);
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
168 else if (!strcmp (meta, OPT_INFO_COMMENT))
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
169 val = get_metadata (META_INFO_COMMENT);
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
170 else if (!strcmp (meta, OPT_INFO_TRACK))
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
171 val = get_metadata (META_INFO_TRACK);
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
172 else if (!strcmp (meta, OPT_INFO_GENRE))
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
173 val = get_metadata (META_INFO_GENRE);
19529
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
174 if (val) {
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
175 char *item = asx_get_attrib("name",attribs);
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
176 int l;
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
177
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
178 if (!item)
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
179 item = strdup (meta);
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
180 l = strlen(item) + 2 + strlen(val) + 1;
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
181 m = calloc(1,sizeof(struct list_entry_s));
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
182 m->p.txt = malloc(l);
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
183 sprintf(m->p.txt,"%s: %s",item,val);
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
184 free(val);
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
185 free(item);
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
186 menu_list_add_entry(menu,m);
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
187 }
19532
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
188 free (meta);
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
189 if (element)
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
190 free(element);
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
191 if(body)
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
192 free(body);
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
193 asx_free_attribs(attribs);
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
194 continue;
13599373bb02 added new helpers to allow easy metadata retrieval and make libmenu use them
ben
parents: 19529
diff changeset
195 }
19529
9a59c33bee29 new option for libmenu that allow display of properties and metadata of currently played stream
ben
parents: 19431
diff changeset
196
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
197 name = asx_get_attrib("property",attribs);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
198 opt = name ? mp_property_find(name) : NULL;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
199 if(!opt) {
17994
6927fabaef92 Part1 of several printf2mp_msg changes in patch from Otvos Attila oattila AT chello DOT hu
reynaldo
parents: 17949
diff changeset
200 mp_msg(MSGT_OSD_MENU,MSGL_WARN,MSGTR_LIBMENU_PrefMenuEntryDefinitionsNeed,parser->line);
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
201 goto next_element;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
202 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
203 m = calloc(1,sizeof(struct list_entry_s));
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
204 m->opt = opt;
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
205 m->name = asx_get_attrib("name",attribs);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
206 if(!m->name) m->name = strdup(opt->name);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
207 entry_set_text(menu,m);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
208 menu_list_add_entry(menu,m);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
209
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
210 next_element:
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
211 free(element);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
212 if(body) free(body);
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
213 if(name) free(name);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
214 asx_free_attribs(attribs);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
215 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
216 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
217
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
218 static void read_key(menu_t* menu,int c) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
219 menu_list_read_key(menu,c,0);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
220 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
221
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
222 static void read_cmd(menu_t* menu,int cmd) {
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
223 list_entry_t* e = mpriv->p.current;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
224
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
225 if(e->opt) {
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
226 switch(cmd) {
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
227 case MENU_CMD_UP:
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
228 if(!mpriv->edit) break;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
229 case MENU_CMD_RIGHT:
22284
83366c8e1928 Fix menu to work with mpctx
uau
parents: 19532
diff changeset
230 if(m_property_do(e->opt,M_PROPERTY_STEP_UP,NULL,menu->ctx) > 0)
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
231 update_entries(menu);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
232 return;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
233 case MENU_CMD_DOWN:
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
234 if(!mpriv->edit) break;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
235 case MENU_CMD_LEFT:
22284
83366c8e1928 Fix menu to work with mpctx
uau
parents: 19532
diff changeset
236 if(m_property_do(e->opt,M_PROPERTY_STEP_DOWN,NULL,menu->ctx) > 0)
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
237 update_entries(menu);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
238 return;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
239
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
240 case MENU_CMD_OK:
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
241 // check that the property is writable
22284
83366c8e1928 Fix menu to work with mpctx
uau
parents: 19532
diff changeset
242 if(m_property_do(e->opt,M_PROPERTY_SET,NULL,menu->ctx) < 0) return;
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
243 // shortcut for flags
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
244 if(e->opt->type == CONF_TYPE_FLAG) {
22284
83366c8e1928 Fix menu to work with mpctx
uau
parents: 19532
diff changeset
245 if(m_property_do(e->opt,M_PROPERTY_STEP_UP,NULL,menu->ctx) > 0)
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
246 update_entries(menu);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
247 return;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
248 }
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
249 // switch
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
250 mpriv->edit = !mpriv->edit;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
251 // update the menu
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
252 update_entries(menu);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
253 // switch the pointer
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
254 if(mpriv->edit) {
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
255 mpriv->ptr = mpriv->p.ptr;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
256 mpriv->p.ptr = NULL;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
257 } else
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
258 mpriv->p.ptr = mpriv->ptr;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
259 return;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
260 case MENU_CMD_CANCEL:
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
261 if(!mpriv->edit) break;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
262 mpriv->edit = 0;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
263 update_entries(menu);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
264 mpriv->p.ptr = mpriv->ptr;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
265 return;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
266 }
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
267 } else if(e->menu) {
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
268 switch(cmd) {
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
269 case MENU_CMD_RIGHT:
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
270 case MENU_CMD_OK: {
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
271 mp_cmd_t* c;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
272 char* txt = malloc(10 + strlen(e->menu) + 1);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
273 sprintf(txt,"set_menu %s",e->menu);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
274 c = mp_input_parse_cmd(txt);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
275 if(c) mp_input_queue_cmd(c);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
276 return;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
277 }
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
278 }
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
279 } else {
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
280 switch(cmd) {
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
281 case MENU_CMD_RIGHT:
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
282 case MENU_CMD_OK:
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
283 menu->show = 0;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
284 menu->cl = 1;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
285 return;
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
286 }
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
287 }
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
288 menu_list_read_cmd(menu,cmd);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
289 }
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
290
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
291 static void free_entry(list_entry_t* entry) {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
292 free(entry->p.txt);
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
293 if(entry->name) free(entry->name);
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
294 if(entry->menu) free(entry->menu);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
295 free(entry);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
296 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
297
10864
a2537e7d2d76 make menu work on mingw (run command is still disabled), based on patch by Christophe Perinaud
faust3
parents: 9380
diff changeset
298 static void closeMenu(menu_t* menu) {
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
299 menu_list_uninit(menu,free_entry);
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
300 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
301
10864
a2537e7d2d76 make menu work on mingw (run command is still disabled), based on patch by Christophe Perinaud
faust3
parents: 9380
diff changeset
302 static int openMenu(menu_t* menu, char* args) {
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
303
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
304 menu->draw = menu_list_draw;
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
305 menu->read_cmd = read_cmd;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
306 menu->read_key = read_key;
10864
a2537e7d2d76 make menu work on mingw (run command is still disabled), based on patch by Christophe Perinaud
faust3
parents: 9380
diff changeset
307 menu->close = closeMenu;
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
308
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
309
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
310 if(!args) {
18006
ce1a5b200c39 Minor spelling and grammar fixes for part 1 of Otvos Attila's
corey
parents: 17994
diff changeset
311 mp_msg(MSGT_OSD_MENU,MSGL_ERR,MSGTR_LIBMENU_PrefMenuNeedsAnArgument);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
312 return 0;
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
313 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
314
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
315 menu_list_init(menu);
17949
a6b11b35892a Turn the preferences menu in something usefull using the new
albeu
parents: 16862
diff changeset
316 return parse_args(menu,args);
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
317 }
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
318
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
319 const menu_info_t menu_info_pref = {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
320 "Preferences menu",
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
321 "pref",
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
322 "Albeu",
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
323 "",
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
324 {
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
325 "pref_cfg",
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
326 sizeof(struct menu_priv_s),
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
327 &cfg_dflt,
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
328 cfg_fields
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
329 },
10864
a2537e7d2d76 make menu work on mingw (run command is still disabled), based on patch by Christophe Perinaud
faust3
parents: 9380
diff changeset
330 openMenu
8197
b31caec933e9 OSD menus initial version
albeu
parents:
diff changeset
331 };