* Resampler plug-in based on CoreAudio's AudioConverter.
[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.12 2003/03/29 01:50:12 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     /* Event handlers for the demux dump */
209     void OnDemuxDumpEnable( wxCommandEvent& event );
210     void OnDemuxDumpBrowse( wxCommandEvent& event );
211     void OnDemuxDumpChange( wxCommandEvent& event );
212
213     DECLARE_EVENT_TABLE();
214
215     intf_thread_t *p_intf;
216     Interface *p_main_interface;
217     int i_current_access_method;
218
219     wxComboBox *mrl_combo;
220
221     /* Controls for the file panel */
222     wxComboBox *file_combo;
223
224     /* Controls for the disc panel */
225     wxRadioBox *disc_type;
226     wxTextCtrl *disc_device;
227     wxSpinCtrl *disc_title;
228     wxSpinCtrl *disc_chapter;
229
230     /* Controls for the net panel */
231     wxRadioBox *net_type;
232     int i_net_type;
233     wxPanel *net_subpanels[4];
234     wxRadioButton *net_radios[4];
235     wxSpinCtrl *net_ports[4];
236     wxTextCtrl *net_addrs[4];
237
238     /* Controls for the stream output */
239     wxButton *sout_button;
240     wxCheckBox *sout_checkbox;
241
242     /* Controls for the demux dump */
243     wxTextCtrl *demuxdump_textctrl;
244     wxButton *demuxdump_button;
245     wxCheckBox *demuxdump_checkbox;
246 };
247
248 enum
249 {
250     FILE_ACCESS = 0,
251     DISC_ACCESS,
252     NET_ACCESS,
253     SAT_ACCESS
254 };
255
256 /* Stream output Dialog */
257 class SoutDialog: public wxDialog
258 {
259 public:
260     /* Constructor */
261     SoutDialog( intf_thread_t *p_intf, Interface *p_main_interface );
262     virtual ~SoutDialog();
263
264     wxString mrl;
265
266 private:
267     void UpdateMRL();
268     wxPanel *AccessPanel( wxWindow* parent );
269     wxPanel *EncapsulationPanel( wxWindow* parent );
270     void    ParseMRL();
271
272     /* Event handlers (these functions should _not_ be virtual) */
273     void OnOk( wxCommandEvent& event );
274     void OnCancel( wxCommandEvent& event );
275     void OnMRLChange( wxCommandEvent& event );
276     void OnAccessTypeChange( wxCommandEvent& event );
277
278     /* Event handlers for the file access output */
279     void OnFileChange( wxCommandEvent& event );
280     void OnFileBrowse( wxCommandEvent& event );
281
282     /* Event handlers for the net access output */
283     void OnNetChange( wxCommandEvent& event );
284
285     /* Event handlers for the encapsulation panel */
286     void OnEncapsulationChange( wxCommandEvent& event );
287
288     DECLARE_EVENT_TABLE();
289
290     intf_thread_t *p_intf;
291     Interface *p_main_interface;
292
293     wxComboBox *mrl_combo;
294     wxPanel *access_panel;
295     wxPanel *encapsulation_panel;
296
297     /* Controls for the access outputs */
298     wxPanel *access_subpanels[4];
299     wxRadioButton *access_radios[4];
300
301     int i_access_type;
302
303     wxComboBox *file_combo;
304     wxSpinCtrl *net_port;
305     wxTextCtrl *net_addr;
306
307     /* Controls for the encapsulation */
308     wxRadioButton *encapsulation_radios[4];
309     int i_encapsulation_type;
310
311 };
312
313 /* Preferences Dialog */
314 class PrefsDialog: public wxDialog
315 {
316 public:
317     /* Constructor */
318     PrefsDialog( intf_thread_t *p_intf, Interface *p_main_interface );
319     virtual ~PrefsDialog();
320
321 private:
322     wxPanel *PrefsPanel( wxWindow* parent );
323
324     /* Event handlers (these functions should _not_ be virtual) */
325     void OnOk( wxCommandEvent& event );
326     void OnCancel( wxCommandEvent& event );
327
328     DECLARE_EVENT_TABLE();
329
330     intf_thread_t *p_intf;
331     Interface *p_main_interface;
332 };
333
334 /* Messages */
335 class Messages: public wxFrame
336 {
337 public:
338     /* Constructor */
339     Messages( intf_thread_t *p_intf, Interface *_p_main_interface );
340     virtual ~Messages();
341     void UpdateLog();
342
343 private:
344     /* Event handlers (these functions should _not_ be virtual) */
345     void OnClose( wxCommandEvent& event );
346
347     DECLARE_EVENT_TABLE();
348
349     intf_thread_t *p_intf;
350     Interface *p_main_interface;
351     wxButton *ok_button;
352     wxTextCtrl *textctrl;
353     wxTextAttr *info_attr;
354     wxTextAttr *err_attr;
355     wxTextAttr *warn_attr;
356     wxTextAttr *dbg_attr;
357 };
358
359 /* Playlist */
360 class Playlist: public wxFrame
361 {
362 public:
363     /* Constructor */
364     Playlist( intf_thread_t *p_intf, Interface *p_main_interface );
365     virtual ~Playlist();
366     void Rebuild();
367     void Manage();
368
369 private:
370     void DeleteItem( int item );
371
372     /* Event handlers (these functions should _not_ be virtual) */
373     void OnAddUrl( wxCommandEvent& event );
374     void OnAddDirectory( wxCommandEvent& event );
375     void OnClose( wxCommandEvent& event );
376     void OnInvertSelection( wxCommandEvent& event );
377     void OnDeleteSelection( wxCommandEvent& event );
378     void OnSelectAll( wxCommandEvent& event );
379     void OnActivateItem( wxListEvent& event );
380     void OnKeyDown( wxListEvent& event );
381
382     DECLARE_EVENT_TABLE();
383
384     intf_thread_t *p_intf;
385     Interface *p_main_interface;
386     wxListView *listview;
387     wxButton *ok_button;
388 };
389
390 /* File Info */
391 class FileInfo: public wxFrame
392 {
393 public:
394     /* Constructor */
395     FileInfo( intf_thread_t *p_intf, Interface *p_main_interface );
396     virtual ~FileInfo();
397
398 private:
399     void OnClose( wxCommandEvent& event );
400     DECLARE_EVENT_TABLE();
401     
402 };
403
404 #if !defined(__WXX11__)
405 /* Drag and Drop class */
406 class DragAndDrop: public wxFileDropTarget
407 {
408 public:
409     DragAndDrop( intf_thread_t *_p_intf );
410
411     virtual bool OnDropFiles( wxCoord x, wxCoord y,
412                               const wxArrayString& filenames );
413
414 private:
415     intf_thread_t *p_intf;
416 };
417 #endif
418
419 /* Popup contextual menu */
420 class PopupMenu: public wxMenu
421 {
422 public:
423     /* Constructor */
424     PopupMenu( intf_thread_t *p_intf, Interface *p_main_interface );
425     virtual ~PopupMenu();
426
427 private:
428     /* Event handlers (these functions should _not_ be virtual) */
429     void OnClose( wxCommandEvent& event );
430     void OnEntrySelected( wxCommandEvent& event );
431
432     wxMenu *PopupMenu::CreateDummyMenu();
433     void   PopupMenu::CreateMenuEntry( char *, vlc_object_t * );
434     wxMenu *PopupMenu::CreateSubMenu( char *, vlc_object_t * );
435
436     DECLARE_EVENT_TABLE();
437
438     intf_thread_t *p_intf;
439     Interface *p_main_interface;
440
441     int  i_item_id;
442 };
443
444 class PopupEvtHandler : public wxEvtHandler
445 {
446 public:
447     PopupEvtHandler( intf_thread_t *p_intf, Interface *p_main_interface );
448     virtual ~PopupEvtHandler();
449
450     void PopupEvtHandler::OnMenuEvent( wxCommandEvent& event );
451
452 private:
453
454     DECLARE_EVENT_TABLE()
455
456     intf_thread_t *p_intf;
457     Interface *p_main_interface;
458 };
459
460 class wxMenuItemExt: public wxMenuItem
461 {
462 public:
463     /* Constructor */
464     wxMenuItemExt( wxMenu* parentMenu, int id,
465                    const wxString& text,
466                    const wxString& helpString,
467                    wxItemKind kind,
468                    char *_psz_var, int _i_object_id, vlc_value_t _val ):
469         wxMenuItem( parentMenu, id, text, helpString, kind )
470     {
471         /* Initializations */
472         psz_var = _psz_var;
473         i_object_id = _i_object_id;
474         val = _val;
475     };
476
477     virtual ~wxMenuItemExt() { if( psz_var ) free( psz_var ); };
478
479     char *psz_var;
480     int  i_object_id;
481     vlc_value_t val;
482
483 private:
484
485 };