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