X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fwxwindows%2Finterface.cpp;h=f00f1b2cd5cb9678fcd2331f8899683615fc75ac;hb=4cd152b7f139e814bd5fa3d866bcbf42c402200a;hp=951e2110f5744182c70a450a4997b67677df45de;hpb=9549f78f20273da24d982ab8a9b8e251263710c1;p=vlc diff --git a/modules/gui/wxwindows/interface.cpp b/modules/gui/wxwindows/interface.cpp index 951e2110f5..f00f1b2cd5 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.62 2003/10/06 17:41:47 gbazin 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,36 +24,27 @@ /***************************************************************************** * Preamble *****************************************************************************/ -#include /* malloc(), free() */ -#include /* ENOMEM */ -#include /* strerror() */ -#include - #include #include +#include #include #include "stream_control.h" #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/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" @@ -85,7 +76,8 @@ 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 ); @@ -108,24 +100,35 @@ 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, StopStream_Event, @@ -136,12 +139,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) */ @@ -160,10 +167,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) @@ -172,10 +182,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) @@ -185,11 +199,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() @@ -198,7 +217,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; @@ -209,7 +228,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 ); @@ -217,7 +235,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(); @@ -225,13 +243,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 ); @@ -243,11 +256,22 @@ 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); @@ -257,6 +281,9 @@ Interface::Interface( intf_thread_t *_p_intf ): #endif UpdateAcceleratorTable(); + + /* Start timer */ + timer = new Timer( p_intf, this ); } Interface::~Interface() @@ -265,7 +292,27 @@ Interface::~Interface() { delete p_intf->p_sys->p_wxwindow; } + /* Clean up */ + delete timer; +} + +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; + } } /***************************************************************************** @@ -273,81 +320,48 @@ Interface::~Interface() *****************************************************************************/ 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( Exit_Event, wxU(_("E&xit")), wxU(_(HELP_EXIT)) ); + file_menu->Append( StreamWizard_Event, + wxU(_("Streaming &Wizard...\tCtrl-W")) ); + file_menu->Append( Wizard_Event, wxU(_("New Wizard...")) ); + file_menu->AppendSeparator(); + 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; + 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 "Navigation" menu */ - p_navig_menu = new wxMenu; - b_navig_menu = 1; + /* 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")) ); @@ -356,6 +370,21 @@ void Interface::CreateOurMenuBar() /* 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 ) ); @@ -365,12 +394,43 @@ void Interface::CreateOurMenuBar() #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_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") @@ -379,53 +439,42 @@ 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( 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( eject_xpm ), + wxU(_(HELP_PLO)) ); - toolbar->Realize(); + wxControl *p_dummy_ctrl = + new wxControl( toolbar, -1, wxDefaultPosition, + wxSize(64, 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__) /* Associate drop targets with the toolbar */ @@ -438,28 +487,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); @@ -469,7 +505,7 @@ void Interface::CreateOurSlider() } -void Interface::CreateOurExtraPanel() +void Interface::CreateOurExtendedPanel() { char *psz_filters; @@ -478,12 +514,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 */ @@ -491,60 +533,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[] = { @@ -554,7 +600,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), @@ -565,7 +611,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(_("Visualisations")) ); + + 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); @@ -577,57 +648,86 @@ 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 ) + hue_slider->SetValue( i_value ); + + float f_value; + f_value = config_GetFloat( p_intf, "saturation" ); + if( f_value > 0 && f_value < 5 ) + saturation_slider->SetValue( (int)(100 * f_value) ); + f_value = config_GetFloat( p_intf, "contrast" ); + if( f_value > 0 && f_value < 4 ) + 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) ); + 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() { /* Set some hotkeys */ wxAcceleratorEntry entries[7]; - int i_key = config_GetInt( p_intf, "quit-key" ); + vlc_value_t val; 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 ); + + var_Get( p_intf->p_vlc, "key-quit", &val ); + entries[i++].Set( ConvertHotkeyModifiers( val.i_int ), + ConvertHotkey( val.i_int ), Exit_Event ); + var_Get( p_intf->p_vlc, "key-stop", &val ); + entries[i++].Set( ConvertHotkeyModifiers( val.i_int ), + ConvertHotkey( val.i_int ), StopStream_Event ); + var_Get( p_intf->p_vlc, "key-play-pause", &val ); + entries[i++].Set( ConvertHotkeyModifiers( val.i_int ), + ConvertHotkey( val.i_int ), PlayStream_Event ); + var_Get( p_intf->p_vlc, "key-next", &val ); + entries[i++].Set( ConvertHotkeyModifiers( val.i_int ), + ConvertHotkey( val.i_int ), NextStream_Event ); + var_Get( p_intf->p_vlc, "key-prev", &val ); + entries[i++].Set( ConvertHotkeyModifiers( val.i_int ), + ConvertHotkey( val.i_int ), PrevStream_Event ); + var_Get( p_intf->p_vlc, "key-faster", &val ); + entries[i++].Set( ConvertHotkeyModifiers( val.i_int ), + ConvertHotkey( val.i_int ), FastStream_Event ); + var_Get( p_intf->p_vlc, "key-slower", &val ); + entries[i++].Set( ConvertHotkeyModifiers( val.i_int ), + ConvertHotkey( val.i_int ), SlowStream_Event ); wxAcceleratorTable accel( 7, entries ); @@ -639,104 +739,45 @@ void Interface::UpdateAcceleratorTable() } - - /***************************************************************************** * Event Handlers. *****************************************************************************/ -/* Work-around helper for buggy wxGTK */ -void RecursiveDestroy( wxMenu *menu ) -{ - wxMenuItemList::Node *node = menu->GetMenuItems().GetFirst(); - for( ; node; ) - { - wxMenuItem *item = node->GetData(); - node = node->GetNext(); - - /* Delete the submenus */ - wxMenu *submenu = item->GetSubMenu(); - if( submenu ) - { - RecursiveDestroy( submenu ); - } - menu->Delete( item ); - } -} void Interface::OnMenuOpen(wxMenuEvent& event) { -#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 */ +#if defined( __WXMSW__ ) +# define GetEventObject GetMenu +#endif - menu = - GetMenuBar()->Replace( 3, p_audio_menu, wxU(_("&Audio")) ); - if( menu ) delete menu; + 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") ) ); + p_settings_menu->AppendCheckItem( Bookmarks_Event, + wxU(_("&Bookmarks...") ) ); + p_settings_menu->Append( Prefs_Event, wxU(_("&Preferences...")) ); + } - b_audio_menu = 0; - } - else b_audio_menu = 1; + else if( event.GetEventObject() == p_audio_menu ) + { + p_audio_menu = AudioMenu( p_intf, this, p_audio_menu ); } + else if( event.GetEventObject() == p_video_menu ) { - if( b_video_menu ) - { - p_video_menu = VideoMenu( p_intf, this ); - - /* Work-around for buggy wxGTK */ - wxMenu *menu = GetMenuBar()->GetMenu( 4 ); - RecursiveDestroy( menu ); - /* End work-around */ - - menu = - GetMenuBar()->Replace( 4, p_video_menu, wxU(_("&Video")) ); - if( menu ) delete menu; - - b_video_menu = 0; - } - else b_video_menu = 1; + p_video_menu = VideoMenu( p_intf, this, p_video_menu ); } + else if( event.GetEventObject() == p_navig_menu ) { - 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 */ - - menu = - GetMenuBar()->Replace( 5, p_navig_menu, wxU(_("&Navigation"))); - if( menu ) delete menu; - - b_navig_menu = 0; - } - else b_navig_menu = 1; + p_navig_menu = NavigMenu( p_intf, this, p_navig_menu ); } -#else - p_audio_menu = AudioMenu( p_intf, this ); - wxMenu *menu = GetMenuBar()->Replace( 3, p_audio_menu, wxU(_("&Audio")) ); - if( menu ) delete menu; - - p_video_menu = VideoMenu( p_intf, this ); - menu = GetMenuBar()->Replace( 4, p_video_menu, wxU(_("&Video")) ); - if( menu ) delete menu; - - p_navig_menu = NavigMenu( p_intf, this ); - menu = GetMenuBar()->Replace( 5, p_navig_menu, wxU(_("&Navigation")) ); - if( menu ) delete menu; - +#if defined( __WXMSW__ ) +# undef GetEventObject #endif } @@ -771,8 +812,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")) ); @@ -791,6 +832,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; @@ -800,6 +843,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; @@ -815,17 +861,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) { @@ -859,11 +913,23 @@ void Interface::OnEnableAdjust(wxCommandEvent& event) sprintf( psz_new, "%s:adjust", psz_filters); } config_PutPsz( p_intf, "filter", psz_new ); - + 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 ); + restoredefaults_button->Enable(); brightness_slider->Enable(); saturation_slider->Enable(); contrast_slider->Enable(); hue_slider->Enable(); + gamma_slider->Enable(); } else { @@ -890,40 +956,129 @@ void Interface::OnEnableAdjust(wxCommandEvent& event) } } config_PutPsz( p_intf, "filter", psz_filters); + 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 ); } + 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()/300 ); } -void Interface::OnBrightnessUpdate( wxScrollEvent& event) +void Interface::OnAdjustUpdate( wxScrollEvent &event) { - config_PutFloat( p_intf , "brightness", (float)event.GetPosition()/200 ); + 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()/200 ); - + 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) ) @@ -1020,18 +1175,25 @@ void Interface::OnSliderUpdate( wxScrollEvent& event ) { /* Update stream date */ #define p_area p_intf->p_sys->p_input->stream.p_selected_area - char psz_time[ OFFSETTOTIME_MAX_SIZE ]; + char psz_time[ MSTRTIME_MAX_SIZE ], psz_total[ MSTRTIME_MAX_SIZE ]; + mtime_t i_seconds; + vlc_value_t val; - slider_box->SetLabel( + var_Get( p_intf->p_sys->p_input, "length", &val ); + i_seconds = val.i_time / 1000000; + secstotimestr ( psz_total, i_seconds ); + + statusbar->SetStatusText( wxU(input_OffsetToTime( p_intf->p_sys->p_input, - psz_time, - p_area->i_size * event.GetPosition() - / SLIDER_MAX_POS )) ); + psz_time, p_area->i_size * event.GetPosition() + / SLIDER_MAX_POS )) + wxString(wxT(" / ")) + + wxU(psz_total), 0 ); #undef p_area } } #endif +#undef WIN32 vlc_mutex_unlock( &p_intf->change_lock ); } @@ -1054,11 +1216,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 ); @@ -1087,11 +1246,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 ); @@ -1136,13 +1292,13 @@ void Interface::TogglePlayButton( int i_playing_status ) if( i_playing_status == PLAYING_S ) { - GetToolBar()->InsertTool( 5, PlayStream_Event, wxU(_("Pause")), + GetToolBar()->InsertTool( 0, PlayStream_Event, wxU(_("Pause")), wxBitmap( pause_xpm ), wxNullBitmap, wxITEM_NORMAL, wxU(_(HELP_PAUSE)) ); } else { - GetToolBar()->InsertTool( 5, PlayStream_Event, wxU(_("Play")), + GetToolBar()->InsertTool( 0, PlayStream_Event, wxU(_("Play")), wxBitmap( play_xpm ), wxNullBitmap, wxITEM_NORMAL, wxU(_(HELP_PLAY)) ); } @@ -1156,9 +1312,10 @@ void Interface::TogglePlayButton( int i_playing_status ) /***************************************************************************** * 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, @@ -1175,8 +1332,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 ); @@ -1187,25 +1346,31 @@ bool DragAndDrop::OnDropFiles( wxCoord, wxCoord, /***************************************************************************** * Definition of wxVolCtrl 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; + + audio_volume_t i_volume; + aout_VolumeGet( p_intf, &i_volume ); + i_volume = i_volume * 200 * 2 / AOUT_VOLUME_MAX; + SetValue( i_volume ); + SetToolTip( wxString::Format((wxString)wxU(_("Volume")) + wxT(" %d"), + i_volume ) ); } void wxVolCtrl::OnChange( wxMouseEvent& event ) { if( !event.LeftDown() && !event.LeftIsDown() ) return; - int i_volume = (GetClientSize().GetHeight() - event.GetY()) * 200 / - GetClientSize().GetHeight(); + int i_volume = event.GetX() * 200 / GetClientSize().GetWidth(); Change( i_volume ); } void wxVolCtrl::Change( int i_volume ) { - aout_VolumeSet( p_intf, i_volume * AOUT_VOLUME_MAX / 200 ); + aout_VolumeSet( p_intf, i_volume * AOUT_VOLUME_MAX / 200 / 2 ); SetValue( i_volume ); SetToolTip( wxString::Format((wxString)wxU(_("Volume")) + wxT(" %d"), i_volume ) );