interface.cpp 44.9 KB
Newer Older
gbazin's avatar
   
gbazin committed
1
2
3
/*****************************************************************************
 * interface.cpp : wxWindows plugin for vlc
 *****************************************************************************
hartman's avatar
hartman committed
4
 * Copyright (C) 2000-2004, 2003 VideoLAN
gbazin's avatar
gbazin committed
5
 * $Id$
gbazin's avatar
   
gbazin committed
6
 *
7
 * Authors: Gildas Bazin <gbazin@videolan.org>
gbazin's avatar
   
gbazin committed
8
9
10
11
12
 *
 * 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.
13
 *
gbazin's avatar
   
gbazin committed
14
15
16
17
18
19
20
21
22
23
24
25
26
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * 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.
 *****************************************************************************/

/*****************************************************************************
 * Preamble
 *****************************************************************************/
gbazin's avatar
   
gbazin committed
27
#include <vlc/vlc.h>
gbazin's avatar
   
gbazin committed
28
#include <vlc/aout.h>
29
#include <vlc/vout.h>
gbazin's avatar
   
gbazin committed
30
#include <vlc/intf.h>
gbazin's avatar
   
gbazin committed
31
32
33
34
35
36
37

#include "wxwindows.h"

/* include the toolbar graphics */
#include "bitmaps/play.xpm"
#include "bitmaps/pause.xpm"
#include "bitmaps/stop.xpm"
38
#include "bitmaps/prev.xpm"
gbazin's avatar
   
gbazin committed
39
#include "bitmaps/next.xpm"
40
#include "bitmaps/eject.xpm"
gbazin's avatar
   
gbazin committed
41
#include "bitmaps/slow.xpm"
42
#include "bitmaps/fast.xpm"
43
#include "bitmaps/playlist.xpm"
44
#include "bitmaps/speaker.xpm"
gbazin's avatar
   
gbazin committed
45

46
47
#define TOOLBAR_BMP_WIDTH 16
#define TOOLBAR_BMP_HEIGHT 16
gbazin's avatar
   
gbazin committed
48

gbazin's avatar
   
gbazin committed
49
/* include the icon graphic */
Sam Hocevar's avatar
Sam Hocevar committed
50
#include "../../../share/vlc32x32.xpm"
gbazin's avatar
   
gbazin committed
51
52
53
54

/*****************************************************************************
 * Local class declarations.
 *****************************************************************************/
gbazin's avatar
   
gbazin committed
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
class wxMenuExt: public wxMenu
{
public:
    /* Constructor */
    wxMenuExt( wxMenu* parentMenu, int id, const wxString& text,
                   const wxString& helpString, wxItemKind kind,
                   char *_psz_var, int _i_object_id, vlc_value_t _val,
                   int _i_val_type );

    virtual ~wxMenuExt() {};

    char *psz_var;
    int  i_val_type;
    int  i_object_id;
    vlc_value_t val;

private:

};
gbazin's avatar
   
gbazin committed
74

gbazin's avatar
   
gbazin committed
75
76
77
78
class wxVolCtrl: public wxGauge
{
public:
    /* Constructor */
79
80
    wxVolCtrl( intf_thread_t *_p_intf, wxWindow* parent, wxWindowID id,
               wxPoint = wxDefaultPosition, wxSize = wxSize( 20, -1 ) );
gbazin's avatar
   
gbazin committed
81
82
    virtual ~wxVolCtrl() {};

83
    void UpdateVolume();
gbazin's avatar
   
gbazin committed
84
85
86
87
88
89
90
91
92
93
94
95

    void OnChange( wxMouseEvent& event );

private:
    intf_thread_t *p_intf;

    DECLARE_EVENT_TABLE();
};

BEGIN_EVENT_TABLE(wxVolCtrl, wxWindow)
    /* Mouse events */
    EVT_LEFT_DOWN(wxVolCtrl::OnChange)
96
    EVT_MOTION(wxVolCtrl::OnChange)
gbazin's avatar
   
gbazin committed
97
98
END_EVENT_TABLE()

gbazin's avatar
   
gbazin committed
99
100
101
102
/*****************************************************************************
 * Event Table.
 *****************************************************************************/

gbazin's avatar
gbazin committed
103
104
DEFINE_LOCAL_EVENT_TYPE( wxEVT_INTF );

gbazin's avatar
   
gbazin committed
105
106
107
108
/* IDs for the controls and the menu commands */
enum
{
    /* menu items */
zorglub's avatar
zorglub committed
109
    MenuDummy_Event = wxID_HIGHEST + 1000,
gbazin's avatar
   
gbazin committed
110
    Exit_Event = wxID_HIGHEST,
gbazin's avatar
   
gbazin committed
111
    OpenFileSimple_Event,
zorglub's avatar
zorglub committed
112
    OpenAdv_Event,
gbazin's avatar
   
gbazin committed
113
114
115
    OpenFile_Event,
    OpenDisc_Event,
    OpenNet_Event,
gbazin's avatar
gbazin committed
116
    OpenCapture_Event,
gbazin's avatar
   
gbazin committed
117
    OpenSat_Event,
zorglub's avatar
zorglub committed
118
    OpenOther_Event,
gbazin's avatar
   
gbazin committed
119
120
    EjectDisc_Event,

gbazin's avatar
   
gbazin committed
121
    StreamWizard_Event,
122
    Wizard_Event,
zorglub's avatar
zorglub committed
123

124
    Playlist_Event,
gbazin's avatar
   
gbazin committed
125
    Logs_Event,
126
    FileInfo_Event,
gbazin's avatar
   
gbazin committed
127
128

    Prefs_Event,
gbazin's avatar
gbazin committed
129
130
    Extended_Event,
    Bookmarks_Event,
gbazin's avatar
   
gbazin committed
131
    Skins_Event,
gbazin's avatar
   
gbazin committed
132
133
134
135
136

    SliderScroll_Event,
    StopStream_Event,
    PlayStream_Event,
    PrevStream_Event,
gbazin's avatar
   
gbazin committed
137
    NextStream_Event,
gbazin's avatar
   
gbazin committed
138
139
    SlowStream_Event,
    FastStream_Event,
gbazin's avatar
   
gbazin committed
140

zorglub's avatar
zorglub committed
141
    Adjust_Event,
142
    RestoreDefaults_Event,
zorglub's avatar
zorglub committed
143
144
145
146
    Hue_Event,
    Contrast_Event,
    Brightness_Event,
    Saturation_Event,
147
    Gamma_Event,
zorglub's avatar
zorglub committed
148
149

    Ratio_Event,
zorglub's avatar
zorglub committed
150
151
    Visual_Event,

gbazin's avatar
   
gbazin committed
152
153
154
    /* it is important for the id corresponding to the "About" command to have
     * this standard value as otherwise it won't be handled properly under Mac
     * (where it is special and put into the "Apple" menu) */
gbazin's avatar
   
gbazin committed
155
    About_Event = wxID_ABOUT
gbazin's avatar
   
gbazin committed
156
157
158
159
160
161
};

BEGIN_EVENT_TABLE(Interface, wxFrame)
    /* Menu events */
    EVT_MENU(Exit_Event, Interface::OnExit)
    EVT_MENU(About_Event, Interface::OnAbout)
gbazin's avatar
   
gbazin committed
162
163
164
165
166

    EVT_MENU(Playlist_Event, Interface::OnShowDialog)
    EVT_MENU(Logs_Event, Interface::OnShowDialog)
    EVT_MENU(FileInfo_Event, Interface::OnShowDialog)
    EVT_MENU(Prefs_Event, Interface::OnShowDialog)
gbazin's avatar
   
gbazin committed
167

gbazin's avatar
   
gbazin committed
168
169
    EVT_MENU_OPEN(Interface::OnMenuOpen)

gbazin's avatar
gbazin committed
170
171
    EVT_MENU( Extended_Event, Interface::OnExtended)
    EVT_MENU( Bookmarks_Event, Interface::OnShowDialog)
zorglub's avatar
zorglub committed
172

gbazin's avatar
gbazin committed
173
    EVT_CHECKBOX( Adjust_Event, Interface::OnEnableAdjust)
174
    EVT_BUTTON( RestoreDefaults_Event, Interface::OnRestoreDefaults)
gbazin's avatar
   
gbazin committed
175
    EVT_TEXT( Ratio_Event, Interface::OnRatio)
zorglub's avatar
zorglub committed
176
    EVT_CHECKBOX( Visual_Event, Interface::OnEnableVisual)
zorglub's avatar
zorglub committed
177

gbazin's avatar
   
gbazin committed
178
#if defined( __WXMSW__ ) || defined( __WXMAC__ )
gbazin's avatar
   
gbazin committed
179
    EVT_CONTEXT_MENU(Interface::OnContextMenu2)
gbazin's avatar
   
gbazin committed
180
#endif
gbazin's avatar
   
gbazin committed
181
    EVT_RIGHT_UP(Interface::OnContextMenu)
gbazin's avatar
   
gbazin committed
182

gbazin's avatar
   
gbazin committed
183
    /* Toolbar events */
gbazin's avatar
   
gbazin committed
184
    EVT_MENU(OpenFileSimple_Event, Interface::OnShowDialog)
zorglub's avatar
zorglub committed
185
    EVT_MENU(OpenAdv_Event, Interface::OnShowDialog)
gbazin's avatar
   
gbazin committed
186
187
188
    EVT_MENU(OpenFile_Event, Interface::OnShowDialog)
    EVT_MENU(OpenDisc_Event, Interface::OnShowDialog)
    EVT_MENU(OpenNet_Event, Interface::OnShowDialog)
gbazin's avatar
gbazin committed
189
    EVT_MENU(OpenCapture_Event, Interface::OnShowDialog)
gbazin's avatar
   
gbazin committed
190
    EVT_MENU(OpenSat_Event, Interface::OnShowDialog)
gbazin's avatar
   
gbazin committed
191
    EVT_MENU(StreamWizard_Event, Interface::OnShowDialog)
192
    EVT_MENU(Wizard_Event, Interface::OnShowDialog)
gbazin's avatar
   
gbazin committed
193
194
195
196
    EVT_MENU(StopStream_Event, Interface::OnStopStream)
    EVT_MENU(PlayStream_Event, Interface::OnPlayStream)
    EVT_MENU(PrevStream_Event, Interface::OnPrevStream)
    EVT_MENU(NextStream_Event, Interface::OnNextStream)
gbazin's avatar
   
gbazin committed
197
198
    EVT_MENU(SlowStream_Event, Interface::OnSlowStream)
    EVT_MENU(FastStream_Event, Interface::OnFastStream)
gbazin's avatar
   
gbazin committed
199

gbazin's avatar
   
gbazin committed
200
201
    /* Slider events */
    EVT_COMMAND_SCROLL(SliderScroll_Event, Interface::OnSliderUpdate)
202
203
204
205
206
207
    
    EVT_COMMAND_SCROLL(Hue_Event, Interface::OnAdjustUpdate)
    EVT_COMMAND_SCROLL(Contrast_Event, Interface::OnAdjustUpdate)
    EVT_COMMAND_SCROLL(Brightness_Event, Interface::OnAdjustUpdate)
    EVT_COMMAND_SCROLL(Saturation_Event, Interface::OnAdjustUpdate)
    EVT_COMMAND_SCROLL(Gamma_Event, Interface::OnAdjustUpdate)
zorglub's avatar
zorglub committed
208

gbazin's avatar
gbazin committed
209
    /* Custom events */
210
211
    EVT_COMMAND(0, wxEVT_INTF, Interface::OnControlEvent)
    EVT_COMMAND(1, wxEVT_INTF, Interface::OnControlEvent)
gbazin's avatar
gbazin committed
212

gbazin's avatar
   
gbazin committed
213
214
215
216
217
218
END_EVENT_TABLE()

/*****************************************************************************
 * Constructor.
 *****************************************************************************/
Interface::Interface( intf_thread_t *_p_intf ):
gbazin's avatar
   
gbazin committed
219
    wxFrame( NULL, -1, wxT("VLC media player"),
220
             wxDefaultPosition, wxSize(700,100), wxDEFAULT_FRAME_STYLE )
gbazin's avatar
   
gbazin committed
221
222
223
{
    /* Initializations */
    p_intf = _p_intf;
gbazin's avatar
   
gbazin committed
224
    i_old_playing_status = PAUSE_S;
zorglub's avatar
zorglub committed
225
    b_extra = VLC_FALSE;
gbazin's avatar
   
gbazin committed
226

gbazin's avatar
   
gbazin committed
227
    /* Give our interface a nice little icon */
gbazin's avatar
   
gbazin committed
228
    SetIcon( wxIcon( vlc_xpm ) );
gbazin's avatar
   
gbazin committed
229
230

    /* Create a sizer for the main frame */
zorglub's avatar
zorglub committed
231
    frame_sizer = new wxBoxSizer( wxVERTICAL );
gbazin's avatar
   
gbazin committed
232
233
    SetSizer( frame_sizer );

234
235
236
237
    /* Create a dummy widget that can get the keyboard focus */
    wxWindow *p_dummy = new wxWindow( this, 0, wxDefaultPosition,
                                      wxSize(0,0) );
    p_dummy->SetFocus();
238
    frame_sizer->Add( p_dummy, 0, wxEXPAND );
zorglub's avatar
zorglub committed
239

gbazin's avatar
   
gbazin committed
240
241
242
243
244
245
    /* Creation of the menu bar */
    CreateOurMenuBar();

    /* Creation of the tool bar */
    CreateOurToolBar();

zorglub's avatar
zorglub committed
246
    /* Create the extra panel */
gbazin's avatar
gbazin committed
247
    CreateOurExtendedPanel();
zorglub's avatar
zorglub committed
248
249
250
    frame_sizer->Add( extra_frame, 0, wxEXPAND , 0 );
    frame_sizer->Hide( extra_frame );

251
    /* Creation of the status bar
gbazin's avatar
   
gbazin committed
252
253
     * Helptext for menu items and toolbar tools will automatically get
     * displayed here. */
gbazin's avatar
   
gbazin committed
254
255
256
257
258
    int i_status_width[3] = {-6, -2, -9};
    statusbar = CreateStatusBar( 3 );                            /* 2 fields */
    statusbar->SetStatusWidths( 3, i_status_width );
    statusbar->SetStatusText( wxString::Format(wxT("x%.2f"), 1.0), 1 );

gbazin's avatar
gbazin committed
259
260
261
262
263
264
265
    /* Video window */
    if( config_GetInt( p_intf, "wxwin-embed" ) )
    {
        VideoWindow( p_intf, this );
        frame_sizer->Add( p_intf->p_sys->p_video_sizer, 1, wxEXPAND , 0 );
    }

266
267
268
269
270
271
272
273
    /* Creation of the slider sub-window */
    CreateOurSlider();
    frame_sizer->Add( slider_frame, 0, wxEXPAND , 0 );
    frame_sizer->Hide( slider_frame );

    /* Make sure we've got the right background colour */
    SetBackgroundColour( slider_frame->GetBackgroundColour() );

gbazin's avatar
   
gbazin committed
274
275
    /* Layout everything */
    frame_sizer->Layout();
gbazin's avatar
   
gbazin committed
276
    frame_sizer->Fit(this);
gbazin's avatar
   
gbazin committed
277

278
#if wxUSE_DRAG_AND_DROP
gbazin's avatar
   
gbazin committed
279
280
    /* Associate drop targets with the main interface */
    SetDropTarget( new DragAndDrop( p_intf ) );
gbazin's avatar
   
gbazin committed
281
#endif
282

283
    SetupHotkeys();
gbazin's avatar
   
gbazin committed
284
285
286

    /* Start timer */
    timer = new Timer( p_intf, this );
gbazin's avatar
   
gbazin committed
287
288
289
290
}

Interface::~Interface()
{
gbazin's avatar
   
gbazin committed
291
292
293
294
    if( p_intf->p_sys->p_wxwindow )
    {
        delete p_intf->p_sys->p_wxwindow;
    }
gbazin's avatar
   
gbazin committed
295

gbazin's avatar
   
gbazin committed
296
    /* Clean up */
gbazin's avatar
   
gbazin committed
297
    delete timer;
gbazin's avatar
   
gbazin committed
298
}
gbazin's avatar
   
gbazin committed
299

300
301
302
303
304
305
void Interface::Update()
{
    /* Misc updates */
    ((wxVolCtrl *)volctrl)->UpdateVolume();
}

306
void Interface::OnControlEvent( wxCommandEvent& event )
gbazin's avatar
gbazin committed
307
{
308
309
310
311
312
313
314
315
316
317
318
319
320
321
    switch( event.GetId() )
    {
    case 0:
        frame_sizer->Layout();
        frame_sizer->Fit(this);
        break;

    case 1:
        long i_style = GetWindowStyle();
        if( event.GetInt() ) i_style |= wxSTAY_ON_TOP;
        else i_style &= ~wxSTAY_ON_TOP;
        SetWindowStyle( i_style );
        break;
    }
gbazin's avatar
gbazin committed
322
323
}

gbazin's avatar
   
gbazin committed
324
325
326
327
328
329
/*****************************************************************************
 * Private methods.
 *****************************************************************************/
void Interface::CreateOurMenuBar()
{
    /* Create the "File" menu */
gbazin's avatar
   
gbazin committed
330
    wxMenu *file_menu = new wxMenu;
331
    file_menu->Append( OpenFileSimple_Event,
gbazin's avatar
gbazin committed
332
                       wxU(_("Quick &Open File...\tCtrl-O")) );
zorglub's avatar
zorglub committed
333
334

    file_menu->AppendSeparator();
gbazin's avatar
gbazin committed
335
336
    file_menu->Append( OpenFile_Event, wxU(_("Open &File...\tCtrl-F")) );
    file_menu->Append( OpenDisc_Event, wxU(_("Open &Disc...\tCtrl-D")) );
337
    file_menu->Append( OpenNet_Event,
gbazin's avatar
gbazin committed
338
339
340
                       wxU(_("Open &Network Stream...\tCtrl-N")) );
    file_menu->Append( OpenCapture_Event,
                       wxU(_("Open &Capture Device...\tCtrl-C")) );
zorglub's avatar
zorglub committed
341

gbazin's avatar
   
gbazin committed
342
    file_menu->AppendSeparator();
343
    file_menu->Append( Wizard_Event, wxU(_("&Wizard...\tCtrl-W")) );
344
    file_menu->Append( StreamWizard_Event,
345
                       wxU(_("Old streaming Wizard...")) );
gbazin's avatar
   
gbazin committed
346
    file_menu->AppendSeparator();
gbazin's avatar
gbazin committed
347
    file_menu->Append( Exit_Event, wxU(_("E&xit\tCtrl-X")) );
gbazin's avatar
   
gbazin committed
348

gbazin's avatar
   
gbazin committed
349
    /* Create the "View" menu */
gbazin's avatar
   
gbazin committed
350
    wxMenu *view_menu = new wxMenu;
gbazin's avatar
gbazin committed
351
352
    view_menu->Append( Playlist_Event, wxU(_("&Playlist...\tCtrl-P")) );
    view_menu->Append( Logs_Event, wxU(_("&Messages...\tCtrl-M")) );
353
    view_menu->Append( FileInfo_Event,
gbazin's avatar
gbazin committed
354
                       wxU(_("Stream and Media &info...\tCtrl-I")) );
gbazin's avatar
   
gbazin committed
355

356
357
358
359
360
    /* Create the "Auto-generated" menus */
    p_settings_menu = SettingsMenu( p_intf, this );
    p_audio_menu = AudioMenu( p_intf, this );
    p_video_menu = VideoMenu( p_intf, this );
    p_navig_menu = NavigMenu( p_intf, this );
gbazin's avatar
   
gbazin committed
361

gbazin's avatar
   
gbazin committed
362
    /* Create the "Help" menu */
gbazin's avatar
   
gbazin committed
363
    wxMenu *help_menu = new wxMenu;
gbazin's avatar
gbazin committed
364
    help_menu->Append( About_Event, wxU(_("About VLC media player")) );
gbazin's avatar
   
gbazin committed
365
366
367

    /* Append the freshly created menus to the menu bar... */
    wxMenuBar *menubar = new wxMenuBar( wxMB_DOCKABLE );
gbazin's avatar
   
gbazin committed
368
369
    menubar->Append( file_menu, wxU(_("&File")) );
    menubar->Append( view_menu, wxU(_("&View")) );
gbazin's avatar
   
gbazin committed
370
    menubar->Append( p_settings_menu, wxU(_("&Settings")) );
gbazin's avatar
   
gbazin committed
371
372
    menubar->Append( p_audio_menu, wxU(_("&Audio")) );
    menubar->Append( p_video_menu, wxU(_("&Video")) );
gbazin's avatar
   
gbazin committed
373
    menubar->Append( p_navig_menu, wxU(_("&Navigation")) );
gbazin's avatar
   
gbazin committed
374
    menubar->Append( help_menu, wxU(_("&Help")) );
gbazin's avatar
   
gbazin committed
375
376
377
378

    /* Attach the menu bar to the frame */
    SetMenuBar( menubar );

379
380
    /* Find out size of menu bar */
    int i_size = 0;
381
    for( unsigned int i = 0; i < menubar->GetMenuCount(); i++ )
382
383
384
    {
        int i_width, i_height;
        menubar->GetTextExtent( menubar->GetLabelTop(i), &i_width, &i_height );
385
386
        i_size += i_width +
#if defined(__WXGTK__)
387
            22 /* approximate margin */;
388
389
390
#else
            4 /* approximate margin */;
#endif
391
392
393
    }
    frame_sizer->SetMinSize( i_size, -1 );

gbazin's avatar
   
gbazin committed
394
395
396
    /* Intercept all menu events in our custom event handler */
    PushEventHandler( new MenuEvtHandler( p_intf, this ) );

397
#if wxUSE_DRAG_AND_DROP
gbazin's avatar
   
gbazin committed
398
399
    /* Associate drop targets with the menubar */
    menubar->SetDropTarget( new DragAndDrop( p_intf ) );
gbazin's avatar
   
gbazin committed
400
#endif
gbazin's avatar
   
gbazin committed
401
402
}

403
404
405
406
407
408
409
410
411
412
class VLCVolCtrl : public wxControl
{
public:
    VLCVolCtrl( intf_thread_t *p_intf, wxWindow *p_parent, wxGauge ** );
    virtual ~VLCVolCtrl() {};

    virtual void OnPaint( wxPaintEvent &event );

  private:
    DECLARE_EVENT_TABLE()
413
    int i_y_offset;
414
415
416
417
418
419
};

BEGIN_EVENT_TABLE(VLCVolCtrl, wxControl)
   EVT_PAINT(VLCVolCtrl::OnPaint)
END_EVENT_TABLE()

420
421
422
423
424
#if defined(__WXGTK__)
#define VLCVOL_HEIGHT p_parent->GetSize().GetHeight()
#else
#define VLCVOL_HEIGHT TOOLBAR_BMP_HEIGHT
#endif
425
426
VLCVolCtrl::VLCVolCtrl( intf_thread_t *p_intf, wxWindow *p_parent,
                        wxGauge **pp_volctrl )
427
428
429
  :wxControl( p_parent, -1, wxDefaultPosition, wxSize(64, VLCVOL_HEIGHT ),
              wxBORDER_NONE ),
   i_y_offset((VLCVOL_HEIGHT - TOOLBAR_BMP_HEIGHT) / 2)
430
{
431
432
    *pp_volctrl = new wxVolCtrl( p_intf, this, -1, wxPoint( 18, i_y_offset ),
                                 wxSize( 44, TOOLBAR_BMP_HEIGHT ) );
433
434
435
436
437
438
}

void VLCVolCtrl::OnPaint( wxPaintEvent &evt )
{
    wxPaintDC dc( this );
    wxBitmap mPlayBitmap( speaker_xpm );
439
    dc.DrawBitmap( mPlayBitmap, 0, i_y_offset, TRUE );
440
441
}

gbazin's avatar
   
gbazin committed
442
443
void Interface::CreateOurToolBar()
{
444
#define HELP_OPEN N_("Open")
hartman's avatar
hartman committed
445
446
447
448
#define HELP_STOP N_("Stop")
#define HELP_PLAY N_("Play")
#define HELP_PAUSE N_("Pause")
#define HELP_PLO N_("Playlist")
gbazin's avatar
   
gbazin committed
449
450
#define HELP_PLP N_("Previous playlist item")
#define HELP_PLN N_("Next playlist item")
gbazin's avatar
   
gbazin committed
451
452
#define HELP_SLOW N_("Play slower")
#define HELP_FAST N_("Play faster")
gbazin's avatar
   
gbazin committed
453

gbazin's avatar
   
gbazin committed
454
455
    wxLogNull LogDummy; /* Hack to suppress annoying log message on the win32
                         * version because we don't include wx.rc */
gbazin's avatar
   
gbazin committed
456

457
458
    wxToolBar *toolbar =
        CreateToolBar( wxTB_HORIZONTAL | wxTB_FLAT | wxTB_DOCKABLE );
gbazin's avatar
   
gbazin committed
459

gbazin's avatar
   
gbazin committed
460
461
    toolbar->SetToolBitmapSize( wxSize(TOOLBAR_BMP_WIDTH,TOOLBAR_BMP_HEIGHT) );

462
463
464
    toolbar->AddTool( OpenFile_Event, wxT(""),
                      wxBitmap( eject_xpm ), wxU(_(HELP_OPEN)) );
    toolbar->AddSeparator();
gbazin's avatar
   
gbazin committed
465
    toolbar->AddTool( PlayStream_Event, wxT(""), wxBitmap( play_xpm ),
gbazin's avatar
   
gbazin committed
466
                      wxU(_(HELP_PLAY)) );
467
468
469
470
471
472
#if 0
    toolbar->AddTool( PlayStream_Event, wxT(""), wxBitmap( pause_xpm ),
                      wxU(_(HELP_PAUSE)) );
#endif
    toolbar->AddTool( StopStream_Event, wxT(""), wxBitmap( stop_xpm ),
                      wxU(_(HELP_STOP)) );
gbazin's avatar
   
gbazin committed
473
    toolbar->AddSeparator();
gbazin's avatar
   
gbazin committed
474
    toolbar->AddTool( PrevStream_Event, wxT(""),
475
476
477
478
479
                      wxBitmap( prev_xpm ), wxU(_(HELP_PLP)) );
    toolbar->AddTool( SlowStream_Event, wxT(""),
                      wxBitmap( slow_xpm ), wxU(_(HELP_SLOW)) );
    toolbar->AddTool( FastStream_Event, wxT(""),
                      wxBitmap( fast_xpm ), wxU(_(HELP_FAST)) );
gbazin's avatar
   
gbazin committed
480
    toolbar->AddTool( NextStream_Event, wxT(""), wxBitmap( next_xpm ),
gbazin's avatar
   
gbazin committed
481
                      wxU(_(HELP_PLN)) );
482
    toolbar->AddSeparator();
483
    toolbar->AddTool( Playlist_Event, wxT(""), wxBitmap( playlist_xpm ),
484
                      wxU(_(HELP_PLO)) );
gbazin's avatar
   
gbazin committed
485

486
    wxControl *p_dummy_ctrl =
487
        new wxControl( toolbar, -1, wxDefaultPosition,
488
                       wxSize(35, 16 ), wxBORDER_NONE );
489

490
    toolbar->AddControl( p_dummy_ctrl );
gbazin's avatar
   
gbazin committed
491

492
493
494
495
    VLCVolCtrl *sound_control = new VLCVolCtrl( p_intf, toolbar, &volctrl );
    toolbar->AddControl( sound_control );

    toolbar->Realize();
gbazin's avatar
   
gbazin committed
496

497
#if wxUSE_DRAG_AND_DROP
gbazin's avatar
   
gbazin committed
498
499
    /* Associate drop targets with the toolbar */
    toolbar->SetDropTarget( new DragAndDrop( p_intf ) );
gbazin's avatar
   
gbazin committed
500
#endif
gbazin's avatar
   
gbazin committed
501
502
}

gbazin's avatar
   
gbazin committed
503
void Interface::CreateOurSlider()
gbazin's avatar
   
