* src/libvlc.c, src/libvlc.h: added a config option to disable the translation of...
[vlc.git] / modules / gui / wxwindows / wxwindows.h
1 /*****************************************************************************
2  * wxwindows.h: private wxWindows interface description
3  *****************************************************************************
4  * Copyright (C) 1999, 2000 VideoLAN
5  * $Id: wxwindows.h,v 1.11 2003/03/26 00:56:22 gbazin Exp $
6  *
7  * Authors: Gildas Bazin <gbazin@netcourrier.com>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
22  *****************************************************************************/
23
24 #include <wx/listctrl.h>
25 #include <wx/textctrl.h>
26 #include <wx/notebook.h>
27 #include <wx/spinctrl.h>
28 #include <wx/dnd.h>
29
30 class Playlist;
31 class Messages;
32
33 #define SLIDER_MAX_POS 10000
34
35 /*****************************************************************************
36  * intf_sys_t: description and status of Gtk+ interface
37  *****************************************************************************/
38 struct intf_sys_t
39 {
40     /* the wx parent window */
41     wxWindow            *p_wxwindow;
42
43     /* secondary windows */
44     Playlist            *p_playlist_window;
45     Messages            *p_messages_window;
46
47     /* special actions */
48     vlc_bool_t          b_playing;
49     vlc_bool_t          b_popup_changed;                   /* display menu ? */
50     vlc_bool_t          b_window_changed;        /* window display toggled ? */
51     vlc_bool_t          b_playlist_changed;    /* playlist display toggled ? */
52     vlc_bool_t          b_slider_free;                      /* slider status */
53
54     /* menus handlers */
55     vlc_bool_t          b_program_update;   /* do we need to update programs
56                                                                         menu */
57     vlc_bool_t          b_title_update;  /* do we need to update title menus */
58     vlc_bool_t          b_chapter_update;            /* do we need to update
59                                                                chapter menus */
60     vlc_bool_t          b_audio_update;  /* do we need to update audio menus */
61     vlc_bool_t          b_spu_update;      /* do we need to update spu menus */
62
63     /* windows and widgets */
64
65     /* The input thread */
66     input_thread_t *    p_input;
67
68     /* The slider */
69     int                 i_slider_pos;                     /* slider position */
70     int                 i_slider_oldpos;                /* previous position */
71
72     /* The messages window */
73     msg_subscription_t* p_sub;                  /* message bank subscription */
74
75     /* Playlist management */
76     int                 i_playing;                 /* playlist selected item */
77
78     /* The window labels for DVD mode */
79     unsigned int        i_part;                           /* current chapter */
80 };
81
82 /*****************************************************************************
83  * Prototypes
84  *****************************************************************************/
85
86 /*****************************************************************************
87  * Classes declarations.
88  *****************************************************************************/
89 class Interface;
90
91 /* Timer */
92 class Timer: public wxTimer
93 {
94 public:
95     /* Constructor */
96     Timer( intf_thread_t *p_intf, Interface *p_main_interface );
97     virtual ~Timer();
98
99     virtual void Notify();
100
101 private:
102     intf_thread_t *p_intf;
103     Interface *p_main_interface;
104     int i_old_playing_status;
105 };
106
107 /* Main Interface */
108 class Interface: public wxFrame
109 {
110 public:
111     /* Constructor */
112     Interface( intf_thread_t *p_intf );
113     virtual ~Interface();
114     void TogglePlayButton( int i_playing_status );
115
116     wxBoxSizer  *frame_sizer;
117     wxStatusBar *statusbar;
118
119     wxSlider    *slider;
120     wxWindow    *slider_frame;
121     wxStaticBox *slider_box;
122
123     wxMenu      *p_popup_menu;
124
125     wxArrayString mrl_history;
126
127 private:
128     void CreateOurMenuBar();
129     void CreateOurToolBar();
130     void CreateOurSlider();
131     void Open( int i_access_method );
132
133     /* Event handlers (these functions should _not_ be virtual) */
134     void OnExit( wxCommandEvent& event );
135     void OnAbout( wxCommandEvent& event );
136     void OnMessages( wxCommandEvent& event );
137     void OnPlaylist( wxCommandEvent& event );
138     void OnLogs( wxCommandEvent& event );
139     void OnFileInfo( wxCommandEvent& event );
140     void OnPreferences( wxCommandEvent& event );
141
142     void OnOpenFile( wxCommandEvent& event );
143     void OnOpenDisc( wxCommandEvent& event );
144     void OnOpenNet( wxCommandEvent& event );
145     void OnOpenSat( wxCommandEvent& event );
146
147     void OnPlayStream( wxCommandEvent& event );
148     void OnStopStream( wxCommandEvent& event );
149     void OnSliderUpdate( wxScrollEvent& event );
150     void OnPrevStream( wxCommandEvent& event );
151     void OnNextStream( wxCommandEvent& event );
152
153     DECLARE_EVENT_TABLE();
154
155     Timer *timer;
156     intf_thread_t *p_intf;
157
158     wxDialog *p_prefs_dialog;
159     wxFrame  *p_fileinfo_window;
160
161     int i_old_playing_status;
162 };
163
164 /* Open Dialog */
165 class OpenDialog: public wxDialog
166 {
167 public:
168     /* Constructor */
169     OpenDialog( intf_thread_t *p_intf, Interface *p_main_interface,
170                 int i_access_method );
171     virtual ~OpenDialog();
172     void Rebuild();
173     void Manage();
174
175     wxString mrl;
176
177 private:
178     wxPanel *FilePanel( wxWindow* parent );
179     wxPanel *DiscPanel( wxWindow* parent );
180     wxPanel *NetPanel( wxWindow* parent );
181     wxPanel *SatPanel( wxWindow* parent );
182
183     void UpdateMRL( int i_access_method );
184
185     /* Event handlers (these functions should _not_ be virtual) */
186     void OnOk( wxCommandEvent& event );
187     void OnCancel( wxCommandEvent& event );
188
189     void OnPageChange( wxNotebookEvent& event );
190     void OnMRLChange( wxCommandEvent& event );
191
192     /* Event handlers for the file page */
193     void OnFilePanelChange( wxCommandEvent& event );
194     void OnFileBrowse( wxCommandEvent& event );
195
196     /* Event handlers for the disc page */
197     void OnDiscPanelChange( wxCommandEvent& event );
198     void OnDiscTypeChange( wxCommandEvent& event );
199
200     /* Event handlers for the net page */
201     void OnNetPanelChange( wxCommandEvent& event );
202     void OnNetTypeChange( wxCommandEvent& event );
203
204     /* Event handlers for the stream output */
205     void OnSoutEnable( wxCommandEvent& event );
206     void OnSoutSettings( wxCommandEvent& WXUNUSED(event) );
207
208     DECLARE_EVENT_TABLE();
209
210     intf_thread_t *p_intf;
211     Interface *p_main_interface;
212
213     wxComboBox *mrl_combo;
214
215     /* Controls for the file panel */
216     wxComboBox *file_combo;
217
218     /* Controls for the disc panel */
219     wxRadioBox *disc_type;
220     wxTextCtrl *disc_device;
221     wxSpinCtrl *disc_title;
222     wxSpinCtrl *disc_chapter;
223
224     /* Controls for the net panel */
225     wxRadioBox *net_type;
226     int i_net_type;
227     wxPanel *net_subpanels[4];
228     wxRadioButton *net_radios[4];
229     wxSpinCtrl *net_ports[4];
230     wxTextCtrl *net_addrs[4];
231
232     /* Controls for the stream output */
233     wxButton *sout_button;
234 };
235
236 enum
237 {
238     FILE_ACCESS = 0,
239     DISC_ACCESS,
240     NET_ACCESS,
241     SAT_ACCESS
242 };
243
244 /* Stream output Dialog */
245 class SoutDialog: public wxDialog
246 {
247 public:
248     /* Constructor */
249     SoutDialog( intf_thread_t *p_intf, Interface *p_main_interface );
250     virtual ~SoutDialog();
251
252     wxString mrl;
253
254 private:
255     void UpdateMRL();
256     wxPanel *AccessPanel( wxWindow* parent );
257     wxPanel *EncapsulationPanel( wxWindow* parent );
258     void    ParseMRL();
259
260     /* Event handlers (these functions should _not_ be virtual) */
261     void OnOk( wxCommandEvent& event );
262     void OnCancel( wxCommandEvent& event );
263     void OnMRLChange( wxCommandEvent& event );
264     void OnAccessTypeChange( wxCommandEvent& event );
265
266     /* Event handlers for the file access output */
267     void OnFileChange( wxCommandEvent& event );
268     void OnFileBrowse( wxCommandEvent& event );
269
270     /* Event handlers for the net access output */
271     void OnNetChange( wxCommandEvent& event );
272
273     /* Event handlers for the encapsulation panel */
274     void OnEncapsulationChange( wxCommandEvent& event );
275
276     DECLARE_EVENT_TABLE();
277
278     intf_thread_t *p_intf;
279     Interface *p_main_interface;
280
281     wxComboBox *mrl_combo;
282     wxPanel *access_panel;
283     wxPanel *encapsulation_panel;
284
285     /* Controls for the access outputs */
286     wxPanel *access_subpanels[4];
287     wxRadioButton *access_radios[4];
288
289     int i_access_type;
290
291     wxComboBox *file_combo;
292     wxSpinCtrl *net_port;
293     wxTextCtrl *net_addr;
294
295     /* Controls for the encapsulation */
296     wxRadioButton *encapsulation_radios[4];
297     int i_encapsulation_type;
298
299 };
300
301 /* Preferences Dialog */
302 class PrefsDialog: public wxDialog
303 {
304 public:
305     /* Constructor */
306     PrefsDialog( intf_thread_t *p_intf, Interface *p_main_interface );
307     virtual ~PrefsDialog();
308
309 private:
310     wxPanel *PrefsPanel( wxWindow* parent );
311
312     /* Event handlers (these functions should _not_ be virtual) */
313     void OnOk( wxCommandEvent& event );
314     void OnCancel( wxCommandEvent& event );
315
316     DECLARE_EVENT_TABLE();
317
318     intf_thread_t *p_intf;
319     Interface *p_main_interface;
320 };
321
322 /* Messages */
323 class Messages: public wxFrame
324 {
325 public:
326     /* Constructor */
327     Messages( intf_thread_t *p_intf, Interface *_p_main_interface );
328     virtual ~Messages();
329     void UpdateLog();
330
331 private:
332     /* Event handlers (these functions should _not_ be virtual) */
333     void OnClose( wxCommandEvent& event );
334
335     DECLARE_EVENT_TABLE();
336
337     intf_thread_t *p_intf;
338     Interface *p_main_interface;
339     wxButton *ok_button;
340     wxTextCtrl *textctrl;
341     wxTextAttr *info_attr;
342     wxTextAttr *err_attr;
343     wxTextAttr *warn_attr;
344     wxTextAttr *dbg_attr;
345 };
346
347 /* Playlist */
348 class Playlist: public wxFrame
349 {
350 public:
351     /* Constructor */
352     Playlist( intf_thread_t *p_intf, Interface *p_main_interface );
353     virtual ~Playlist();
354     void Rebuild();
355     void Manage();
356
357 private:
358     void DeleteItem( int item );
359
360     /* Event handlers (these functions should _not_ be virtual) */
361     void OnAddUrl( wxCommandEvent& event );
362     void OnAddDirectory( wxCommandEvent& event );
363     void OnClose( wxCommandEvent& event );
364     void OnInvertSelection( wxCommandEvent& event );
365     void OnDeleteSelection( wxCommandEvent& event );
366     void OnSelectAll( wxCommandEvent& event );
367     void OnActivateItem( wxListEvent& event );
368     void OnKeyDown( wxListEvent& event );
369
370     DECLARE_EVENT_TABLE();
371
372     intf_thread_t *p_intf;
373     Interface *p_main_interface;
374     wxListView *listview;
375     wxButton *ok_button;
376 };
377
378 /* File Info */
379 class FileInfo: public wxFrame
380 {
381 public:
382     /* Constructor */
383     FileInfo( intf_thread_t *p_intf, Interface *p_main_interface );
384     virtual ~FileInfo();
385
386 private:
387     void OnClose( wxCommandEvent& event );
388     DECLARE_EVENT_TABLE();
389     
390 };
391
392 #if !defined(__WXX11__)
393 /* Drag and Drop class */
394 class DragAndDrop: public wxFileDropTarget
395 {
396 public:
397     DragAndDrop( intf_thread_t *_p_intf );
398
399     virtual bool OnDropFiles( wxCoord x, wxCoord y,
400                               const wxArrayString& filenames );
401
402 private:
403     intf_thread_t *p_intf;
404 };
405 #endif
406
407 /* Popup contextual menu */
408 class PopupMenu: public wxMenu
409 {
410 public:
411     /* Constructor */
412     PopupMenu( intf_thread_t *p_intf, Interface *p_main_interface );
413     virtual ~PopupMenu();
414
415 private:
416     /* Event handlers (these functions should _not_ be virtual) */
417     void OnClose( wxCommandEvent& event );
418     void OnEntrySelected( wxCommandEvent& event );
419
420     wxMenu *PopupMenu::CreateDummyMenu();
421     void   PopupMenu::CreateMenuEntry( char *, vlc_object_t * );
422     wxMenu *PopupMenu::CreateSubMenu( char *, vlc_object_t * );
423
424     DECLARE_EVENT_TABLE();
425
426     intf_thread_t *p_intf;
427     Interface *p_main_interface;
428
429     int  i_item_id;
430 };
431
432 class PopupEvtHandler : public wxEvtHandler
433 {
434 public:
435     PopupEvtHandler( intf_thread_t *p_intf, Interface *p_main_interface );
436     virtual ~PopupEvtHandler();
437
438     void PopupEvtHandler::OnMenuEvent( wxCommandEvent& event );
439
440 private:
441
442     DECLARE_EVENT_TABLE()
443
444     intf_thread_t *p_intf;
445     Interface *p_main_interface;
446 };
447
448 class wxMenuItemExt: public wxMenuItem
449 {
450 public:
451     /* Constructor */
452     wxMenuItemExt( wxMenu* parentMenu, int id,
453                    const wxString& text,
454                    const wxString& helpString,
455                    wxItemKind kind,
456                    char *_psz_var, int _i_object_id, vlc_value_t _val ):
457         wxMenuItem( parentMenu, id, text, helpString, kind )
458     {
459         /* Initializations */
460         psz_var = _psz_var;
461         i_object_id = _i_object_id;
462         val = _val;
463     };
464
465     virtual ~wxMenuItemExt() { if( psz_var ) free( psz_var ); };
466
467     char *psz_var;
468     int  i_object_id;
469     vlc_value_t val;
470
471 private:
472
473 };