00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef VLC_EXTENSIONS_H
00025 #define VLC_EXTENSIONS_H
00026
00027 #include "vlc_common.h"
00028 #include "vlc_arrays.h"
00029
00030
00031 typedef struct extensions_manager_sys_t extensions_manager_sys_t;
00032 typedef struct extensions_manager_t extensions_manager_t;
00033 typedef struct extension_sys_t extension_sys_t;
00034
00035
00036 typedef struct extension_t {
00037
00038 char *psz_name;
00039
00040 char *psz_title;
00041 char *psz_author;
00042 char *psz_version;
00043 char *psz_url;
00044 char *psz_description;
00045 char *psz_shortdescription;
00046 char *p_icondata;
00047 int i_icondata_size;
00048
00049 extension_sys_t *p_sys;
00050 } extension_t;
00051
00052
00053 struct extensions_manager_t
00054 {
00055 VLC_COMMON_MEMBERS
00056
00057 module_t *p_module;
00058 extensions_manager_sys_t *p_sys;
00059
00060 DECL_ARRAY(extension_t*) extensions;
00061 vlc_mutex_t lock;
00062
00063
00064 int ( *pf_control ) ( extensions_manager_t*, int, va_list );
00065 };
00066
00067
00068 enum
00069 {
00070
00071 EXTENSION_ACTIVATE,
00072 EXTENSION_DEACTIVATE,
00073 EXTENSION_IS_ACTIVATED,
00074 EXTENSION_HAS_MENU,
00075 EXTENSION_GET_MENU,
00076 EXTENSION_TRIGGER_ONLY,
00077 EXTENSION_TRIGGER,
00078 EXTENSION_TRIGGER_MENU,
00079 EXTENSION_SET_INPUT,
00080 EXTENSION_PLAYING_CHANGED,
00081 EXTENSION_META_CHANGED,
00082 };
00083
00084
00085
00086
00087
00088 static inline int extension_Control( extensions_manager_t *p_mgr,
00089 int i_control, ... )
00090 {
00091 va_list args;
00092 va_start( args, i_control );
00093 int i_ret = p_mgr->pf_control( p_mgr, i_control, args );
00094 va_end( args );
00095 return i_ret;
00096 }
00097
00098
00099
00100
00101
00102 static inline bool __extension_GetBool( extensions_manager_t *p_mgr,
00103 extension_t *p_ext,
00104 int i_flag,
00105 bool b_default )
00106 {
00107 bool b = b_default;
00108 int i_ret = extension_Control( p_mgr, i_flag, p_ext, &b );
00109 if( i_ret != VLC_SUCCESS )
00110 return b_default;
00111 else
00112 return b;
00113 }
00114
00115
00116 #define extension_Activate( mgr, ext ) \
00117 extension_Control( mgr, EXTENSION_ACTIVATE, ext )
00118
00119
00120 #define extension_Trigger( mgr, ext ) \
00121 extension_Control( mgr, EXTENSION_TRIGGER, ext )
00122
00123
00124 #define extension_Deactivate( mgr, ext ) \
00125 extension_Control( mgr, EXTENSION_DEACTIVATE, ext )
00126
00127
00128 #define extension_IsActivated( mgr, ext ) \
00129 __extension_GetBool( mgr, ext, EXTENSION_IS_ACTIVATED, false )
00130
00131
00132 #define extension_HasMenu( mgr, ext ) \
00133 __extension_GetBool( mgr, ext, EXTENSION_HAS_MENU, false )
00134
00135
00136 static inline int extension_GetMenu( extensions_manager_t *p_mgr,
00137 extension_t *p_ext,
00138 char ***pppsz,
00139 uint16_t **ppi )
00140 {
00141 return extension_Control( p_mgr, EXTENSION_GET_MENU, p_ext, pppsz, ppi );
00142 }
00143
00144
00145 static inline int extension_TriggerMenu( extensions_manager_t *p_mgr,
00146 extension_t *p_ext,
00147 uint16_t i )
00148 {
00149 return extension_Control( p_mgr, EXTENSION_TRIGGER_MENU, p_ext, i );
00150 }
00151
00152
00153 static inline int extension_SetInput( extensions_manager_t *p_mgr,
00154 extension_t *p_ext,
00155 struct input_thread_t *p_input )
00156 {
00157 return extension_Control( p_mgr, EXTENSION_SET_INPUT, p_ext, p_input );
00158 }
00159
00160 static inline int extension_PlayingChanged( extensions_manager_t *p_mgr,
00161 extension_t *p_ext,
00162 int state )
00163 {
00164 return extension_Control( p_mgr, EXTENSION_PLAYING_CHANGED, p_ext, state );
00165 }
00166
00167 static inline int extension_MetaChanged( extensions_manager_t *p_mgr,
00168 extension_t *p_ext )
00169 {
00170 return extension_Control( p_mgr, EXTENSION_META_CHANGED, p_ext );
00171 }
00172
00173
00174
00175 #define extension_TriggerOnly( mgr, ext ) \
00176 __extension_GetBool( mgr, ext, EXTENSION_TRIGGER_ONLY, false )
00177
00178
00179
00180
00181
00182
00183 typedef struct extension_dialog_t extension_dialog_t;
00184 typedef struct extension_widget_t extension_widget_t;
00185
00186
00187 typedef enum
00188 {
00189 EXTENSION_EVENT_CLICK,
00190 EXTENSION_EVENT_CLOSE,
00191
00192
00193 } extension_dialog_event_e;
00194
00195
00196 typedef struct
00197 {
00198 extension_dialog_t *p_dlg;
00199 extension_dialog_event_e event;
00200 void *p_data;
00201 } extension_dialog_command_t;
00202
00203
00204
00205 struct extension_dialog_t
00206 {
00207 vlc_object_t *p_object;
00208
00209 char *psz_title;
00210 int i_width;
00211 int i_height;
00212
00213 DECL_ARRAY(extension_widget_t*) widgets;
00214
00215 bool b_hide;
00216 bool b_kill;
00217
00218 void *p_sys;
00219 void *p_sys_intf;
00220 vlc_mutex_t lock;
00221 vlc_cond_t cond;
00222 };
00223
00224
00225
00226
00227
00228
00229
00230 static inline int extension_DialogCommand( extension_dialog_t* p_dialog,
00231 extension_dialog_event_e event,
00232 void *data )
00233 {
00234 extension_dialog_command_t command;
00235 command.p_dlg = p_dialog;
00236 command.event = event;
00237 command.p_data = data;
00238 var_SetAddress( p_dialog->p_object, "dialog-event", &command );
00239 return VLC_SUCCESS;
00240 }
00241
00242
00243
00244
00245 #define extension_DialogClosed( dlg ) \
00246 extension_DialogCommand( dlg, EXTENSION_EVENT_CLOSE, NULL )
00247
00248
00249
00250
00251
00252 #define extension_WidgetClicked( dlg, wdg ) \
00253 extension_DialogCommand( dlg, EXTENSION_EVENT_CLICK, wdg )
00254
00255
00256 typedef enum
00257 {
00258 EXTENSION_WIDGET_LABEL,
00259 EXTENSION_WIDGET_BUTTON,
00260 EXTENSION_WIDGET_IMAGE,
00261 EXTENSION_WIDGET_HTML,
00262 EXTENSION_WIDGET_TEXT_FIELD,
00263 EXTENSION_WIDGET_PASSWORD,
00264 EXTENSION_WIDGET_DROPDOWN,
00265 EXTENSION_WIDGET_LIST,
00266 EXTENSION_WIDGET_CHECK_BOX,
00267 EXTENSION_WIDGET_SPIN_ICON,
00268 } extension_widget_type_e;
00269
00270
00271 struct extension_widget_t
00272 {
00273
00274 extension_widget_type_e type;
00275 char *psz_text;
00276
00277
00278 struct extension_widget_value_t {
00279 int i_id;
00280
00281 char *psz_text;
00282 bool b_selected;
00283 struct extension_widget_value_t *p_next;
00284 } *p_values;
00285
00286
00287 bool b_checked;
00288
00289
00290 int i_row;
00291 int i_column;
00292 int i_horiz_span;
00293 int i_vert_span;
00294 int i_width;
00295 int i_height;
00296 bool b_hide;
00297
00298
00299 int i_spin_loops;
00300
00301
00302
00303 bool b_kill;
00304 bool b_update;
00305
00306
00307 void *p_sys;
00308 void *p_sys_intf;
00309
00310
00311 extension_dialog_t *p_dialog;
00312 };
00313
00314 VLC_API int dialog_ExtensionUpdate(vlc_object_t*, extension_dialog_t *);
00315 #define dialog_ExtensionUpdate(o, d) dialog_ExtensionUpdate(VLC_OBJECT(o), d)
00316
00317 #endif
00318