gbazin committed
504
{
gbazin's avatar
   
gbazin committed
505
    /* Create a new frame and sizer containing the slider */
gbazin's avatar
   
gbazin committed
506
    slider_frame = new wxPanel( this, -1, wxDefaultPosition, wxDefaultSize );
gbazin's avatar
   
gbazin committed
507
    slider_frame->SetAutoLayout( TRUE );
508
509
    wxBoxSizer *frame_sizer = new wxBoxSizer( wxHORIZONTAL );
    //frame_sizer->SetMinSize( -1, 50 );
gbazin's avatar
   
gbazin committed
510
511
512
513

    /* Create slider */
    slider = new wxSlider( slider_frame, SliderScroll_Event, 0, 0,
                           SLIDER_MAX_POS, wxDefaultPosition, wxDefaultSize );
gbazin's avatar
   
gbazin committed
514
515

    /* Add everything to the frame */
516
    frame_sizer->Add( slider, 1, wxEXPAND | wxALL, 5 );
gbazin's avatar
   
gbazin committed
517
518
519
    slider_frame->SetSizer( frame_sizer );
    frame_sizer->Layout();
    frame_sizer->SetSizeHints(slider_frame);
gbazin's avatar
   
gbazin committed
520
521
522

    /* Hide the slider by default */
    slider_frame->Hide();
gbazin's avatar
   
gbazin committed
523
524
}

zorglub's avatar
zorglub committed
525

gbazin's avatar
gbazin committed
526
void Interface::CreateOurExtendedPanel()
zorglub's avatar
zorglub committed
527
528
529
530
531
532
533
534
{
    char *psz_filters;

    extra_frame = new wxPanel( this, -1, wxDefaultPosition, wxDefaultSize );
    extra_frame->SetAutoLayout( TRUE );
    wxBoxSizer *extra_sizer = new wxBoxSizer( wxHORIZONTAL );

    /* Create static box to surround the adjust controls */
zorglub's avatar
zorglub committed
535
    wxStaticBox *adjust_box =
hartman's avatar
hartman committed
536
           new wxStaticBox( extra_frame, -1, wxU(_("Adjust Image")) );
zorglub's avatar
zorglub committed
537
538
539
540
541

    /* Create the size for the frame */
    wxStaticBoxSizer *adjust_sizer =
        new wxStaticBoxSizer( adjust_box, wxVERTICAL );
    adjust_sizer->SetMinSize( -1, 50 );
542
543
544
545
546
    
    /* Create flex grid */
    wxFlexGridSizer *adjust_gridsizer =
        new wxFlexGridSizer( 6, 2, 0, 0);
    adjust_gridsizer->AddGrowableCol(1);
zorglub's avatar
zorglub committed
547
548
549
550
551
552
553

    /* Create every controls */

    /* Create the adjust button */
    wxCheckBox * adjust_check = new wxCheckBox( extra_frame, Adjust_Event,
                                                 wxU(_("Enable")));

554
555
556
557
    /* Create the restore to defaults button */
    restoredefaults_button = 
        new wxButton( extra_frame, RestoreDefaults_Event,
        wxU(_("Restore Defaults")), wxDefaultPosition);
zorglub's avatar
zorglub committed
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579

    wxStaticText *hue_text = new wxStaticText( extra_frame, -1,
                                       wxU(_("Hue")) );
    hue_slider = new wxSlider ( extra_frame, Hue_Event, 0, 0,
                                360, wxDefaultPosition, wxDefaultSize );


    wxStaticText *contrast_text = new wxStaticText( extra_frame, -1,
                                       wxU(_("Contrast")) );
    contrast_slider = new wxSlider ( extra_frame, Contrast_Event, 0, 0,
                                200, wxDefaultPosition, wxDefaultSize);

    wxStaticText *brightness_text = new wxStaticText( extra_frame, -1,
                                       wxU(_("Brightness")) );
    brightness_slider = new wxSlider ( extra_frame, Brightness_Event, 0, 0,
                           200, wxDefaultPosition, wxDefaultSize) ;

    wxStaticText *saturation_text = new wxStaticText( extra_frame, -1,
                                          wxU(_("Saturation")) );
    saturation_slider = new wxSlider ( extra_frame, Saturation_Event, 0, 0,
                           300, wxDefaultPosition, wxDefaultSize );

580
581
582
583
    wxStaticText *gamma_text = new wxStaticText( extra_frame, -1,
                                          wxU(_("Gamma")) );
    gamma_slider = new wxSlider ( extra_frame, Gamma_Event, 0, 0,
                           100, wxDefaultPosition, wxDefaultSize );
zorglub's avatar
zorglub committed
584

585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
    adjust_gridsizer->Add(adjust_check, 1, wxEXPAND, 0);
    adjust_gridsizer->Add(restoredefaults_button, 1, wxEXPAND, 0);
    adjust_gridsizer->Add(hue_text, 1, wxEXPAND, 0);
    adjust_gridsizer->Add(hue_slider, 1, wxEXPAND, 0);
    adjust_gridsizer->Add(contrast_text, 1, wxEXPAND, 0);
    adjust_gridsizer->Add(contrast_slider, 1, wxEXPAND, 0);
    adjust_gridsizer->Add(brightness_text, 1, wxEXPAND, 0);
    adjust_gridsizer->Add(brightness_slider, 1, wxEXPAND, 0);
    adjust_gridsizer->Add(saturation_text, 1, wxEXPAND, 0);
    adjust_gridsizer->Add(saturation_slider, 1, wxEXPAND, 0);
    adjust_gridsizer->Add(gamma_text, 1, wxEXPAND, 0);
    adjust_gridsizer->Add(gamma_slider, 1, wxEXPAND, 0);
    
    adjust_sizer->Add(adjust_gridsizer,1,wxEXPAND, 0);
    
zorglub's avatar
zorglub committed
600
601
    extra_sizer->Add(adjust_sizer,1,wxBOTTOM,5);

zorglub's avatar
zorglub committed
602
603
604
    /* Create sizer to surround the other controls */
    wxBoxSizer *other_sizer = new wxBoxSizer( wxVERTICAL );

zorglub's avatar
zorglub committed
605

zorglub's avatar
zorglub committed
606
607
    wxStaticBox *video_box =
            new wxStaticBox( extra_frame, -1, wxU(_("Video Options")) );
zorglub's avatar
zorglub committed
608
    /* Create the sizer for the frame */
zorglub's avatar
zorglub committed
609
610
611
    wxStaticBoxSizer *video_sizer =
       new wxStaticBoxSizer( video_box, wxVERTICAL );
    video_sizer->SetMinSize( -1, 50 );
zorglub's avatar
zorglub committed
612
613
614
615
616
617
618
619
620

    static const wxString ratio_array[] =
    {
        wxT("4:3"),
        wxT("16:9"),
    };

    wxBoxSizer *ratio_sizer = new wxBoxSizer( wxHORIZONTAL );
    wxStaticText *ratio_text = new wxStaticText( extra_frame, -1,
hartman's avatar
hartman committed
621
                                          wxU(_("Aspect Ratio")) );
zorglub's avatar
zorglub committed
622
623
624
625
626
627
628
629
630
631

    ratio_combo = new wxComboBox( extra_frame, Ratio_Event, wxT(""),
                                  wxDefaultPosition, wxSize(120,-1),
                                  WXSIZEOF(ratio_array), ratio_array,
                                  0 );

    ratio_sizer->Add( ratio_text, 0, wxALL, 2 );
    ratio_sizer->Add( ratio_combo, 0, wxALL, 2 );
    ratio_sizer->Layout();

zorglub's avatar
zorglub committed
632
633
634
    video_sizer->Add( ratio_sizer  , 0 , wxALL , 0 );
    video_sizer->Layout();

gbazin's avatar
   
gbazin committed
635
#if 0
zorglub's avatar
zorglub committed
636
637
638
    wxBoxSizer *visual_sizer = new wxBoxSizer( wxHORIZONTAL );

    wxCheckBox *visual_checkbox = new wxCheckBox( extra_frame, Visual_Event,
639
                                            wxU(_("Visualizations")) );
zorglub's avatar
zorglub committed
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654

    visual_sizer->Add( visual_checkbox, 0, wxEXPAND, 0);
    visual_sizer->Layout();

    wxStaticBox *audio_box =
              new wxStaticBox( extra_frame, -1, wxU(_("Audio Options")) );
    /* Create the sizer for the frame */
    wxStaticBoxSizer *audio_sizer =
        new wxStaticBoxSizer( audio_box, wxVERTICAL );
    audio_sizer->SetMinSize( -1, 50 );

    audio_sizer->Add( visual_sizer, 0, wxALL, 0);
    audio_sizer->Layout();

    other_sizer->Add( audio_sizer , 0 , wxALL | wxEXPAND , 0 );
gbazin's avatar
   
gbazin committed
655
656
#endif
    other_sizer->Add( video_sizer, 0, wxALL | wxEXPAND , 0);
zorglub's avatar
zorglub committed
657
    other_sizer->Layout();
zorglub's avatar
zorglub committed
658
659
660
661
662
663
664
665
666
667
668

    extra_sizer->Add(other_sizer,0,wxBOTTOM,5);

    extra_frame->SetSizer( extra_sizer );

    /* Layout the whole panel */
    extra_sizer->Layout();

    extra_sizer->SetSizeHints(extra_frame);

    /* Write down initial values */
669
#if 0
gbazin's avatar
   
gbazin committed
670
671
    psz_filters = config_GetPsz( p_intf, "audio-filter" );
    if( psz_filters && strstr( psz_filters, "visual" ) )
zorglub's avatar
zorglub committed
672
673
674
    {
        visual_checkbox->SetValue(1);
    }
gbazin's avatar
   
gbazin committed
675
    if( psz_filters ) free( psz_filters );
676
#endif
zorglub's avatar
zorglub committed
677
    psz_filters = config_GetPsz( p_intf, "filter" );
gbazin's avatar
   
gbazin committed
678
    if( psz_filters && strstr( psz_filters, "adjust" ) )
zorglub's avatar
zorglub committed
679
680
    {
        adjust_check->SetValue( 1 );
681
        restoredefaults_button->Enable();
zorglub's avatar
zorglub committed
682
683
684
685
        saturation_slider->Enable();
        contrast_slider->Enable();
        brightness_slider->Enable();
        hue_slider->Enable();
686
        gamma_slider->Enable();
zorglub's avatar
zorglub committed
687
688
689
690
    }
    else
    {
        adjust_check->SetValue( 0 );
691
        restoredefaults_button->Disable();
zorglub's avatar
zorglub committed
692
693
694
695
        saturation_slider->Disable();
        contrast_slider->Disable();
        brightness_slider->Disable();
        hue_slider->Disable();
696
        gamma_slider->Disable();
zorglub's avatar
zorglub committed
697
    }
gbazin's avatar
   
gbazin committed
698
    if( psz_filters ) free( psz_filters );
zorglub's avatar
zorglub committed
699

700
701
702
703
704
705
    int i_value = config_GetInt( p_intf, "hue" );
    if( i_value > 0 && i_value < 360 )
        hue_slider->SetValue( i_value );

    float f_value;
    f_value = config_GetFloat( p_intf, "saturation" );
706
    if( f_value > 0 && f_value < 5 )
707
708
        saturation_slider->SetValue( (int)(100 * f_value) );
    f_value = config_GetFloat( p_intf, "contrast" );
709
    if( f_value > 0 && f_value < 4 )
710
711
712
713
        contrast_slider->SetValue( (int)(100 * f_value) );
    f_value = config_GetFloat( p_intf, "brightness" );
    if( f_value > 0 && f_value < 2 )
        brightness_slider->SetValue( (int)(100 * f_value) );
714
    f_value = config_GetFloat( p_intf, "gamma" );
hartman's avatar
hartman committed
715
    if( f_value > 0 && f_value < 10 )
716
        gamma_slider->SetValue( (int)(10 * f_value) );
717

zorglub's avatar
zorglub committed
718
719
720
    extra_frame->Hide();
}

