00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef VLC_EVENTS_H
00026 # define VLC_EVENTS_H
00027
00028 #include <vlc_arrays.h>
00029 #include <vlc_meta.h>
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100 struct vlc_event_listeners_group_t;
00101
00102
00103 typedef struct vlc_event_manager_t
00104 {
00105 void * p_obj;
00106 vlc_mutex_t object_lock;
00107 vlc_mutex_t event_sending_lock;
00108 vlc_object_t *p_parent_object;
00109 DECL_ARRAY(struct vlc_event_listeners_group_t *) listeners_groups;
00110 } vlc_event_manager_t;
00111
00112
00113
00114 typedef enum vlc_event_type_t {
00115
00116 vlc_InputStateChanged,
00117 vlc_InputSelectedStreamChanged,
00118
00119
00120 vlc_InputItemMetaChanged,
00121 vlc_InputItemSubItemAdded,
00122 vlc_InputItemSubItemTreeAdded,
00123 vlc_InputItemDurationChanged,
00124 vlc_InputItemPreparsedChanged,
00125 vlc_InputItemNameChanged,
00126 vlc_InputItemInfoChanged,
00127 vlc_InputItemErrorWhenReadingChanged,
00128
00129
00130 vlc_ServicesDiscoveryItemAdded,
00131 vlc_ServicesDiscoveryItemRemoved,
00132 vlc_ServicesDiscoveryStarted,
00133 vlc_ServicesDiscoveryEnded
00134 } vlc_event_type_t;
00135
00136
00137 typedef struct vlc_event_t
00138 {
00139 vlc_event_type_t type;
00140 void * p_obj;
00141 union vlc_event_type_specific
00142 {
00143
00144 struct vlc_input_state_changed
00145 {
00146 int new_state;
00147 } input_state_changed;
00148 struct vlc_input_selected_stream_changed
00149 {
00150 void * unused;
00151 } input_selected_stream_changed;
00152
00153
00154 struct vlc_input_item_meta_changed
00155 {
00156 vlc_meta_type_t meta_type;
00157 } input_item_meta_changed;
00158 struct vlc_input_item_subitem_added
00159 {
00160 input_item_t * p_new_child;
00161 } input_item_subitem_added;
00162 struct vlc_input_item_subitem_tree_added
00163 {
00164 input_item_node_t * p_root;
00165 } input_item_subitem_tree_added;
00166 struct vlc_input_item_duration_changed
00167 {
00168 mtime_t new_duration;
00169 } input_item_duration_changed;
00170 struct vlc_input_item_preparsed_changed
00171 {
00172 int new_status;
00173 } input_item_preparsed_changed;
00174 struct vlc_input_item_name_changed
00175 {
00176 const char * new_name;
00177 } input_item_name_changed;
00178 struct vlc_input_item_info_changed
00179 {
00180 void * unused;
00181 } input_item_info_changed;
00182 struct input_item_error_when_reading_changed
00183 {
00184 bool new_value;
00185 } input_item_error_when_reading_changed;
00186
00187
00188 struct vlc_services_discovery_item_added
00189 {
00190 input_item_t * p_new_item;
00191 const char * psz_category;
00192 } services_discovery_item_added;
00193 struct vlc_services_discovery_item_removed
00194 {
00195 input_item_t * p_item;
00196 } services_discovery_item_removed;
00197 struct vlc_services_discovery_started
00198 {
00199 void * unused;
00200 } services_discovery_started;
00201 struct vlc_services_discovery_ended
00202 {
00203 void * unused;
00204 } services_discovery_ended;
00205
00206 } u;
00207 } vlc_event_t;
00208
00209
00210 typedef void ( *vlc_event_callback_t )( const vlc_event_t *, void * );
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221 #define vlc_event_manager_init_with_vlc_object(a,b) \
00222 vlc_event_manager_init( a, b, b )
00223
00224 VLC_EXPORT(int, vlc_event_manager_init, ( vlc_event_manager_t * p_em,
00225 void * p_obj, vlc_object_t * ));
00226 #define vlc_event_manager_init(a,b,c) \
00227 vlc_event_manager_init(a, b, VLC_OBJECT(c))
00228
00229
00230
00231
00232 VLC_EXPORT(void, vlc_event_manager_fini, ( vlc_event_manager_t * p_em ));
00233
00234
00235
00236
00237 VLC_EXPORT(int, vlc_event_manager_register_event_type,
00238 ( vlc_event_manager_t * p_em, vlc_event_type_t event_type ));
00239
00240
00241
00242
00243 VLC_EXPORT(void, vlc_event_send, ( vlc_event_manager_t * p_em,
00244 vlc_event_t * p_event ));
00245
00246
00247
00248
00249 VLC_EXPORT(int, vlc_event_attach, ( vlc_event_manager_t * p_event_manager,
00250 vlc_event_type_t event_type,
00251 vlc_event_callback_t pf_callback,
00252 void *p_user_data,
00253 const char * psz_debug_name ));
00254 #define vlc_event_attach(a, b, c, d) vlc_event_attach(a, b, c, d, #c)
00255
00256
00257
00258
00259 VLC_EXPORT(int, vlc_event_detach, ( vlc_event_manager_t *p_event_manager,
00260 vlc_event_type_t event_type,
00261 vlc_event_callback_t pf_callback,
00262 void *p_user_data ));
00263
00264 #endif