dc69728c84852c91ad2421e14921a0f7989e8d1c
[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.10 2003/03/22 11:21:58 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 };
105
106 /* Main Interface */
107 class Interface: public wxFrame
108 {
109 public:
110     /* Constructor */
111     Interface( intf_thread_t *p_intf );
112     virtual ~Interface();
113
114     wxBoxSizer  *frame_sizer;
115     wxStatusBar *statusbar;
116
117     wxSlider    *slider;
118     wxWindow    *slider_frame;
119     wxStaticBox *slider_box;
120
121     wxMenu      *p_popup_menu;
122
123     wxArrayString mrl_history;
124
125 private:
126     void CreateOurMenuBar();
127     void CreateOurToolBar();
128     void CreateOurSlider();
129     void Open( int i_access_method );
130
131     /* Event handlers (these functions should _not_ be virtual) */
132     void OnExit( wxCommandEvent& event );
133     void OnAbout( wxCommandEvent& event );
134     void OnMessages( wxCommandEvent& event );
135     void OnPlaylist( wxCommandEvent& event );
136     void OnLogs( wxCommandEvent& event );
137     void OnFileInfo( wxCommandEvent& event );
138
139     void OnOpenFile( wxCommandEvent& event );
140     void OnOpenDisc( wxCommandEvent& event );
141     void OnOpenNet( wxCommandEvent& event );
142     void OnOpenSat( wxCommandEvent& event );
143
144     void OnPlayStream( wxCommandEvent& event );
145     void OnStopStream( wxCommandEvent& event );
146     void OnSliderUpdate( wxScrollEvent& event );
147     void OnPrevStream( wxCommandEvent& event );
148     void OnNextStream( wxCommandEvent& event );
149
150     void TogglePlayButton();
151
152     DECLARE_EVENT_TABLE();
153
154     Timer *timer;
155     intf_thread_t *p_intf;
156     int i_playing_status;
157 };
158
159 /* Open Dialog */
160 class OpenDialog: public wxDialog
161 {
162 public:
163     /* Constructor */
164     OpenDialog( intf_thread_t *p_intf, Interface *p_main_interface,
165                 int i_access_method );
166     virtual ~OpenDialog();
167     void Rebuild();
168     void Manage();
169
170     wxString mrl;
171
172 private:
173     wxPanel *FilePanel( wxWindow* parent );
174     wxPanel *DiscPanel( wxWindow* parent );
175     wxPanel *NetPanel( wxWindow* parent );
176     wxPanel *SatPanel( wxWindow* parent );
177
178     void UpdateMRL( int i_access_method );
179
180     /* Event handlers (these functions should _not_ be virtual) */
181     void OnOk( wxCommandEvent& event );
182     void OnCancel( wxCommandEvent& event );
183
184     void OnPageChange( wxNotebookEvent& event );
185     void OnMRLChange( wxCommandEvent& event );
186
187     /* Event handlers for the file page */
188     void OnFilePanelChange( wxCommandEvent& event );
189     void OnFileBrowse( wxCommandEvent& event );
190
191     /* Event handlers for the disc page */
192     void OnDiscPanelChange( wxCommandEvent& event );
193     void OnDiscTypeChange( wxCommandEvent& event );
194
195     /* Event handlers for the net page */
196     void OnNetPanelChange( wxCommandEvent& event );
197     void OnNetTypeChange( wxCommandEvent& event );
198
199     /* Event handlers for the stream output */
200     void OnSoutEnable( wxCommandEvent& event );
201     void OnSoutSettings( wxCommandEvent& WXUNUSED(event) );
202
203     DECLARE_EVENT_TABLE();
204
205     intf_thread_t *p_intf;
206     Interface *p_main_interface;
207
208     wxComboBox *mrl_combo;
209
210     /* Controls for the file panel */
211     wxComboBox *file_combo;
212
213     /* Controls for the disc panel */
214     wxRadioBox *disc_type;
215     wxTextCtrl *disc_device;
216     wxSpinCtrl *disc_title;
217     wxSpinCtrl *disc_chapter;
218
219     /* Controls for the net panel */
220     wxRadioBox *net_type;
221     int i_net_type;
222     wxPanel *net_subpanels[4];
223     wxRadioButton *net_radios[4];
224     wxSpinCtrl *net_ports[4];
225     wxTextCtrl *net_addrs[4];
226
227     /* Controls for the stream output */
228     wxButton *sout_button;
229 };
230
231 enum
232 {
233     FILE_ACCESS = 0,
234     DISC_ACCESS,
235     NET_ACCESS,
236     SAT_ACCESS
237 };
238
239 /* Stream output Dialog */
240 class SoutDialog: public wxDialog
241 {
242 public:
243     /* Constructor */
244     SoutDialog( intf_thread_t *p_intf, Interface *p_main_interface );
245     virtual ~SoutDialog();
246
247     wxString mrl;
248
249 private:
250     void UpdateMRL();
251     wxPanel *AccessPanel( wxWindow* parent );
252     wxPanel *EncapsulationPanel( wxWindow* parent );
253     void    ParseMRL();
254
255     /* Event handlers (these functions should _not_ be virtual) */
256     void OnOk( wxCommandEvent& event );
257     void OnCancel( wxCommandEvent& event );
258     void OnMRLChange( wxCommandEvent& event );
259     void OnAccessTypeChange( wxCommandEvent& event );
260
261     /* Event handlers for the file access output */
262     void OnFileChange( wxCommandEvent& event );
263     void OnFileBrowse( wxCommandEvent& event );
264
265     /* Event handlers for the net access output */
266     void OnNetChange( wxCommandEvent& event );
267
268     /* Event handlers for the encapsulation panel */
269     void OnEncapsulationChange( wxCommandEvent& event );
270
271     DECLARE_EVENT_TABLE();
272
273     intf_thread_t *p_intf;
274     Interface *p_main_interface;
275
276     wxComboBox *mrl_combo;
277     wxPanel *access_panel;
278     wxPanel *encapsulation_panel;
279
280     /* Controls for the access outputs */
281     wxPanel *access_subpanels[4];
282     wxRadioButton *access_radios[4];
283
284     int i_access_type;
285
286     wxComboBox *file_combo;
287     wxSpinCtrl *net_port;
288     wxTextCtrl *net_addr;
289
290     /* Controls for the encapsulation */
291     wxRadioButton *encapsulation_radios[4];
292     int i_encapsulation_type;
293
294 };
295
296 /* Messages */
297 class Messages: public wxFrame
298 {
299 public:
300     /* Constructor */
301     Messages( intf_thread_t *p_intf, Interface *_p_main_interface );
302     virtual ~Messages();
303     void UpdateLog();
304
305 private:
306     /* Event handlers (these functions should _not_ be virtual) */
307     void OnClose( wxCommandEvent& event );
308
309     DECLARE_EVENT_TABLE();
310
311     intf_thread_t *p_intf;
312     Interface *p_main_interface;
313     wxButton *ok_button;
314     wxTextCtrl *textctrl;
315     wxTextAttr *info_attr;
316     wxTextAttr *err_attr;
317     wxTextAttr *warn_attr;
318     wxTextAttr *dbg_attr;
319 };
320
321 /* Playlist */
322 class Playlist: public wxFrame
323 {
324 public:
325     /* Constructor */
326     Playlist( intf_thread_t *p_intf, Interface *p_main_interface );
327     virtual ~Playlist();
328     void Rebuild();
329     void Manage();
330
331 private:
332     void DeleteItem( int item );
333
334     /* Event handlers (these functions should _not_ be virtual) */
335     void OnAddUrl( wxCommandEvent& event );
336     void OnAddDirectory( wxCommandEvent& event );
337     void OnClose( wxCommandEvent& event );
338     void OnInvertSelection( wxCommandEvent& event );
339     void OnDeleteSelection( wxCommandEvent& event );
340     void OnSelectAll( wxCommandEvent& event );
341     void OnActivateItem( wxListEvent& event );
342     void OnKeyDown( wxListEvent& event );
343
344     DECLARE_EVENT_TABLE();
345
346     intf_thread_t *p_intf;
347     Interface *p_main_interface;
348     wxListView *listview;
349     wxButton *ok_button;
350 };
351
352 /* File Info */
353 class FileInfo: public wxFrame
354 {
355 public:
356     /* Constructor */
357     FileInfo( intf_thread_t *p_intf, Interface *p_main_interface );
358     virtual ~FileInfo();
359
360 private:
361     void OnClose( wxCommandEvent& event );
362     DECLARE_EVENT_TABLE();
363     
364 };
365
366 #if !defined(__WXX11__)
367 /* Drag and Drop class */
368 class DragAndDrop: public wxFileDropTarget
369 {
370 public:
371     DragAndDrop( intf_thread_t *_p_intf );
372
373     virtual bool OnDropFiles( wxCoord x, wxCoord y,
374                               const wxArrayString& filenames );
375
376 private:
377     intf_thread_t *p_intf;
378 };
379 #endif
380
381 /* Popup contextual menu */
382 class PopupMenu: public wxMenu
383 {
384 public:
385     /* Constructor */
386     PopupMenu( intf_thread_t *p_intf, Interface *p_main_interface );
387     virtual ~PopupMenu();
388
389 private:
390     /* Event handlers (these functions should _not_ be virtual) */
391     void OnClose( wxCommandEvent& event );
392     void OnEntrySelected( wxCommandEvent& event );
393
394     wxMenu *PopupMenu::CreateDummyMenu();
395     void   PopupMenu::CreateMenuEntry( char *, vlc_object_t * );
396     wxMenu *PopupMenu::CreateSubMenu( char *, vlc_object_t * );
397
398     DECLARE_EVENT_TABLE();
399
400     intf_thread_t *p_intf;
401     Interface *p_main_interface;
402
403     int  i_item_id;
404 };
405
406 class PopupEvtHandler : public wxEvtHandler
407 {
408 public:
409     PopupEvtHandler( intf_thread_t *p_intf, Interface *p_main_interface );
410     virtual ~PopupEvtHandler();
411
412     void PopupEvtHandler::OnMenuEvent( wxCommandEvent& event );
413
414 private:
415
416     DECLARE_EVENT_TABLE()
417
418     intf_thread_t *p_intf;
419     Interface *p_main_interface;
420 };
421
422 class wxMenuItemExt: public wxMenuItem
423 {
424 public:
425     /* Constructor */
426     wxMenuItemExt( wxMenu* parentMenu, int id,
427                    const wxString& text,
428                    const wxString& helpString,
429                    wxItemKind kind,
430                    char *_psz_var, int _i_object_id, vlc_value_t _val ):
431         wxMenuItem( parentMenu, id, text, helpString, kind )
432     {
433         /* Initializations */
434         psz_var = _psz_var;
435         i_object_id = _i_object_id;
436         val = _val;
437     };
438
439     virtual ~wxMenuItemExt() { if( psz_var ) free( psz_var ); };
440
441     char *psz_var;
442     int  i_object_id;
443     vlc_value_t val;
444
445 private:
446
447 };