721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
static int ConvertHotkeyModifiers( int i_hotkey )
{
    int i_accel_flags = 0;
    if( i_hotkey & KEY_MODIFIER_ALT ) i_accel_flags |= wxACCEL_ALT;
    if( i_hotkey & KEY_MODIFIER_CTRL ) i_accel_flags |= wxACCEL_CTRL;
    if( i_hotkey & KEY_MODIFIER_SHIFT ) i_accel_flags |= wxACCEL_SHIFT;
    if( !i_accel_flags ) i_accel_flags = wxACCEL_NORMAL;
    return i_accel_flags;
}

static int ConvertHotkey( int i_hotkey )
{
    int i_key = i_hotkey & ~KEY_MODIFIER;
    if( i_key & KEY_ASCII ) return i_key & KEY_ASCII;
    else if( i_key & KEY_SPECIAL )
    {
        switch ( i_key )
        {
        case KEY_LEFT: return WXK_LEFT;
        case KEY_RIGHT: return WXK_RIGHT;
        case KEY_UP: return WXK_UP;
        case KEY_DOWN: return WXK_DOWN;
        case KEY_SPACE: return WXK_SPACE;
        case KEY_ENTER: return WXK_RETURN;
        case KEY_F1: return WXK_F1;
        case KEY_F2: return WXK_F2;
        case KEY_F3: return WXK_F3;
        case KEY_F4: return WXK_F4;
        case KEY_F5: return WXK_F5;
        case KEY_F6: return WXK_F6;
        case KEY_F7: return WXK_F7;
        case KEY_F8: return WXK_F8;
        case KEY_F9: return WXK_F9;
        case KEY_F10: return WXK_F10;
        case KEY_F11: return WXK_F11;
        case KEY_F12: return WXK_F12;
        case KEY_HOME: return WXK_HOME;
        case KEY_END: return WXK_HOME;
        case KEY_MENU: return WXK_MENU;
        case KEY_ESC: return WXK_ESCAPE;
        case KEY_PAGEUP: return WXK_PRIOR;
        case KEY_PAGEDOWN: return WXK_NEXT;
        case KEY_TAB: return WXK_TAB;
        case KEY_BACKSPACE: return WXK_BACK;
        }
    }
    return WXK_F24;
}

770
void Interface::SetupHotkeys()
771
{
772
773
    struct vlc_t::hotkey *p_hotkeys = p_intf->p_vlc->p_hotkeys;
    int i_hotkeys;
774

775
776
777
778
779
780
781
782
783
    /* Count number of hoteys */
    for( i_hotkeys = 0; p_hotkeys[i_hotkeys].psz_action != NULL; i_hotkeys++ );

    p_intf->p_sys->i_first_hotkey_event = wxID_HIGHEST + 7000;
    p_intf->p_sys->i_hotkeys = i_hotkeys;

    wxAcceleratorEntry p_entries[i_hotkeys];

    /* Setup the hotkeys as accelerators */
784
    for( int i = 0; i < i_hotkeys; i++ )
785
786
787
788
789
    {
        p_entries[i].Set( ConvertHotkeyModifiers( p_hotkeys[i].i_key ),
                          ConvertHotkey( p_hotkeys[i].i_key ),
                          p_intf->p_sys->i_first_hotkey_event + i );
    }
zorglub's avatar
zorglub committed
790

791
    wxAcceleratorTable accel( i_hotkeys, p_entries );
zorglub's avatar
zorglub committed
792

793
794
795
796
797
798
799
800
801
    if( !accel.Ok() )
    {
        msg_Err( p_intf, "invalid accelerator table" );
    }
    else
    {
        SetAcceleratorTable( accel );
        msg_Dbg( p_intf, "accelerator table loaded" );
    }
802
803
}

