vlc_interface.h 6.39 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 the VideoLAN team
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
 *****************************************************************************/

gbazin's avatar
   
gbazin committed
26
27
typedef struct intf_dialog_args_t intf_dialog_args_t;

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


35
/*****************************************************************************
Michel Kaempf's avatar
Michel Kaempf committed
36
 * intf_thread_t: describe an interface thread
37
 *****************************************************************************
gbazin's avatar
   
gbazin committed
38
 * This struct describes all interface-specific data of the main (interface)
Michel Kaempf's avatar
Michel Kaempf committed
39
 * thread.
40
 *****************************************************************************/
zorglub's avatar
zorglub 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 */
gbazin's avatar
   
gbazin committed
56
57
    intf_console_t *    p_console;                               /** console */
    intf_sys_t *        p_sys;                          /** system interface */
58

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

zorglub's avatar
zorglub committed
63
    /** Specific for dialogs providers */
gbazin's avatar
   
gbazin committed
64
65
    void ( *pf_show_dialog ) ( intf_thread_t *, int, int,
                               intf_dialog_args_t * );
gbazin's avatar
   
gbazin committed
66

gbazin's avatar
gbazin committed
67
    /** Video window callbacks */
68
69
    void * ( *pf_request_window ) ( intf_thread_t *, vout_thread_t *,
                                    int *, int *,
gbazin's avatar
gbazin 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 );
gbazin's avatar
gbazin 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;
gbazin's avatar
   
gbazin 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

gbazin's avatar
   
gbazin 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

zorglub's avatar
zorglub committed
114
115
/*@}*/

gbazin's avatar
   
gbazin committed
116
117
118
/*****************************************************************************
 * Macros
 *****************************************************************************/
119
#if defined( WIN32 ) && !defined( UNDER_CE )
gbazin's avatar
   
gbazin committed
120
#    define CONSOLE_INTRO_MSG \
121
122
         if( !getenv( "PWD" ) || !getenv( "PS1" ) ) /* detect cygwin shell */ \
         { \
gbazin's avatar
   
gbazin 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 ); \
gbazin's avatar
   
gbazin 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 " \
gbazin's avatar
   
gbazin committed
132
                             "\"vlc -I wxwin\"\n") )
gbazin's avatar
   
gbazin committed
133
134
135
#else
#    define CONSOLE_INTRO_MSG
#endif
gbazin's avatar
   
gbazin 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
gbazin's avatar
   
gbazin committed
144

zorglub's avatar
zorglub committed
145
146
#define INTF_DIALOG_DIRECTORY   7

gbazin's avatar
   
gbazin committed
147
#define INTF_DIALOG_STREAMWIZARD 8
148
#define INTF_DIALOG_WIZARD 9
zorglub's avatar
zorglub committed
149

gbazin's avatar
   
gbazin committed
150
151
152
153
#define INTF_DIALOG_PLAYLIST   10
#define INTF_DIALOG_MESSAGES   11
#define INTF_DIALOG_FILEINFO   12
#define INTF_DIALOG_PREFS      13
gbazin's avatar
gbazin committed
154
#define INTF_DIALOG_BOOKMARKS  14
gbazin's avatar
   
gbazin committed
155
156

#define INTF_DIALOG_POPUPMENU  20
gbazin's avatar
   
gbazin committed
157
158
159

#define INTF_DIALOG_FILE_GENERIC 30

160
#define INTF_DIALOG_UPDATEVLC   90
161
#define INTF_DIALOG_VLM   91
162

gbazin's avatar
   
gbazin committed
163
#define INTF_DIALOG_EXIT       99
gbazin's avatar
   
gbazin committed
164
165
166
167
168

/* 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, " \
169
       "DivX, mp3, Ogg, etc.) as well as DVDs, VCDs, CD audio, and various " \
gbazin's avatar
   
gbazin committed
170
171
       "streaming protocols.\n\n" \
       "VLC is also a streaming server with transcoding capabilities " \
172
       "(UDP unicast and multicast, HTTP, etc.) mainly designed for " \
gbazin's avatar
   
gbazin committed
173
174
       "high-bandwidth networks.\n\n"\
       "For more information, have a look at the web site." )