14 #include "../config.h"
16 #include "../m_struct.h"
17 #include "../m_option.h"
19 #include "img_format.h"
23 #include "menu_list.h"
24 #include "../input/input.h"
25 #include "../osdep/keycodes.h"
27 #include "../libmpdemux/dvbin.h"
33 int num
; //the position of the chosen channel in the list
44 #define ST_OFF(m) M_ST_OFF(struct menu_priv_s, m)
45 #define mpriv (menu->priv)
47 static m_option_t cfg_fields
[] = {
48 MENU_LIST_PRIV_FIELDS
,
49 { "title", ST_OFF(title
), CONF_TYPE_STRING
, 0, 0, 0, NULL
},
50 { "file", ST_OFF(file
), CONF_TYPE_STRING
, 0, 0, 0, NULL
},
51 { "card", ST_OFF(card
), CONF_TYPE_INT
, 0, 0, 0, NULL
},
52 { NULL
, NULL
, NULL
, 0,0,0,NULL
}
56 static struct menu_priv_s cfg_dflt
= {
58 "Select a channel: %p",
67 static void free_entry(list_entry_t
* entry
)
74 static int fill_menu(menu_t
* menu
)
79 extern dvb_channels_list
*dvb_list_ptr
;
80 dvb_channel_t
*channel
;
84 mpriv
->p
.title
= mpriv
->title
;
86 if(dvb_list_ptr
== NULL
)
88 mp_msg(MSGT_DEMUX
, MSGL_ERR
, "dvb_set_channel: LIST NULL PTR, quit\n");
90 if((elem
= malloc(sizeof(list_entry_t
))) != NULL
)
93 sprintf(name
, "Empty channel list from file %s; \nrun mplayer dvb:// to load the list", mpriv
->file
);
97 menu_list_add_entry(menu
, elem
);
102 n
= dvb_list_ptr
->NUM_CHANNELS
;
103 for(n
= 0; n
< dvb_list_ptr
->NUM_CHANNELS
; n
++)
105 channel
= &(dvb_list_ptr
->channels
[n
]);
106 if((elem
= malloc(sizeof(list_entry_t
))) != NULL
)
109 strncpy(name
, channel
->name
, 79);
118 menu_list_add_entry(menu
, elem
);
122 mp_msg(MSGT_DEMUX
, MSGL_ERR
, "dvb_menu: fill_menu: couldn't malloc %d bytes for menu item: %s, exit\n",
123 sizeof(list_entry_t
), strerror(errno
));
137 static void read_cmd(menu_t
* menu
, int cmd
)
146 p
= mpriv
->p
.current
;
147 mp_msg(MSGT_DEMUX
, MSGL_V
, "CHOSEN DVB CHANNEL %d\n\n", p
->num
);
149 cmd_name
= malloc(30);
150 sprintf(cmd_name
, "dvb_set_channel %d", p
->num
);
151 c
= mp_input_parse_cmd(cmd_name
);
153 mp_input_queue_cmd(c
);
158 menu_list_read_cmd(menu
, cmd
);
163 static void close_menu(menu_t
* menu
)
165 menu_list_uninit(menu
, free_entry
);
170 static int open_dvb_sel(menu_t
* menu
, char* args
)
172 menu
->draw
= menu_list_draw
;
173 menu
->read_cmd
= read_cmd
;
174 //menu->read_key = read_key;
175 menu
->close
= close_menu
;
177 return fill_menu(menu
);
180 const menu_info_t menu_info_dvbsel
=
182 "DVB channels menu", //descr
186 { //m_struct_t priv_st=
188 sizeof(dvb_channels_list
), //size
189 &cfg_dflt
, //defaults
190 cfg_fields
//settable fields
192 open_dvb_sel
//open function