gbazin's avatar
   
gbazin committed
804
/*****************************************************************************
gbazin's avatar
   
gbazin committed
805
 * Event Handlers.
gbazin's avatar
   
gbazin committed
806
 *****************************************************************************/
gbazin's avatar
   
gbazin committed
807

gbazin's avatar
   
gbazin committed
808
809
void Interface::OnMenuOpen(wxMenuEvent& event)
{
810
811
#if defined( __WXMSW__ )
#   define GetEventObject GetMenu
812
#endif
813
814

    if( event.GetEventObject() == p_settings_menu )
gbazin's avatar
   
gbazin committed
815
    {
816
817
818
819
        p_settings_menu = SettingsMenu( p_intf, this, p_settings_menu );

        /* Add static items */
        p_settings_menu->AppendCheckItem( Extended_Event,
gbazin's avatar
gbazin committed
820
            wxU(_("&Extended GUI") ) );
821
        if( b_extra ) p_settings_menu->Check( Extended_Event, TRUE );
822
        p_settings_menu->AppendCheckItem( Bookmarks_Event,
gbazin's avatar
gbazin committed
823
824
            wxU(_("&Bookmarks...") ) );
        p_settings_menu->Append( Prefs_Event, wxU(_("&Preferences...")) );
gbazin's avatar
   
gbazin committed
825
    }
826

gbazin's avatar
   
gbazin committed
827
    else if( event.GetEventObject() == p_audio_menu )
gbazin's avatar
   
gbazin committed
828
    {
829
        p_audio_menu = AudioMenu( p_intf, this, p_audio_menu );
gbazin's avatar
   
gbazin committed
830
    }
831

gbazin's avatar
   
gbazin committed
832
833
    else if( event.GetEventObject() == p_video_menu )
    {
834
        p_video_menu = VideoMenu( p_intf, this, p_video_menu );
gbazin's avatar
   
gbazin committed
835
    }
836

gbazin's avatar
   
gbazin committed
837
838
    else if( event.GetEventObject() == p_navig_menu )
    {
839
        p_navig_menu = NavigMenu( p_intf, this, p_navig_menu );
gbazin's avatar
   
gbazin committed
840
    }
841
842
843
844

#if defined( __WXMSW__ )
#   undef GetEventObject
#endif
gbazin's avatar
   
gbazin committed
845
846
}

gbazin's avatar
   
gbazin committed
847
#if defined( __WXMSW__ ) || defined( __WXMAC__ )
gbazin's avatar
   
gbazin committed
848
void Interface::OnContextMenu2(wxContextMenuEvent& event)
gbazin's avatar
   
gbazin committed
849
{
gbazin's avatar
   
gbazin committed
850
851
852
853
854
855
856
    /* Only show the context menu for the main interface */
    if( GetId() != event.GetId() )
    {
        event.Skip();
        return;
    }

gbazin's avatar
   
gbazin committed
857
    if( p_intf->p_sys->pf_show_dialog )
858
        p_intf->p_sys->pf_show_dialog( p_intf, INTF_DIALOG_POPUPMENU, 1, 0 );
gbazin's avatar
   
gbazin committed
859
}
gbazin's avatar
   
gbazin committed
860
#endif
gbazin's avatar
   
gbazin committed
861
862
void Interface::OnContextMenu(wxMouseEvent& event)
{
gbazin's avatar
   
gbazin committed
863
    if( p_intf->p_sys->pf_show_dialog )
864
        p_intf->p_sys->pf_show_dialog( p_intf, INTF_DIALOG_POPUPMENU, 1, 0 );
gbazin's avatar
   
gbazin committed
865
}
gbazin's avatar
   
gbazin committed
866

gbazin's avatar
   
gbazin committed
867
868
869
870
871
872
873
874
875
void Interface::OnExit( wxCommandEvent& WXUNUSED(event) )
{
    /* TRUE is to force the frame to close. */
    Close(TRUE);
}

void Interface::OnAbout( wxCommandEvent& WXUNUSED(event) )
{
    wxString msg;
876
    msg.Printf( wxString(wxT("VLC media player " VERSION)) +
gbazin's avatar
   
gbazin committed
877
        wxU(_(" (wxWindows interface)\n\n")) +
hartman's avatar
hartman committed
878
        wxU(_("(c) 1996-2004 - the VideoLAN Team\n\n")) +
zorglub's avatar
zorglub committed
879
        wxU( vlc_wraptext(INTF_ABOUT_MSG,WRAPCOUNT,ISUTF8) ) + wxT("\n\n") +
gbazin's avatar
   
gbazin committed
880
        wxU(_("The VideoLAN team <videolan@videolan.org>\n"
gbazin's avatar
   
gbazin committed
881
              "http://www.videolan.org/\n\n")) );
gbazin's avatar
   
gbazin committed
882

gbazin's avatar
   
gbazin committed
883
884
    wxMessageBox( msg, wxString::Format(wxU(_("About %s")),
                  wxT("VLC media player")), wxOK | wxICON_INFORMATION, this );
gbazin's avatar
   
gbazin committed
885
886
}

gbazin's avatar
   
gbazin committed
887
void Interface::OnShowDialog( wxCommandEvent& event )
gbazin's avatar
   
gbazin committed
888
{
gbazin's avatar
   
gbazin committed
889
    if( p_intf->p_sys->pf_show_dialog )
gbazin's avatar
   
gbazin committed
890
    {
gbazin's avatar
   
gbazin committed
891
        int i_id;
gbazin's avatar
   
gbazin committed
892

gbazin's avatar
   
gbazin committed
893
894
895
896
897
        switch( event.GetId() )
        {
        case OpenFileSimple_Event:
            i_id = INTF_DIALOG_FILE_SIMPLE;
            break;
zorglub's avatar
zorglub committed
898
899
        case OpenAdv_Event:
            i_id = INTF_DIALOG_FILE;
gbazin's avatar
   
gbazin committed
900
901
902
903
904
905
906
907
908
        case OpenFile_Event:
            i_id = INTF_DIALOG_FILE;
            break;
        case OpenDisc_Event:
            i_id = INTF_DIALOG_DISC;
            break;
        case OpenNet_Event:
            i_id = INTF_DIALOG_NET;
            break;
gbazin's avatar
gbazin committed
909
910
911
        case OpenCapture_Event:
            i_id = INTF_DIALOG_CAPTURE;
            break;
gbazin's avatar
   
gbazin committed
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
        case OpenSat_Event:
            i_id = INTF_DIALOG_SAT;
            break;
        case Playlist_Event:
            i_id = INTF_DIALOG_PLAYLIST;
            break;
        case Logs_Event:
            i_id = INTF_DIALOG_MESSAGES;
            break;
        case FileInfo_Event:
            i_id = INTF_DIALOG_FILEINFO;
            break;
        case Prefs_Event:
            i_id = INTF_DIALOG_PREFS;
            break;
gbazin's avatar
   
gbazin committed
927
928
929
        case StreamWizard_Event:
            i_id = INTF_DIALOG_STREAMWIZARD;
            break;
930
931
932
        case Wizard_Event:
            i_id = INTF_DIALOG_WIZARD;
            break;
gbazin's avatar
gbazin committed
933
934
935
        case Bookmarks_Event:
            i_id = INTF_DIALOG_BOOKMARKS;
            break;
gbazin's avatar
   
gbazin committed
936
937
938
939
        default:
            i_id = INTF_DIALOG_FILE;
            break;
        }
gbazin's avatar
   
gbazin committed
940

gbazin's avatar
   
gbazin committed
941
        p_intf->p_sys->pf_show_dialog( p_intf, i_id, 1, 0 );
gbazin's avatar
   
gbazin committed
942
    }
gbazin's avatar
   
gbazin committed
943
944
}

