Commit 1f319885 authored by Clément Stenac's avatar Clément Stenac

Interaction facility (Refs:#27)

parent 0ec68fc6
......@@ -58,10 +58,36 @@ struct interaction_dialog_t
vlc_bool_t b_have_answer; //< Has an answer been given ?
vlc_bool_t b_reusable; //< Do we have to reuse this ?
vlc_bool_t b_updated; //< Update for this one ?
vlc_bool_t b_finished; //< Hidden by interface
void * p_private; //< Private interface data
};
/**
* Possible interaction types
*/
enum
{
INTERACT_PROGRESS, //< Progress bar
INTERACT_WARNING, //< Warning message ("codec not supported")
INTERACT_FATAL, //< Fatal message ("File not found")
INTERACT_FATAL_LIST, //< List of fatal messages ("File not found")
INTERACT_ASK, //< Full-featured dialog box (password)
};
/**
* Predefined reusable dialogs
*/
enum
{
DIALOG_NOACCESS,
DIALOG_NOCODEC,
DIALOG_NOAUDIO,
DIALOG_LAST_PREDEFINED,
};
/**
* This structure contains the active interaction dialogs, and is
* used by teh manager
......@@ -72,25 +98,30 @@ struct interaction_t
int i_dialogs; //< Number of dialogs
interaction_dialog_t **pp_dialogs; //< Dialogs
};
intf_thread_t *p_intf; //< Interface to use
int i_last_id; //< Last attributed ID
};
/**
* Possible interaction types
* Possible actions
*/
enum
{
INTERACT_PROGRESS, //< Progress bar
INTERACT_WARNING, //< Warning message ("codec not supported")
INTERACT_FATAL, //< Fatal message ("File not found")
INTERACT_ASK, //< Full-featured dialog box (password)
INTERACT_NEW,
INTERACT_UPDATE,
INTERACT_HIDE
};
/***************************************************************************
* Exported symbols
***************************************************************************/
#define intf_Interact( a,b ) __intf_Interact( VLC_OBJECT(a), b )
VLC_EXPORT( int,__intf_Interact,( vlc_object_t *,interaction_dialog_t * ) );
#if 0
VLC_NO_EXPORT_YET( int,__intf_InteractionManage,( playlist_t *) );
#endif
VLC_EXPORT( void, intf_UserFatal,( vlc_object_t*, const char*, const char*, ...));
#define intf_UserFatal( a,b, c, d, e... ) __intf_UserFatal( a,b,c,d, ## e )
VLC_EXPORT( void, __intf_UserFatal,( vlc_object_t*, int, const char*, const char*, ...) );
VLC_EXPORT( void, intf_InteractionManage,( playlist_t *) );
VLC_EXPORT( void, intf_InteractionDestroy,( interaction_t *) );
......@@ -66,8 +66,7 @@ struct intf_thread_t
intf_dialog_args_t * );
/** Interaction stuff */
int i_last_id;
int ( *pf_interact ) ( intf_thread_t *, interaction_dialog_t *, vlc_bool_t );
int ( *pf_interact ) ( intf_thread_t *, interaction_dialog_t *, int );
/** Video window callbacks */
void * ( *pf_request_window ) ( intf_thread_t *, vout_thread_t *,
......
......@@ -216,7 +216,6 @@ struct playlist_t
// The following members are about user interaction
// The playlist manages the user interaction to avoid creating another
// thread
vlc_bool_t b_manage_interaction;
interaction_t *p_interaction;
/*@}*/
......
......@@ -121,6 +121,7 @@ char* httpd_ClientIP (httpd_client_t *cl, char *psz_ip);
void httpd_FileDelete (httpd_file_t *);
module_t * __module_Need (vlc_object_t *, const char *, const char *, vlc_bool_t);
const char * VLC_Changeset (void);
void intf_InteractionDestroy (interaction_t *);
void LocaleFree (const char *);
void __vlc_object_attach (vlc_object_t *, vlc_object_t *);
stream_t * __stream_UrlNew (vlc_object_t *p_this, const char *psz_url);
......@@ -296,6 +297,7 @@ subpicture_t * spu_CreateSubpicture (spu_t *);
void httpd_MsgAdd (httpd_message_t *, char *psz_name, char *psz_value, ...);
int vout_vaControlDefault (vout_thread_t *, int, va_list);
int playlist_NodeEmpty (playlist_t *, playlist_item_t *, vlc_bool_t);
void __intf_UserFatal (vlc_object_t*, int, const char*, const char*, ...);
spu_t * __spu_Create (vlc_object_t *);
int playlist_NodeRemoveItem (playlist_t *,playlist_item_t*,playlist_item_t *);
int __net_Accept (vlc_object_t *, int *, mtime_t);
......@@ -325,6 +327,7 @@ int playlist_PreparseEnqueue (playlist_t *, input_item_t *);
aout_buffer_t * aout_FifoPop (aout_instance_t * p_aout, aout_fifo_t * p_fifo);
int __vout_InitPicture (vlc_object_t *p_this, picture_t *p_pic, uint32_t i_chroma, int i_width, int i_height, int i_aspect);
int playlist_LockClear (playlist_t *);
void intf_InteractionManage (playlist_t *);
char * mstrtime (char *psz_buffer, mtime_t date);
void aout_FormatPrepare (audio_sample_format_t * p_format);
void spu_DisplaySubpicture (spu_t *, subpicture_t *);
......@@ -395,7 +398,6 @@ stream_t * __stream_MemoryNew (vlc_object_t *p_obj, uint8_t *p_buffer, int64_t i
void mwait (mtime_t date);
void __config_ResetAll (vlc_object_t *);
httpd_redirect_t * httpd_RedirectNew (httpd_host_t *, const char *psz_url_dst, const char *psz_url_src);
void intf_UserFatal (vlc_object_t*, const char*, const char*, ...);
playlist_item_t * playlist_LockItemGetById (playlist_t *, int);
mtime_t date_Get (const date_t *);
int aout_DecPlay (aout_instance_t *, aout_input_t *, aout_buffer_t *);
......@@ -854,7 +856,9 @@ struct module_symbols_t
void (*__input_Read_inner) (vlc_object_t *, input_item_t *, vlc_bool_t);
int (*__net_ConnectUDP_inner) (vlc_object_t *p_this, const char *psz_host, int i_port, int hlim);
int (*__intf_Interact_inner) (vlc_object_t *,interaction_dialog_t *);
void (*intf_UserFatal_inner) (vlc_object_t*, const char*, const char*, ...);
void (*intf_InteractionManage_inner) (playlist_t *);
void (*intf_InteractionDestroy_inner) (interaction_t *);
void (*__intf_UserFatal_inner) (vlc_object_t*, int, const char*, const char*, ...);
};
# if defined (__PLUGIN__)
# define aout_FiltersCreatePipeline (p_symbols)->aout_FiltersCreatePipeline_inner
......@@ -1267,7 +1271,9 @@ struct module_symbols_t
# define __input_Read (p_symbols)->__input_Read_inner
# define __net_ConnectUDP (p_symbols)->__net_ConnectUDP_inner
# define __intf_Interact (p_symbols)->__intf_Interact_inner
# define intf_UserFatal (p_symbols)->intf_UserFatal_inner
# define intf_InteractionManage (p_symbols)->intf_InteractionManage_inner
# define intf_InteractionDestroy (p_symbols)->intf_InteractionDestroy_inner
# define __intf_UserFatal (p_symbols)->__intf_UserFatal_inner
# elif defined (HAVE_DYNAMIC_PLUGINS) && !defined (__BUILTIN__)
/******************************************************************
* STORE_SYMBOLS: store VLC APIs into p_symbols for plugin access.
......@@ -1683,7 +1689,9 @@ struct module_symbols_t
((p_symbols)->__input_Read_inner) = __input_Read; \
((p_symbols)->__net_ConnectUDP_inner) = __net_ConnectUDP; \
((p_symbols)->__intf_Interact_inner) = __intf_Interact; \
((p_symbols)->intf_UserFatal_inner) = intf_UserFatal; \
((p_symbols)->intf_InteractionManage_inner) = intf_InteractionManage; \
((p_symbols)->intf_InteractionDestroy_inner) = intf_InteractionDestroy; \
((p_symbols)->__intf_UserFatal_inner) = __intf_UserFatal; \
(p_symbols)->net_ConvertIPv4_deprecated = NULL; \
# endif /* __PLUGIN__ */
......
......@@ -38,6 +38,7 @@
#include "stream_output.h"
#include "vlc_playlist.h"
#include "vlc_interface.h"
#include "vlc_interaction.h"
/*****************************************************************************
* Local prototypes
......@@ -2094,7 +2095,8 @@ static int InputSourceInit( input_thread_t *p_input,
if( in->p_access == NULL )
{
msg_Err( p_input, "no suitable access module for `%s'", psz_mrl );
intf_UserFatal( p_input, "Unable to open '%s'", psz_mrl );
intf_UserFatal( VLC_OBJECT( p_input), DIALOG_NOACCESS,
"Unable to open '%s'", psz_mrl );
goto error;
}
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment