vlc_interface.h 6.28 KB
Newer Older
1
/*****************************************************************************
2
 * vlc_interface.h: interface access for other threads
Michel Kaempf's avatar
Michel Kaempf committed
3 4
 * This library provides basic functions for threads to interact with user
 * interface, such as message output.
5
 *****************************************************************************
6
 * Copyright (C) 1999, 2000 VideoLAN
7
 * $Id$
8
 *
Sam Hocevar's avatar
 
Sam Hocevar committed
9
 * Authors: Vincent Seguin <seguin@via.ecp.fr>
10 11 12 13 14
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
15
 *
16 17
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 19
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
20
 *
21 22 23
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
24 25
 *****************************************************************************/

Gildas Bazin's avatar
 
Gildas Bazin committed
26 27
typedef struct intf_dialog_args_t intf_dialog_args_t;

Clément Stenac's avatar
Clément Stenac committed
28 29
/**
 * \file
Clément Stenac's avatar
Clément Stenac committed
30 31
 * This file contains structures and function prototypes for
 * interface management in vlc
Clément Stenac's avatar
Clément Stenac committed
32 33 34
 */


35
/*****************************************************************************
Michel Kaempf's avatar
Michel Kaempf committed
36
 * intf_thread_t: describe an interface thread
37
 *****************************************************************************
Gildas Bazin's avatar
 
Gildas Bazin committed
38
 * This struct describes all interface-specific data of the main (interface)
Michel Kaempf's avatar
Michel Kaempf committed
39
 * thread.
40
 *****************************************************************************/
Clément Stenac's avatar
Clément Stenac committed
41 42 43 44 45 46

/**
 * \defgroup vlc_interface Interface
 * These functions and structures are for interface management
 * @{
 */
47
struct intf_thread_t
Michel Kaempf's avatar
Michel Kaempf committed
48
{
49 50 51 52
    VLC_COMMON_MEMBERS

    /* Thread properties and locks */
    vlc_bool_t          b_block;
53
    vlc_bool_t          b_play;
Michel Kaempf's avatar
Michel Kaempf committed
54

55
    /* Specific interfaces */
Gildas Bazin's avatar
 
Gildas Bazin committed
56 57
    intf_console_t *    p_console;                               /** console */
    intf_sys_t *        p_sys;                          /** system interface */
58

Clément Stenac's avatar
Clément Stenac committed
59
    /** Interface module */
60
    module_t *   p_module;
Clément Stenac's avatar
Clément Stenac committed
61
    void      ( *pf_run )    ( intf_thread_t * ); /** Run function */
62

Clément Stenac's avatar
Clément Stenac committed
63
    /** Specific for dialogs providers */
Gildas Bazin's avatar
 
Gildas Bazin committed
64 65
    void ( *pf_show_dialog ) ( intf_thread_t *, int, int,
                               intf_dialog_args_t * );
Gildas Bazin's avatar
 
Gildas Bazin committed
66

Gildas Bazin's avatar
Gildas Bazin committed
67
    /** Video window callbacks */
68 69
    void * ( *pf_request_window ) ( intf_thread_t *, vout_thread_t *,
                                    int *, int *,
Gildas Bazin's avatar
Gildas Bazin committed
70 71
                                    unsigned int *, unsigned int * );
    void   ( *pf_release_window ) ( intf_thread_t *, void * );
72
    int    ( *pf_control_window ) ( intf_thread_t *, void *, int, va_list );
Gildas Bazin's avatar
Gildas Bazin committed
73

Sam Hocevar's avatar
 
Sam Hocevar committed
74
    /* XXX: new message passing stuff will go here */
75 76 77
    vlc_mutex_t  change_lock;
    vlc_bool_t   b_menu_change;
    vlc_bool_t   b_menu;
Gildas Bazin's avatar
 
Gildas Bazin committed
78 79 80

    /* Provides the ability to switch an interface on the fly */
    char *psz_switch_intf;
81
};
Sam Hocevar's avatar
 
Sam Hocevar committed
82

Gildas Bazin's avatar
 
Gildas Bazin committed
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
/*****************************************************************************
 * intf_dialog_args_t: arguments structure passed to a dialogs provider.
 *****************************************************************************
 * This struct describes the arguments passed to the dialogs provider.
 * For now they are only used with INTF_DIALOG_FILE_GENERIC.
 *****************************************************************************/
struct intf_dialog_args_t
{
    char *psz_title;

    char **psz_results;
    int  i_results;

    void (*pf_callback) ( intf_dialog_args_t * );
    void *p_arg;

    /* Specifically for INTF_DIALOG_FILE_GENERIC */
    char *psz_extensions;
    vlc_bool_t b_save;
    vlc_bool_t b_multiple;
};

105
/*****************************************************************************
Michel Kaempf's avatar
Michel Kaempf committed
106
 * Prototypes
107
 *****************************************************************************/
108
#define intf_Create(a,b) __intf_Create(VLC_OBJECT(a),b)
109
VLC_EXPORT( intf_thread_t *, __intf_Create,     ( vlc_object_t *, const char * ) );
Sam Hocevar's avatar
Sam Hocevar committed
110
VLC_EXPORT( int,               intf_RunThread,  ( intf_thread_t * ) );
111 112
VLC_EXPORT( void,              intf_StopThread, ( intf_thread_t * ) );
VLC_EXPORT( void,              intf_Destroy,    ( intf_thread_t * ) );
Vincent Seguin's avatar
Vincent Seguin committed
113

Clément Stenac's avatar
Clément Stenac committed
114 115
/*@}*/

Gildas Bazin's avatar
 
Gildas Bazin committed
116 117 118
/*****************************************************************************
 * Macros
 *****************************************************************************/
119
#if defined( WIN32 ) && !defined( UNDER_CE )
Gildas Bazin's avatar
 
Gildas Bazin committed
120
#    define CONSOLE_INTRO_MSG \
121 122
         if( !getenv( "PWD" ) || !getenv( "PS1" ) ) /* detect cygwin shell */ \
         { \
Gildas Bazin's avatar
 
Gildas Bazin committed
123 124 125 126
         AllocConsole(); \
         freopen( "CONOUT$", "w", stdout ); \
         freopen( "CONOUT$", "w", stderr ); \
         freopen( "CONIN$", "r", stdin ); \
127
         } \
Sam Hocevar's avatar
Sam Hocevar committed
128
         msg_Info( p_intf, COPYRIGHT_MESSAGE ); \
Gildas Bazin's avatar
 
Gildas Bazin committed
129 130 131
         msg_Info( p_intf, _("\nWarning: if you can't access the GUI " \
                             "anymore, open a dos command box, go to the " \
                             "directory where you installed VLC and run " \
Gildas Bazin's avatar
 
Gildas Bazin committed
132
                             "\"vlc -I wxwin\"\n") )
Gildas Bazin's avatar
 
Gildas Bazin committed
133 134 135
#else
#    define CONSOLE_INTRO_MSG
#endif
Gildas Bazin's avatar
 
Gildas Bazin committed
136 137 138 139 140 141

/* Interface dialog ids for dialog providers */
#define INTF_DIALOG_FILE_SIMPLE 1
#define INTF_DIALOG_FILE        2
#define INTF_DIALOG_DISC        3
#define INTF_DIALOG_NET         4
142 143
#define INTF_DIALOG_CAPTURE     5
#define INTF_DIALOG_SAT         6
Gildas Bazin's avatar
 
Gildas Bazin committed
144

Gildas Bazin's avatar
 
Gildas Bazin committed
145
#define INTF_DIALOG_STREAMWIZARD 8
146
#define INTF_DIALOG_WIZARD 9
147

Gildas Bazin's avatar
 
Gildas Bazin committed
148 149 150 151
#define INTF_DIALOG_PLAYLIST   10
#define INTF_DIALOG_MESSAGES   11
#define INTF_DIALOG_FILEINFO   12
#define INTF_DIALOG_PREFS      13
Gildas Bazin's avatar
Gildas Bazin committed
152
#define INTF_DIALOG_BOOKMARKS  14
Gildas Bazin's avatar
 
Gildas Bazin committed
153 154

#define INTF_DIALOG_POPUPMENU  20
Gildas Bazin's avatar
 
Gildas Bazin committed
155 156 157 158

#define INTF_DIALOG_FILE_GENERIC 30

#define INTF_DIALOG_EXIT       99
Gildas Bazin's avatar
 
Gildas Bazin committed
159 160 161 162 163

/* Useful text messages shared by interfaces */
#define INTF_ABOUT_MSG \
    _( "VLC is an open-source and cross-platform multimedia " \
       "player for various audio and video formats (MPEG-1, MPEG-2, MPEG-4, " \
164
       "DivX, mp3, Ogg, etc.) as well as DVDs, VCDs, CD audio, and various " \
Gildas Bazin's avatar
 
Gildas Bazin committed
165 166
       "streaming protocols.\n\n" \
       "VLC is also a streaming server with transcoding capabilities " \
167
       "(UDP unicast and multicast, HTTP, etc.) mainly designed for " \
Gildas Bazin's avatar
 
Gildas Bazin committed
168 169
       "high-bandwidth networks.\n\n"\
       "For more information, have a look at the web site." )