gbazin's avatar
gbazin committed
945
void Interface::OnExtended(wxCommandEvent& event)
zorglub's avatar
zorglub committed
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
{
    if( b_extra == VLC_FALSE)
    {
        extra_frame->Show();
        frame_sizer->Show( extra_frame );
        b_extra = VLC_TRUE;
    }
    else
    {
        extra_frame->Hide();
        frame_sizer->Hide( extra_frame );
        b_extra = VLC_FALSE;
    }
    frame_sizer->Layout();
    frame_sizer->Fit(this);
}

void Interface::OnEnableAdjust(wxCommandEvent& event)
{
    char *psz_filters=config_GetPsz( p_intf, "filter");
    char *psz_new = NULL;
    if( event.IsChecked() )
    {
        if(psz_filters == NULL)
        {
            psz_new = strdup( "adjust" );
        }
        else
        {
            psz_new= (char *) malloc(strlen(psz_filters) + 8 );
            sprintf( psz_new, "%s:adjust", psz_filters);
        }
        config_PutPsz( p_intf, "filter", psz_new );
979
980
981
982
983
984
985
986
987
988
989
        vlc_value_t val;
        vout_thread_t *p_vout =
           (vout_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_VOUT,
                                       FIND_ANYWHERE );
        if( p_vout != NULL )
        {
            val.psz_string = strdup( psz_new );
            var_Set( p_vout, "filter", val);
            vlc_object_release( p_vout );
        }
        if( val.psz_string ) free( val.psz_string );
990
        restoredefaults_button->Enable();
zorglub's avatar
zorglub committed
991
992
993
994
        brightness_slider->Enable();
        saturation_slider->Enable();
        contrast_slider->Enable();
        hue_slider->Enable();
995
        gamma_slider->Enable();
zorglub's avatar
zorglub committed
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
    }
    else
    {
        if( psz_filters != NULL )
        {

            char *psz_current;
            unsigned int i=0;
            for( i = 0; i< strlen(psz_filters ); i++)
            {
                if ( !strncasecmp( &psz_filters[i],"adjust",6 ))
                {
                    if(i > 0)
                        if( psz_filters[i-1] == ':' ) i--;
                    psz_current = strchr( &psz_filters[i+1] , ':' );
                    if( !psz_current )
                        psz_filters[i] = '\0';
                    else
                    {
                       memmove( &psz_filters[i] , psz_current,
                                &psz_filters[strlen(psz_filters)]-psz_current
                                +1);
                    }
                }
            }
            config_PutPsz( p_intf, "filter", psz_filters);
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
            vlc_value_t val;
            val.psz_string = strdup( psz_filters );
            vout_thread_t *p_vout =
               (vout_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_VOUT,
                                       FIND_ANYWHERE );
            if( p_vout != NULL )
            {
                var_Set( p_vout, "filter", val);
                vlc_object_release( p_vout );
            }
            if( val.psz_string ) free( val.psz_string );
zorglub's avatar
zorglub committed
1033
        }
1034
        restoredefaults_button->Disable();
zorglub's avatar
zorglub committed
1035
1036
1037
1038
        brightness_slider->Disable();
        saturation_slider->Disable();
        contrast_slider->Disable();
        hue_slider->Disable();
1039
        gamma_slider->Disable();
zorglub's avatar
zorglub committed
1040
1041
1042
1043
1044
    }
    if(psz_filters) free(psz_filters);
    if(psz_new) free(psz_new);
}

1045
void Interface::OnRestoreDefaults( wxCommandEvent &event)
zorglub's avatar
zorglub committed
1046
{
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
    hue_slider->SetValue(0);
    saturation_slider->SetValue(100);
    brightness_slider->SetValue(100);
    contrast_slider->SetValue(100),
    gamma_slider->SetValue(10);

    wxScrollEvent *hscroll_event = new wxScrollEvent(0, Hue_Event, 0);
    OnAdjustUpdate(*hscroll_event);
    
    wxScrollEvent *sscroll_event = new wxScrollEvent(0, Saturation_Event, 100);
    OnAdjustUpdate(*sscroll_event);
    
    wxScrollEvent *bscroll_event = new wxScrollEvent(0, Brightness_Event, 100);
    OnAdjustUpdate(*bscroll_event);
    
    wxScrollEvent *cscroll_event = new wxScrollEvent(0, Contrast_Event, 100);
    OnAdjustUpdate(*cscroll_event);
    
    wxScrollEvent *gscroll_event = new wxScrollEvent(0, Gamma_Event, 10);
    OnAdjustUpdate(*gscroll_event);
zorglub's avatar
zorglub committed
1067
1068
1069

}

1070
void Interface::OnAdjustUpdate( wxScrollEvent &event)
1071
{
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
    vout_thread_t *p_vout = (vout_thread_t *)vlc_object_find(p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE);
    if(p_vout == NULL)
        switch(event.GetId())
        {
            case Hue_Event: 
                config_PutInt( p_intf , "hue" , event.GetPosition() );
                break;
            
            case Saturation_Event: 
                config_PutFloat( p_intf , "saturation" , (float)event.GetPosition()/100 );
                break;
            
            case Brightness_Event: 
                config_PutFloat( p_intf , "brightness" , (float)event.GetPosition()/100 );
                break;
            
            case Contrast_Event: 
                config_PutFloat( p_intf , "contrast" , (float)event.GetPosition()/100 );
                break;
            
            case Gamma_Event: 
                config_PutFloat( p_intf , "gamma" , (float)event.GetPosition()/10 );
                break;
        }
    else
    {
        vlc_value_t val;
        switch(event.GetId())
        {
            case Hue_Event: 
                val.i_int = event.GetPosition();
                var_Set(p_vout, "hue", val);
                break;
            
            case Saturation_Event:
                val.f_float = (float)event.GetPosition()/100;
                var_Set(p_vout, "saturation", val);
                break;
            
            case Brightness_Event: 
                val.f_float = (float)event.GetPosition()/100;
                var_Set(p_vout, "brightness", val);
                break;
            
            case Contrast_Event: 
                val.f_float = (float)event.GetPosition()/100;
                var_Set(p_vout, "contrast", val);
                break;
            
            case Gamma_Event: 
                val.f_float = (float)event.GetPosition()/10;
                var_Set(p_vout, "gamma", val);
                break;
        }
        vlc_object_release(p_vout);
    }