X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fwxwindows%2Finterface.cpp;h=34c85516bd603ad3efe1f748836dc65af9a0f842;hb=c6edf8d8127367e2a4be94bb6214edf519361216;hp=558381167783a84d7a8a56d795c6f6a66c550550;hpb=4b33c51d7d583e94519f8f8771d7ac01021910e6;p=vlc diff --git a/modules/gui/wxwindows/interface.cpp b/modules/gui/wxwindows/interface.cpp index 5583811677..34c85516bd 100644 --- a/modules/gui/wxwindows/interface.cpp +++ b/modules/gui/wxwindows/interface.cpp @@ -1,10 +1,10 @@ /***************************************************************************** * interface.cpp : wxWindows plugin for vlc ***************************************************************************** - * Copyright (C) 2000-2001 VideoLAN - * $Id: interface.cpp,v 1.67 2003/10/19 22:52:11 sigmunau Exp $ + * Copyright (C) 2000-2004, 2003 VideoLAN + * $Id$ * - * Authors: Gildas Bazin + * Authors: Gildas Bazin * * 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 @@ -24,11 +24,6 @@ /***************************************************************************** * Preamble *****************************************************************************/ -#include /* malloc(), free() */ -#include /* ENOMEM */ -#include /* strerror() */ -#include - #include #include #include @@ -38,23 +33,19 @@ #include "wxwindows.h" /* include the toolbar graphics */ -#include "bitmaps/file.xpm" -#include "bitmaps/disc.xpm" -#include "bitmaps/net.xpm" -#if 0 -#include "bitmaps/sat.xpm" -#endif #include "bitmaps/play.xpm" #include "bitmaps/pause.xpm" #include "bitmaps/stop.xpm" -#include "bitmaps/previous.xpm" +#include "bitmaps/prev.xpm" #include "bitmaps/next.xpm" -#include "bitmaps/playlist.xpm" -#include "bitmaps/fast.xpm" +#include "bitmaps/eject.xpm" #include "bitmaps/slow.xpm" +#include "bitmaps/fast.xpm" +#include "bitmaps/playlist.xpm" +#include "bitmaps/speaker.xpm" -#define TOOLBAR_BMP_WIDTH 36 -#define TOOLBAR_BMP_HEIGHT 36 +#define TOOLBAR_BMP_WIDTH 16 +#define TOOLBAR_BMP_HEIGHT 16 /* include the icon graphic */ #include "../../../share/vlc32x32.xpm" @@ -86,10 +77,11 @@ class wxVolCtrl: public wxGauge { public: /* Constructor */ - wxVolCtrl( intf_thread_t *_p_intf, wxWindow* parent, wxWindowID id ); + wxVolCtrl( intf_thread_t *_p_intf, wxWindow* parent, wxWindowID id, + wxPoint = wxDefaultPosition, wxSize = wxSize( 20, -1 ) ); virtual ~wxVolCtrl() {}; - void Change( int i_volume ); + void UpdateVolume(); void OnChange( wxMouseEvent& event ); @@ -109,24 +101,34 @@ END_EVENT_TABLE() * Event Table. *****************************************************************************/ +DEFINE_LOCAL_EVENT_TYPE( wxEVT_INTF ); + /* IDs for the controls and the menu commands */ enum { /* menu items */ + MenuDummy_Event = wxID_HIGHEST + 1000, Exit_Event = wxID_HIGHEST, OpenFileSimple_Event, + OpenAdv_Event, OpenFile_Event, OpenDisc_Event, OpenNet_Event, + OpenCapture_Event, OpenSat_Event, + OpenOther_Event, EjectDisc_Event, + StreamWizard_Event, + Wizard_Event, + Playlist_Event, Logs_Event, FileInfo_Event, Prefs_Event, - Extra_Event, + Extended_Event, + Bookmarks_Event, Skins_Event, SliderScroll_Event, @@ -138,12 +140,16 @@ enum FastStream_Event, Adjust_Event, + RestoreDefaults_Event, Hue_Event, Contrast_Event, Brightness_Event, Saturation_Event, + Gamma_Event, Ratio_Event, + Visual_Event, + /* 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) */ @@ -162,10 +168,13 @@ BEGIN_EVENT_TABLE(Interface, wxFrame) EVT_MENU_OPEN(Interface::OnMenuOpen) - EVT_MENU( Extra_Event, Interface::OnExtra) - EVT_CHECKBOX( Adjust_Event, Interface::OnEnableAdjust) + EVT_MENU( Extended_Event, Interface::OnExtended) + EVT_MENU( Bookmarks_Event, Interface::OnShowDialog) - EVT_COMBOBOX( Ratio_Event, Interface::OnRatio) + EVT_CHECKBOX( Adjust_Event, Interface::OnEnableAdjust) + EVT_BUTTON( RestoreDefaults_Event, Interface::OnRestoreDefaults) + EVT_TEXT( Ratio_Event, Interface::OnRatio) + EVT_CHECKBOX( Visual_Event, Interface::OnEnableVisual) #if defined( __WXMSW__ ) || defined( __WXMAC__ ) EVT_CONTEXT_MENU(Interface::OnContextMenu2) @@ -174,10 +183,14 @@ BEGIN_EVENT_TABLE(Interface, wxFrame) /* Toolbar events */ EVT_MENU(OpenFileSimple_Event, Interface::OnShowDialog) + EVT_MENU(OpenAdv_Event, Interface::OnShowDialog) EVT_MENU(OpenFile_Event, Interface::OnShowDialog) EVT_MENU(OpenDisc_Event, Interface::OnShowDialog) EVT_MENU(OpenNet_Event, Interface::OnShowDialog) + EVT_MENU(OpenCapture_Event, Interface::OnShowDialog) EVT_MENU(OpenSat_Event, Interface::OnShowDialog) + EVT_MENU(StreamWizard_Event, Interface::OnShowDialog) + EVT_MENU(Wizard_Event, Interface::OnShowDialog) EVT_MENU(StopStream_Event, Interface::OnStopStream) EVT_MENU(PlayStream_Event, Interface::OnPlayStream) EVT_MENU(PrevStream_Event, Interface::OnPrevStream) @@ -187,11 +200,16 @@ BEGIN_EVENT_TABLE(Interface, wxFrame) /* Slider events */ EVT_COMMAND_SCROLL(SliderScroll_Event, Interface::OnSliderUpdate) + + 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) - EVT_COMMAND_SCROLL(Hue_Event, Interface::OnHueUpdate) - EVT_COMMAND_SCROLL(Contrast_Event, Interface::OnContrastUpdate) - EVT_COMMAND_SCROLL(Brightness_Event, Interface::OnBrightnessUpdate) - EVT_COMMAND_SCROLL(Saturation_Event, Interface::OnSaturationUpdate) + /* Custom events */ + EVT_COMMAND(0, wxEVT_INTF, Interface::OnControlEvent) + EVT_COMMAND(1, wxEVT_INTF, Interface::OnControlEvent) END_EVENT_TABLE() @@ -200,7 +218,7 @@ END_EVENT_TABLE() *****************************************************************************/ Interface::Interface( intf_thread_t *_p_intf ): wxFrame( NULL, -1, wxT("VLC media player"), - wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE ) + wxDefaultPosition, wxSize(700,100), wxDEFAULT_FRAME_STYLE ) { /* Initializations */ p_intf = _p_intf; @@ -211,7 +229,6 @@ Interface::Interface( intf_thread_t *_p_intf ): SetIcon( wxIcon( vlc_xpm ) ); /* Create a sizer for the main frame */ - //frame_sizer= new wxFlexGridSizer( 1, 0, 0); frame_sizer = new wxBoxSizer( wxVERTICAL ); SetSizer( frame_sizer ); @@ -219,7 +236,7 @@ Interface::Interface( intf_thread_t *_p_intf ): wxWindow *p_dummy = new wxWindow( this, 0, wxDefaultPosition, wxSize(0,0) ); p_dummy->SetFocus(); - frame_sizer->Add( p_dummy ); + frame_sizer->Add( p_dummy, 0, wxEXPAND ); /* Creation of the menu bar */ CreateOurMenuBar(); @@ -227,13 +244,8 @@ Interface::Interface( intf_thread_t *_p_intf ): /* Creation of the tool bar */ CreateOurToolBar(); - /* Creation of the slider sub-window */ - CreateOurSlider(); - frame_sizer->Add( slider_frame, 0, wxEXPAND , 0 ); - frame_sizer->Hide( slider_frame ); - /* Create the extra panel */ - CreateOurExtraPanel(); + CreateOurExtendedPanel(); frame_sizer->Add( extra_frame, 0, wxEXPAND , 0 ); frame_sizer->Hide( extra_frame ); @@ -245,20 +257,31 @@ Interface::Interface( intf_thread_t *_p_intf ): statusbar->SetStatusWidths( 3, i_status_width ); statusbar->SetStatusText( wxString::Format(wxT("x%.2f"), 1.0), 1 ); + /* 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 ); + } + + /* 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() ); /* Layout everything */ - SetAutoLayout( TRUE ); frame_sizer->Layout(); frame_sizer->Fit(this); -#if !defined(__WXX11__) +#if wxUSE_DRAG_AND_DROP /* Associate drop targets with the main interface */ SetDropTarget( new DragAndDrop( p_intf ) ); #endif - UpdateAcceleratorTable(); + SetupHotkeys(); /* Start timer */ timer = new Timer( p_intf, this ); @@ -275,113 +298,147 @@ Interface::~Interface() delete timer; } +void Interface::Update() +{ + /* Misc updates */ + ((wxVolCtrl *)volctrl)->UpdateVolume(); +} + +void Interface::OnControlEvent( wxCommandEvent& event ) +{ + 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; + } +} + /***************************************************************************** * Private methods. *****************************************************************************/ void Interface::CreateOurMenuBar() { -#define HELP_FILE N_("Open a file") -#define HELP_DISC N_("Open a DVD or (S)VCD") -#define HELP_NET N_("Open a network stream") -#define HELP_SAT N_("Open a satellite stream") -#define HELP_EJECT N_("Eject the DVD/CD") -#define HELP_EXIT N_("Exit this program") - -#define HELP_PLAYLIST N_("Open the playlist") -#define HELP_LOGS N_("Show the program logs") -#define HELP_FILEINFO N_("Show information about the file being played") - -#define HELP_PREFS N_("Go to the preferences menu") -#define EXTRA_PREFS N_("Shows the extended GUI") - -#define HELP_ABOUT N_("About this program") - /* Create the "File" menu */ wxMenu *file_menu = new wxMenu; - file_menu->Append( OpenFileSimple_Event, wxU(_("Simple &Open ...")), - wxU(_(HELP_FILE)) ); - file_menu->Append( OpenFile_Event, wxU(_("Open &File...")), - wxU(_(HELP_FILE)) ); - file_menu->Append( OpenDisc_Event, wxU(_("Open &Disc...")), - wxU(_(HELP_DISC)) ); - file_menu->Append( OpenNet_Event, wxU(_("Open &Network Stream...")), - wxU(_(HELP_NET)) ); -#if 0 - file_menu->Append( OpenSat_Event, wxU(_("Open &Satellite Stream...")), - wxU(_(HELP_NET)) ); -#endif -#if 0 + file_menu->Append( OpenFileSimple_Event, + wxU(_("Quick &Open File...\tCtrl-O")) ); + file_menu->AppendSeparator(); - file_menu->Append( EjectDisc_Event, wxU(_("&Eject Disc")), - wxU(_(HELP_EJECT)) ); -#endif + file_menu->Append( OpenFile_Event, wxU(_("Open &File...\tCtrl-F")) ); + file_menu->Append( OpenDisc_Event, wxU(_("Open &Disc...\tCtrl-D")) ); + file_menu->Append( OpenNet_Event, + wxU(_("Open &Network Stream...\tCtrl-N")) ); + file_menu->Append( OpenCapture_Event, + wxU(_("Open &Capture Device...\tCtrl-C")) ); + + file_menu->AppendSeparator(); + file_menu->Append( Wizard_Event, wxU(_("&Wizard...\tCtrl-W")) ); + file_menu->Append( StreamWizard_Event, + wxU(_("Old streaming Wizard...")) ); file_menu->AppendSeparator(); - file_menu->Append( Exit_Event, wxU(_("E&xit")), wxU(_(HELP_EXIT)) ); + file_menu->Append( Exit_Event, wxU(_("E&xit\tCtrl-X")) ); /* Create the "View" menu */ wxMenu *view_menu = new wxMenu; - view_menu->Append( Playlist_Event, wxU(_("&Playlist...")), - wxU(_(HELP_PLAYLIST)) ); - view_menu->Append( Logs_Event, wxU(_("&Messages...")), wxU(_(HELP_LOGS)) ); - view_menu->Append( FileInfo_Event, wxU(_("&File info...")), - wxU(_(HELP_FILEINFO)) ); - - /* Create the "Settings" menu */ - wxMenu *settings_menu = new wxMenu; - settings_menu->Append( Prefs_Event, wxU(_("&Preferences...")), - wxU(_(HELP_PREFS)) ); - settings_menu->AppendCheckItem( Extra_Event, wxU(_("&Extended GUI") ), - wxU(_(EXTRA_PREFS)) ); - - /* Create the "Audio" menu */ - p_audio_menu = new wxMenu; - b_audio_menu = 1; - - /* Create the "Video" menu */ - p_video_menu = new wxMenu; - b_video_menu = 1; - - /* Create the "Navigation" menu */ - p_navig_menu = new wxMenu; - b_navig_menu = 1; - - /* Create the "Miscellaneous" menu */ - p_misc_menu = new wxMenu; - b_misc_menu = 1; + view_menu->Append( Playlist_Event, wxU(_("&Playlist...\tCtrl-P")) ); + view_menu->Append( Logs_Event, wxU(_("&Messages...\tCtrl-M")) ); + view_menu->Append( FileInfo_Event, + wxU(_("Stream and Media &info...\tCtrl-I")) ); + + /* 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 ); /* Create the "Help" menu */ wxMenu *help_menu = new wxMenu; - help_menu->Append( About_Event, wxU(_("&About...")), wxU(_(HELP_ABOUT)) ); + help_menu->Append( About_Event, wxU(_("About VLC media player")) ); /* Append the freshly created menus to the menu bar... */ wxMenuBar *menubar = new wxMenuBar( wxMB_DOCKABLE ); menubar->Append( file_menu, wxU(_("&File")) ); menubar->Append( view_menu, wxU(_("&View")) ); - menubar->Append( settings_menu, wxU(_("&Settings")) ); + menubar->Append( p_settings_menu, wxU(_("&Settings")) ); menubar->Append( p_audio_menu, wxU(_("&Audio")) ); menubar->Append( p_video_menu, wxU(_("&Video")) ); menubar->Append( p_navig_menu, wxU(_("&Navigation")) ); - menubar->Append( p_misc_menu, wxU(_("&Miscellaneous")) ); menubar->Append( help_menu, wxU(_("&Help")) ); /* Attach the menu bar to the frame */ SetMenuBar( menubar ); + /* Find out size of menu bar */ + int i_size = 0; + for( unsigned int i = 0; i < menubar->GetMenuCount(); i++ ) + { + int i_width, i_height; + menubar->GetTextExtent( menubar->GetLabelTop(i), &i_width, &i_height ); + i_size += i_width + +#if defined(__WXGTK__) + 20 /* approximate margin */; +#else + 4 /* approximate margin */; +#endif + } + frame_sizer->SetMinSize( i_size, -1 ); + /* Intercept all menu events in our custom event handler */ PushEventHandler( new MenuEvtHandler( p_intf, this ) ); -#if !defined(__WXX11__) +#if wxUSE_DRAG_AND_DROP /* Associate drop targets with the menubar */ menubar->SetDropTarget( new DragAndDrop( p_intf ) ); #endif } +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() +}; + +BEGIN_EVENT_TABLE(VLCVolCtrl, wxControl) + EVT_PAINT(VLCVolCtrl::OnPaint) +END_EVENT_TABLE() + +VLCVolCtrl::VLCVolCtrl( intf_thread_t *p_intf, wxWindow *p_parent, + wxGauge **pp_volctrl ) + :wxControl( p_parent, -1, wxDefaultPosition, wxSize(64, 16), wxBORDER_NONE ) +{ + *pp_volctrl = new wxVolCtrl( p_intf, this, -1, wxPoint( 18, 0 ), + wxSize( 44, 16 ) ); +} + +void VLCVolCtrl::OnPaint( wxPaintEvent &evt ) +{ + wxPaintDC dc( this ); + wxBitmap mPlayBitmap( speaker_xpm ); + dc.DrawBitmap( mPlayBitmap, 1, 0, TRUE ); +} + void Interface::CreateOurToolBar() { -#define HELP_STOP N_("Stop current playlist item") -#define HELP_PLAY N_("Play current playlist item") -#define HELP_PAUSE N_("Pause current playlist item") -#define HELP_PLO N_("Open playlist") +#define HELP_OPEN N_("Open") +#define HELP_STOP N_("Stop") +#define HELP_PLAY N_("Play") +#define HELP_PAUSE N_("Pause") +#define HELP_PLO N_("Playlist") #define HELP_PLP N_("Previous playlist item") #define HELP_PLN N_("Next playlist item") #define HELP_SLOW N_("Play slower") @@ -390,55 +447,47 @@ void Interface::CreateOurToolBar() wxLogNull LogDummy; /* Hack to suppress annoying log message on the win32 * version because we don't include wx.rc */ - wxToolBar *toolbar = CreateToolBar( - wxTB_HORIZONTAL | wxTB_FLAT | wxTB_DOCKABLE ); + wxToolBar *toolbar = + CreateToolBar( wxTB_HORIZONTAL | wxTB_FLAT | wxTB_DOCKABLE ); toolbar->SetToolBitmapSize( wxSize(TOOLBAR_BMP_WIDTH,TOOLBAR_BMP_HEIGHT) ); - toolbar->AddTool( OpenFile_Event, wxU(_("File")), wxBitmap( file_xpm ), - wxU(_(HELP_FILE)) ); - toolbar->AddTool( OpenDisc_Event, wxU(_("Disc")), wxBitmap( disc_xpm ), - wxU(_(HELP_DISC)) ); - toolbar->AddTool( OpenNet_Event, wxU(_("Net")), wxBitmap( net_xpm ), - wxU(_(HELP_NET)) ); + toolbar->AddTool( OpenFile_Event, wxT(""), + wxBitmap( eject_xpm ), wxU(_(HELP_OPEN)) ); + toolbar->AddSeparator(); + toolbar->AddTool( PlayStream_Event, wxT(""), wxBitmap( play_xpm ), + wxU(_(HELP_PLAY)) ); #if 0 - toolbar->AddTool( OpenSat_Event, wxU(_("Sat")), wxBitmap( sat_xpm ), - wxU(_(HELP_SAT)) ); + toolbar->AddTool( PlayStream_Event, wxT(""), wxBitmap( pause_xpm ), + wxU(_(HELP_PAUSE)) ); #endif - toolbar->AddSeparator(); - toolbar->AddTool( StopStream_Event, wxU(_("Stop")), wxBitmap( stop_xpm ), + toolbar->AddTool( StopStream_Event, wxT(""), wxBitmap( stop_xpm ), wxU(_(HELP_STOP)) ); - toolbar->AddTool( PlayStream_Event, wxU(_("Play")), wxBitmap( play_xpm ), - wxU(_(HELP_PLAY)) ); toolbar->AddSeparator(); - toolbar->AddTool( Playlist_Event, wxU(_("Playlist")), - wxBitmap( playlist_xpm ), wxU(_(HELP_PLO)) ); - toolbar->AddTool( PrevStream_Event, wxU(_("Prev")), - wxBitmap( previous_xpm ), wxU(_(HELP_PLP)) ); - toolbar->AddTool( NextStream_Event, wxU(_("Next")), wxBitmap( next_xpm ), + toolbar->AddTool( PrevStream_Event, wxT(""), + 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)) ); + toolbar->AddTool( NextStream_Event, wxT(""), wxBitmap( next_xpm ), wxU(_(HELP_PLN)) ); - toolbar->AddTool( SlowStream_Event, wxU(_("Slower")), wxBitmap( slow_xpm ), - wxU(_(HELP_SLOW)) ); - toolbar->AddTool( FastStream_Event, wxU(_("Faster")), wxBitmap( fast_xpm ), - wxU(_(HELP_FAST)) ); + toolbar->AddSeparator(); + toolbar->AddTool( Playlist_Event, wxT(""), wxBitmap( playlist_xpm ), + wxU(_(HELP_PLO)) ); - toolbar->Realize(); + wxControl *p_dummy_ctrl = + new wxControl( toolbar, -1, wxDefaultPosition, + wxSize(35, 16 ), wxBORDER_NONE ); - /* Place the toolbar in a sizer, so we can calculate the width of the - * toolbar and set this as the minimum for the main frame size. */ - wxBoxSizer *toolbar_sizer = new wxBoxSizer( wxHORIZONTAL ); - toolbar_sizer->Add( toolbar, 0, 0, 0 ); + toolbar->AddControl( p_dummy_ctrl ); - toolbar_sizer->Layout(); + VLCVolCtrl *sound_control = new VLCVolCtrl( p_intf, toolbar, &volctrl ); + toolbar->AddControl( sound_control ); -#ifndef WIN32 - frame_sizer->SetMinSize( toolbar_sizer->GetMinSize().GetWidth(), -1 ); -#else - frame_sizer->SetMinSize( toolbar->GetToolSize().GetWidth() * - toolbar->GetToolsCount(), -1 ); -#endif + toolbar->Realize(); -#if !defined(__WXX11__) +#if wxUSE_DRAG_AND_DROP /* Associate drop targets with the toolbar */ toolbar->SetDropTarget( new DragAndDrop( p_intf ) ); #endif @@ -449,28 +498,15 @@ void Interface::CreateOurSlider() /* Create a new frame and sizer containing the slider */ slider_frame = new wxPanel( this, -1, wxDefaultPosition, wxDefaultSize ); slider_frame->SetAutoLayout( TRUE ); - wxBoxSizer *frame_sizer = - new wxBoxSizer( wxHORIZONTAL ); - - /* Create static box to surround the slider */ - slider_box = new wxStaticBox( slider_frame, -1, wxT("") ); - - /* Create sizer for slider frame */ - wxStaticBoxSizer *slider_sizer = - new wxStaticBoxSizer( slider_box, wxHORIZONTAL ); - slider_sizer->SetMinSize( -1, 50 ); + wxBoxSizer *frame_sizer = new wxBoxSizer( wxHORIZONTAL ); + //frame_sizer->SetMinSize( -1, 50 ); /* Create slider */ slider = new wxSlider( slider_frame, SliderScroll_Event, 0, 0, SLIDER_MAX_POS, wxDefaultPosition, wxDefaultSize ); - slider_sizer->Add( slider, 1, wxEXPAND | wxALL, 5 ); - - - volctrl = new wxVolCtrl( p_intf, slider_frame, -1 ); /* Add everything to the frame */ - frame_sizer->Add( slider_sizer, 1, wxEXPAND | wxBOTTOM, 5 ); - frame_sizer->Add( volctrl, 0, wxEXPAND | wxALL, 5 ); + frame_sizer->Add( slider, 1, wxEXPAND | wxALL, 5 ); slider_frame->SetSizer( frame_sizer ); frame_sizer->Layout(); frame_sizer->SetSizeHints(slider_frame); @@ -480,7 +516,7 @@ void Interface::CreateOurSlider() } -void Interface::CreateOurExtraPanel() +void Interface::CreateOurExtendedPanel() { char *psz_filters; @@ -489,12 +525,18 @@ void Interface::CreateOurExtraPanel() wxBoxSizer *extra_sizer = new wxBoxSizer( wxHORIZONTAL ); /* Create static box to surround the adjust controls */ - adjust_box = new wxStaticBox( extra_frame, -1, wxU(_("Image adjust")) ); + wxStaticBox *adjust_box = + new wxStaticBox( extra_frame, -1, wxU(_("Adjust Image")) ); /* Create the size for the frame */ wxStaticBoxSizer *adjust_sizer = new wxStaticBoxSizer( adjust_box, wxVERTICAL ); adjust_sizer->SetMinSize( -1, 50 ); + + /* Create flex grid */ + wxFlexGridSizer *adjust_gridsizer = + new wxFlexGridSizer( 6, 2, 0, 0); + adjust_gridsizer->AddGrowableCol(1); /* Create every controls */ @@ -502,60 +544,64 @@ void Interface::CreateOurExtraPanel() wxCheckBox * adjust_check = new wxCheckBox( extra_frame, Adjust_Event, wxU(_("Enable"))); + /* Create the restore to defaults button */ + restoredefaults_button = + new wxButton( extra_frame, RestoreDefaults_Event, + wxU(_("Restore Defaults")), wxDefaultPosition); - wxBoxSizer *hue_sizer = new wxBoxSizer( wxHORIZONTAL ); wxStaticText *hue_text = new wxStaticText( extra_frame, -1, wxU(_("Hue")) ); hue_slider = new wxSlider ( extra_frame, Hue_Event, 0, 0, 360, wxDefaultPosition, wxDefaultSize ); - hue_sizer->Add(hue_text,1, 0 ,0); - hue_sizer->Add(hue_slider,1, 0 ,0); - hue_sizer->Layout(); - wxBoxSizer *contrast_sizer = new wxBoxSizer( wxHORIZONTAL ); wxStaticText *contrast_text = new wxStaticText( extra_frame, -1, wxU(_("Contrast")) ); contrast_slider = new wxSlider ( extra_frame, Contrast_Event, 0, 0, 200, wxDefaultPosition, wxDefaultSize); - contrast_sizer->Add(contrast_text,1, 0 ,0); - contrast_sizer->Add(contrast_slider,1, 0 ,0); - contrast_sizer->Layout(); - wxBoxSizer *brightness_sizer = new wxBoxSizer( wxHORIZONTAL ); wxStaticText *brightness_text = new wxStaticText( extra_frame, -1, wxU(_("Brightness")) ); brightness_slider = new wxSlider ( extra_frame, Brightness_Event, 0, 0, 200, wxDefaultPosition, wxDefaultSize) ; - brightness_sizer->Add(brightness_text,1,0,0); - brightness_sizer->Add(brightness_slider,1,0,0); - brightness_sizer->Layout(); - wxBoxSizer *saturation_sizer = new wxBoxSizer( wxHORIZONTAL ); wxStaticText *saturation_text = new wxStaticText( extra_frame, -1, wxU(_("Saturation")) ); saturation_slider = new wxSlider ( extra_frame, Saturation_Event, 0, 0, 300, wxDefaultPosition, wxDefaultSize ); - saturation_sizer->Add(saturation_text,1,0,0); - saturation_sizer->Add(saturation_slider,1,0,0); - saturation_sizer->Layout(); - - adjust_sizer->Add(adjust_check, 1, wxEXPAND, 0); - adjust_sizer->Add(hue_sizer, 1, wxEXPAND, 0); - adjust_sizer->Add(contrast_sizer, 1, wxEXPAND, 0); - adjust_sizer->Add(brightness_sizer, 1, wxEXPAND, 0); - adjust_sizer->Add(saturation_sizer, 1, wxEXPAND, 0); + wxStaticText *gamma_text = new wxStaticText( extra_frame, -1, + wxU(_("Gamma")) ); + gamma_slider = new wxSlider ( extra_frame, Gamma_Event, 0, 0, + 100, wxDefaultPosition, wxDefaultSize ); + + 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); + extra_sizer->Add(adjust_sizer,1,wxBOTTOM,5); + /* Create sizer to surround the other controls */ + wxBoxSizer *other_sizer = new wxBoxSizer( wxVERTICAL ); - /* Create static box to surround the other controls */ - other_box = new wxStaticBox( extra_frame, -1, wxU(_("Video Options")) ); + wxStaticBox *video_box = + new wxStaticBox( extra_frame, -1, wxU(_("Video Options")) ); /* Create the sizer for the frame */ - wxStaticBoxSizer *other_sizer = - new wxStaticBoxSizer( other_box, wxVERTICAL ); - other_sizer->SetMinSize( -1, 50 ); + wxStaticBoxSizer *video_sizer = + new wxStaticBoxSizer( video_box, wxVERTICAL ); + video_sizer->SetMinSize( -1, 50 ); static const wxString ratio_array[] = { @@ -565,7 +611,7 @@ void Interface::CreateOurExtraPanel() wxBoxSizer *ratio_sizer = new wxBoxSizer( wxHORIZONTAL ); wxStaticText *ratio_text = new wxStaticText( extra_frame, -1, - wxU(_("Ratio")) ); + wxU(_("Aspect Ratio")) ); ratio_combo = new wxComboBox( extra_frame, Ratio_Event, wxT(""), wxDefaultPosition, wxSize(120,-1), @@ -576,7 +622,32 @@ void Interface::CreateOurExtraPanel() ratio_sizer->Add( ratio_combo, 0, wxALL, 2 ); ratio_sizer->Layout(); - other_sizer->Add(ratio_sizer,0,wxALL,0 ); + video_sizer->Add( ratio_sizer , 0 , wxALL , 0 ); + video_sizer->Layout(); + +#if 0 + wxBoxSizer *visual_sizer = new wxBoxSizer( wxHORIZONTAL ); + + wxCheckBox *visual_checkbox = new wxCheckBox( extra_frame, Visual_Event, + wxU(_("Visualizations")) ); + + 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 ); +#endif + other_sizer->Add( video_sizer, 0, wxALL | wxEXPAND , 0); + other_sizer->Layout(); extra_sizer->Add(other_sizer,0,wxBOTTOM,5); @@ -588,26 +659,36 @@ void Interface::CreateOurExtraPanel() extra_sizer->SetSizeHints(extra_frame); /* Write down initial values */ +#if 0 + psz_filters = config_GetPsz( p_intf, "audio-filter" ); + if( psz_filters && strstr( psz_filters, "visual" ) ) + { + visual_checkbox->SetValue(1); + } + if( psz_filters ) free( psz_filters ); +#endif psz_filters = config_GetPsz( p_intf, "filter" ); - - if(psz_filters == NULL) psz_filters=strdup(""); - - if( strstr(psz_filters,"adjust") ) + if( psz_filters && strstr( psz_filters, "adjust" ) ) { adjust_check->SetValue( 1 ); + restoredefaults_button->Enable(); saturation_slider->Enable(); contrast_slider->Enable(); brightness_slider->Enable(); hue_slider->Enable(); + gamma_slider->Enable(); } else { adjust_check->SetValue( 0 ); + restoredefaults_button->Disable(); saturation_slider->Disable(); contrast_slider->Disable(); brightness_slider->Disable(); hue_slider->Disable(); + gamma_slider->Disable(); } + if( psz_filters ) free( psz_filters ); int i_value = config_GetInt( p_intf, "hue" ); if( i_value > 0 && i_value < 360 ) @@ -623,168 +704,136 @@ void Interface::CreateOurExtraPanel() f_value = config_GetFloat( p_intf, "brightness" ); if( f_value > 0 && f_value < 2 ) brightness_slider->SetValue( (int)(100 * f_value) ); + f_value = config_GetFloat( p_intf, "gamma" ); + if( f_value > 0 && f_value < 10 ) + gamma_slider->SetValue( (int)(10 * f_value) ); extra_frame->Hide(); - free(psz_filters); } -void Interface::UpdateAcceleratorTable() +static int ConvertHotkeyModifiers( int i_hotkey ) { - /* Set some hotkeys */ - wxAcceleratorEntry entries[7]; - int i_key = config_GetInt( p_intf, "quit-key" ); - int i = 0; - entries[i++].Set( ConvertHotkeyModifiers( i_key ), ConvertHotkey( i_key ), - Exit_Event ); - i_key = config_GetInt( p_intf, "stop-key" ); - entries[i++].Set( ConvertHotkeyModifiers( i_key ), ConvertHotkey( i_key ), - StopStream_Event ); - i_key = config_GetInt( p_intf, "play-pause-key" ); - entries[i++].Set( ConvertHotkeyModifiers( i_key ), ConvertHotkey( i_key ), - PlayStream_Event ); - i_key = config_GetInt( p_intf, "next-key" ); - entries[i++].Set( ConvertHotkeyModifiers( i_key ), ConvertHotkey( i_key ), - NextStream_Event ); - i_key = config_GetInt( p_intf, "prev-key" ); - entries[i++].Set( ConvertHotkeyModifiers( i_key ), ConvertHotkey( i_key ), - PrevStream_Event ); - i_key = config_GetInt( p_intf, "faster-key" ); - entries[i++].Set( ConvertHotkeyModifiers( i_key ), ConvertHotkey( i_key ), - FastStream_Event ); - i_key = config_GetInt( p_intf, "slower-key" ); - entries[i++].Set( ConvertHotkeyModifiers( i_key ), ConvertHotkey( i_key ), - SlowStream_Event ); - - wxAcceleratorTable accel( 7, entries ); - - if( !accel.Ok() ) - msg_Err( p_intf, "invalid accelerator table" ); - - SetAcceleratorTable( accel ); - msg_Dbg( p_intf, "accelerator table loaded" ); - + 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; } - - -/***************************************************************************** - * Event Handlers. - *****************************************************************************/ -/* Work-around helper for buggy wxGTK */ -void RecursiveDestroy( wxMenu *menu ) +static int ConvertHotkey( int i_hotkey ) { - wxMenuItemList::Node *node = menu->GetMenuItems().GetFirst(); - for( ; node; ) + int i_key = i_hotkey & ~KEY_MODIFIER; + if( i_key & KEY_ASCII ) return i_key & KEY_ASCII; + else if( i_key & KEY_SPECIAL ) { - wxMenuItem *item = node->GetData(); - node = node->GetNext(); - - /* Delete the submenus */ - wxMenu *submenu = item->GetSubMenu(); - if( submenu ) + switch ( i_key ) { - RecursiveDestroy( submenu ); + 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; } - menu->Delete( item ); } + return WXK_F24; } -void Interface::OnMenuOpen(wxMenuEvent& event) +void Interface::SetupHotkeys() { -#if !defined( __WXMSW__ ) - if( event.GetEventObject() == p_audio_menu ) - { - if( b_audio_menu ) - { - p_audio_menu = AudioMenu( p_intf, this ); - - /* Work-around for buggy wxGTK */ - wxMenu *menu = GetMenuBar()->GetMenu( 3 ); - RecursiveDestroy( menu ); - /* End work-around */ + struct vlc_t::hotkey *p_hotkeys = p_intf->p_vlc->p_hotkeys; + int i_hotkeys; - menu = - GetMenuBar()->Replace( 3, p_audio_menu, wxU(_("&Audio")) ); - if( menu ) delete menu; - - b_audio_menu = 0; - } - else b_audio_menu = 1; - } - else if( event.GetEventObject() == p_video_menu ) - { - if( b_video_menu ) - { - p_video_menu = VideoMenu( p_intf, this ); + /* Count number of hoteys */ + for( i_hotkeys = 0; p_hotkeys[i_hotkeys].psz_action != NULL; i_hotkeys++ ); - /* Work-around for buggy wxGTK */ - wxMenu *menu = GetMenuBar()->GetMenu( 4 ); - RecursiveDestroy( menu ); - /* End work-around */ + p_intf->p_sys->i_first_hotkey_event = wxID_HIGHEST + 7000; + p_intf->p_sys->i_hotkeys = i_hotkeys; - menu = - GetMenuBar()->Replace( 4, p_video_menu, wxU(_("&Video")) ); - if( menu ) delete menu; + wxAcceleratorEntry p_entries[i_hotkeys]; - b_video_menu = 0; - } - else b_video_menu = 1; - } - else if( event.GetEventObject() == p_navig_menu ) + /* Setup the hotkeys as accelerators */ + for( int i = 0; i < i_hotkeys; i++ ) { - if( b_navig_menu ) - { - p_navig_menu = NavigMenu( p_intf, this ); - - /* Work-around for buggy wxGTK */ - wxMenu *menu = GetMenuBar()->GetMenu( 5 ); - RecursiveDestroy( menu ); - /* End work-around */ + 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 ); + } - menu = - GetMenuBar()->Replace( 5, p_navig_menu, wxU(_("&Navigation"))); - if( menu ) delete menu; + wxAcceleratorTable accel( i_hotkeys, p_entries ); - b_navig_menu = 0; - } - else b_navig_menu = 1; + if( !accel.Ok() ) + { + msg_Err( p_intf, "invalid accelerator table" ); } - else if( event.GetEventObject() == p_misc_menu ) + else { - if( b_misc_menu ) - { - p_misc_menu = MiscMenu( p_intf, this ); + SetAcceleratorTable( accel ); + msg_Dbg( p_intf, "accelerator table loaded" ); + } +} - /* Work-around for buggy wxGTK */ - wxMenu *menu = GetMenuBar()->GetMenu( 6 ); - RecursiveDestroy( menu ); - /* End work-around */ +/***************************************************************************** + * Event Handlers. + *****************************************************************************/ - menu = GetMenuBar()->Replace( 6, p_misc_menu, - wxU(_("&Miscellaneous"))); - if( menu ) delete menu; +void Interface::OnMenuOpen(wxMenuEvent& event) +{ +#if defined( __WXMSW__ ) +# define GetEventObject GetMenu +#endif - b_misc_menu = 0; - } - else b_misc_menu = 1; + if( event.GetEventObject() == p_settings_menu ) + { + p_settings_menu = SettingsMenu( p_intf, this, p_settings_menu ); + + /* Add static items */ + p_settings_menu->AppendCheckItem( Extended_Event, + wxU(_("&Extended GUI") ) ); + if( b_extra ) p_settings_menu->Check( Extended_Event, TRUE ); + p_settings_menu->AppendCheckItem( Bookmarks_Event, + wxU(_("&Bookmarks...") ) ); + p_settings_menu->Append( Prefs_Event, wxU(_("&Preferences...")) ); } -#else - p_audio_menu = AudioMenu( p_intf, this ); - wxMenu *menu = GetMenuBar()->Replace( 3, p_audio_menu, wxU(_("&Audio")) ); - if( menu ) delete menu; + else if( event.GetEventObject() == p_audio_menu ) + { + p_audio_menu = AudioMenu( p_intf, this, p_audio_menu ); + } - p_video_menu = VideoMenu( p_intf, this ); - menu = GetMenuBar()->Replace( 4, p_video_menu, wxU(_("&Video")) ); - if( menu ) delete menu; + else if( event.GetEventObject() == p_video_menu ) + { + p_video_menu = VideoMenu( p_intf, this, p_video_menu ); + } - p_navig_menu = NavigMenu( p_intf, this ); - menu = GetMenuBar()->Replace( 5, p_navig_menu, wxU(_("&Navigation")) ); - if( menu ) delete menu; + else if( event.GetEventObject() == p_navig_menu ) + { + p_navig_menu = NavigMenu( p_intf, this, p_navig_menu ); + } - p_misc_menu = MiscMenu( p_intf, this ); - menu = GetMenuBar()->Replace( 6, p_misc_menu, wxU(_("&Miscellaneous")) ); - if( menu ) delete menu; +#if defined( __WXMSW__ ) +# undef GetEventObject #endif } @@ -819,8 +868,8 @@ void Interface::OnAbout( wxCommandEvent& WXUNUSED(event) ) wxString msg; msg.Printf( wxString(wxT("VLC media player " VERSION)) + wxU(_(" (wxWindows interface)\n\n")) + - wxU(_("(C) 1996-2003 - the VideoLAN Team\n\n")) + - wxU( INTF_ABOUT_MSG ) + wxT("\n\n") + + wxU(_("(c) 1996-2004 - the VideoLAN Team\n\n")) + + wxU( vlc_wraptext(INTF_ABOUT_MSG,WRAPCOUNT,ISUTF8) ) + wxT("\n\n") + wxU(_("The VideoLAN team \n" "http://www.videolan.org/\n\n")) ); @@ -839,6 +888,8 @@ void Interface::OnShowDialog( wxCommandEvent& event ) case OpenFileSimple_Event: i_id = INTF_DIALOG_FILE_SIMPLE; break; + case OpenAdv_Event: + i_id = INTF_DIALOG_FILE; case OpenFile_Event: i_id = INTF_DIALOG_FILE; break; @@ -848,6 +899,9 @@ void Interface::OnShowDialog( wxCommandEvent& event ) case OpenNet_Event: i_id = INTF_DIALOG_NET; break; + case OpenCapture_Event: + i_id = INTF_DIALOG_CAPTURE; + break; case OpenSat_Event: i_id = INTF_DIALOG_SAT; break; @@ -863,17 +917,25 @@ void Interface::OnShowDialog( wxCommandEvent& event ) case Prefs_Event: i_id = INTF_DIALOG_PREFS; break; + case StreamWizard_Event: + i_id = INTF_DIALOG_STREAMWIZARD; + break; + case Wizard_Event: + i_id = INTF_DIALOG_WIZARD; + break; + case Bookmarks_Event: + i_id = INTF_DIALOG_BOOKMARKS; + break; default: i_id = INTF_DIALOG_FILE; break; - } p_intf->p_sys->pf_show_dialog( p_intf, i_id, 1, 0 ); } } -void Interface::OnExtra(wxCommandEvent& event) +void Interface::OnExtended(wxCommandEvent& event) { if( b_extra == VLC_FALSE) { @@ -918,10 +980,12 @@ void Interface::OnEnableAdjust(wxCommandEvent& event) vlc_object_release( p_vout ); } if( val.psz_string ) free( val.psz_string ); + restoredefaults_button->Enable(); brightness_slider->Enable(); saturation_slider->Enable(); contrast_slider->Enable(); hue_slider->Enable(); + gamma_slider->Enable(); } else { @@ -960,39 +1024,117 @@ void Interface::OnEnableAdjust(wxCommandEvent& event) } if( val.psz_string ) free( val.psz_string ); } + restoredefaults_button->Disable(); brightness_slider->Disable(); saturation_slider->Disable(); contrast_slider->Disable(); hue_slider->Disable(); + gamma_slider->Disable(); } if(psz_filters) free(psz_filters); if(psz_new) free(psz_new); } -void Interface::OnHueUpdate( wxScrollEvent& event) +void Interface::OnRestoreDefaults( wxCommandEvent &event) { - config_PutInt( p_intf , "hue" , event.GetPosition() ); -} + 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); -void Interface::OnSaturationUpdate( wxScrollEvent& event) -{ - config_PutFloat( p_intf , "saturation" , (float)event.GetPosition()/100 ); } -void Interface::OnBrightnessUpdate( wxScrollEvent& event) +void Interface::OnAdjustUpdate( wxScrollEvent &event) { - config_PutFloat( p_intf , "brightness", (float)event.GetPosition()/100 ); + 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); + } } -void Interface::OnContrastUpdate(wxScrollEvent& event) +void Interface::OnRatio( wxCommandEvent& event ) { - config_PutFloat( p_intf , "contrast" , (float)event.GetPosition()/100 ); - + config_PutPsz( p_intf, "aspect-ratio", ratio_combo->GetValue().mb_str() ); } -void Interface::OnRatio( wxCommandEvent& event ) +void Interface::OnEnableVisual(wxCommandEvent& event) { - config_PutPsz( p_intf, "aspect-ratio", ratio_combo->GetValue().mb_str() ); + if( event.IsChecked() ) + { + config_PutPsz( p_intf, "audio-filter", "visual" ); + } + else + { + config_PutPsz( p_intf, "audio-filter", "" ); + } } void Interface::OnPlayStream( wxCommandEvent& WXUNUSED(event) ) @@ -1088,19 +1230,22 @@ void Interface::OnSliderUpdate( wxScrollEvent& event ) if( p_intf->p_sys->p_input ) { /* Update stream date */ -#define p_area p_intf->p_sys->p_input->stream.p_selected_area - char psz_time[ OFFSETTOTIME_MAX_SIZE ]; - - slider_box->SetLabel( - wxU(input_OffsetToTime( p_intf->p_sys->p_input, - psz_time, - p_area->i_size * event.GetPosition() - / SLIDER_MAX_POS )) ); -#undef p_area + char psz_time[ MSTRTIME_MAX_SIZE ], psz_total[ MSTRTIME_MAX_SIZE ]; + mtime_t i_seconds; + vlc_value_t val; + + i_seconds = var_GetTime( p_intf->p_sys->p_input, "length" ) / I64C(1000000 ); + secstotimestr( psz_total, i_seconds ); + + i_seconds = var_GetTime( p_intf->p_sys->p_input, "time" ) / I64C(1000000 ); + secstotimestr( psz_time, i_seconds ); + + statusbar->SetStatusText( wxU(psz_time)+ wxString(wxT(" / ")) + wxU(psz_total), 0 ); } } #endif +#undef WIN32 vlc_mutex_unlock( &p_intf->change_lock ); } @@ -1123,11 +1268,8 @@ void Interface::OnPrevStream( wxCommandEvent& WXUNUSED(event) ) vlc_value_t val; val.b_bool = VLC_TRUE; vlc_mutex_unlock( &p_playlist->p_input->stream.stream_lock ); var_Set( p_playlist->p_input, "prev-title", val ); - vlc_mutex_unlock( &p_playlist->object_lock ); - vlc_object_release( p_playlist ); - return; - } - vlc_mutex_unlock( &p_playlist->p_input->stream.stream_lock ); + } else + vlc_mutex_unlock( &p_playlist->p_input->stream.stream_lock ); } vlc_mutex_unlock( &p_playlist->object_lock ); @@ -1156,11 +1298,8 @@ void Interface::OnNextStream( wxCommandEvent& WXUNUSED(event) ) vlc_value_t val; val.b_bool = VLC_TRUE; vlc_mutex_unlock( &p_playlist->p_input->stream.stream_lock ); var_Set( p_playlist->p_input, "next-title", val ); - vlc_mutex_unlock( &p_playlist->object_lock ); - vlc_object_release( p_playlist ); - return; - } - vlc_mutex_unlock( &p_playlist->p_input->stream.stream_lock ); + } else + vlc_mutex_unlock( &p_playlist->p_input->stream.stream_lock ); } vlc_mutex_unlock( &p_playlist->object_lock ); @@ -1205,13 +1344,13 @@ void Interface::TogglePlayButton( int i_playing_status ) if( i_playing_status == PLAYING_S ) { - GetToolBar()->InsertTool( 5, PlayStream_Event, wxU(_("Pause")), + GetToolBar()->InsertTool( 2, PlayStream_Event, wxU(_("Pause")), wxBitmap( pause_xpm ), wxNullBitmap, wxITEM_NORMAL, wxU(_(HELP_PAUSE)) ); } else { - GetToolBar()->InsertTool( 5, PlayStream_Event, wxU(_("Play")), + GetToolBar()->InsertTool( 2, PlayStream_Event, wxU(_("Play")), wxBitmap( play_xpm ), wxNullBitmap, wxITEM_NORMAL, wxU(_(HELP_PLAY)) ); } @@ -1221,13 +1360,14 @@ void Interface::TogglePlayButton( int i_playing_status ) i_old_playing_status = i_playing_status; } -#if !defined(__WXX11__) +#if wxUSE_DRAG_AND_DROP /***************************************************************************** * Definition of DragAndDrop class. *****************************************************************************/ -DragAndDrop::DragAndDrop( intf_thread_t *_p_intf ) +DragAndDrop::DragAndDrop( intf_thread_t *_p_intf, vlc_bool_t _b_enqueue ) { p_intf = _p_intf; + b_enqueue = _b_enqueue; } bool DragAndDrop::OnDropFiles( wxCoord, wxCoord, @@ -1244,8 +1384,10 @@ bool DragAndDrop::OnDropFiles( wxCoord, wxCoord, } for( size_t i = 0; i < filenames.GetCount(); i++ ) - playlist_Add( p_playlist, (const char *)filenames[i].mb_str(), 0, 0, - PLAYLIST_APPEND | (i ? 0 : PLAYLIST_GO), PLAYLIST_END ); + playlist_Add( p_playlist, (const char *)filenames[i].mb_str(), + (const char *)filenames[i].mb_str(), + PLAYLIST_APPEND | ((i | b_enqueue) ? 0 : PLAYLIST_GO), + PLAYLIST_END ); vlc_object_release( p_playlist ); @@ -1254,28 +1396,34 @@ bool DragAndDrop::OnDropFiles( wxCoord, wxCoord, #endif /***************************************************************************** - * Definition of wxVolCtrl class. + * Definition of VolCtrl class. *****************************************************************************/ -wxVolCtrl::wxVolCtrl( intf_thread_t *_p_intf, wxWindow* parent, wxWindowID id ) - : wxGauge( parent, id, 200, wxDefaultPosition, wxDefaultSize, - wxGA_VERTICAL | wxGA_SMOOTH ) +wxVolCtrl::wxVolCtrl( intf_thread_t *_p_intf, wxWindow* parent, wxWindowID id, + wxPoint point, wxSize size ) + : wxGauge( parent, id, 200, point, size, wxGA_HORIZONTAL | wxGA_SMOOTH ) { p_intf = _p_intf; + UpdateVolume(); } void wxVolCtrl::OnChange( wxMouseEvent& event ) { if( !event.LeftDown() && !event.LeftIsDown() ) return; - int i_volume = (GetClientSize().GetHeight() - event.GetY()) * 200 / - GetClientSize().GetHeight(); - Change( i_volume ); + int i_volume = event.GetX() * 200 / GetClientSize().GetWidth(); + aout_VolumeSet( p_intf, i_volume * AOUT_VOLUME_MAX / 200 / 2 ); + UpdateVolume(); } -void wxVolCtrl::Change( int i_volume ) +void wxVolCtrl::UpdateVolume() { - aout_VolumeSet( p_intf, i_volume * AOUT_VOLUME_MAX / 200 / 2 ); - SetValue( i_volume ); + audio_volume_t i_volume; + aout_VolumeGet( p_intf, &i_volume ); + + int i_gauge_volume = i_volume * 200 * 2 / AOUT_VOLUME_MAX; + if( i_gauge_volume == GetValue() ) return; + + SetValue( i_gauge_volume ); SetToolTip( wxString::Format((wxString)wxU(_("Volume")) + wxT(" %d"), - i_volume ) ); + i_gauge_volume / 2 ) ); }