X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fwxwindows%2Finterface.cpp;h=7f1963c29ef407f452575ba11dd284ba2b0bec49;hb=51d84ecbc8c0959991a795a442176faa85880b92;hp=78b91d98500b34a71ddadbe570b94e8036acc017;hpb=afd3be739db07f67abdc33c78702cadb78080cdc;p=vlc diff --git a/modules/gui/wxwindows/interface.cpp b/modules/gui/wxwindows/interface.cpp index 78b91d9850..7f1963c29e 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, 2003 VideoLAN - * $Id: interface.cpp,v 1.75 2003/12/03 13:41:49 rocky 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 @@ -28,31 +28,23 @@ #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/playlist.xpm" +#include "bitmaps/speaker.xpm" -#include - -#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" @@ -84,10 +76,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 ); @@ -107,6 +100,8 @@ END_EVENT_TABLE() * Event Table. *****************************************************************************/ +DEFINE_LOCAL_EVENT_TYPE( wxEVT_INTF ); + /* IDs for the controls and the menu commands */ enum { @@ -118,18 +113,21 @@ enum OpenFile_Event, OpenDisc_Event, OpenNet_Event, + OpenCapture_Event, OpenSat_Event, OpenOther_Event, EjectDisc_Event, - Stream_Event, + Wizard_Event, Playlist_Event, Logs_Event, FileInfo_Event, Prefs_Event, - Extra_Event, + Extended_Event, +// Undock_Event, + Bookmarks_Event, Skins_Event, SliderScroll_Event, @@ -140,15 +138,6 @@ enum SlowStream_Event, FastStream_Event, - Adjust_Event, - Hue_Event, - Contrast_Event, - Brightness_Event, - Saturation_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) */ @@ -167,11 +156,10 @@ 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( Undock_Event, Interface::OnUndock ) - EVT_COMBOBOX( Ratio_Event, Interface::OnRatio) - EVT_CHECKBOX( Visual_Event, Interface::OnEnableVisual) + EVT_MENU( Bookmarks_Event, Interface::OnShowDialog) #if defined( __WXMSW__ ) || defined( __WXMAC__ ) EVT_CONTEXT_MENU(Interface::OnContextMenu2) @@ -184,8 +172,9 @@ BEGIN_EVENT_TABLE(Interface, wxFrame) 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(Stream_Event, Interface::OnStream) + EVT_MENU(Wizard_Event, Interface::OnShowDialog) EVT_MENU(StopStream_Event, Interface::OnStopStream) EVT_MENU(PlayStream_Event, Interface::OnPlayStream) EVT_MENU(PrevStream_Event, Interface::OnPrevStream) @@ -196,10 +185,9 @@ BEGIN_EVENT_TABLE(Interface, wxFrame) /* Slider events */ EVT_COMMAND_SCROLL(SliderScroll_Event, Interface::OnSliderUpdate) - 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() @@ -208,12 +196,15 @@ 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; i_old_playing_status = PAUSE_S; b_extra = VLC_FALSE; +// b_undock = VLC_FALSE; + + extra_window = NULL; /* Give our interface a nice little icon */ SetIcon( wxIcon( vlc_xpm ) ); @@ -226,7 +217,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(); @@ -234,13 +225,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(); + extra_frame = new ExtraPanel( p_intf, this ); frame_sizer->Add( extra_frame, 0, wxEXPAND , 0 ); frame_sizer->Hide( extra_frame ); @@ -252,20 +238,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 ); @@ -282,82 +279,69 @@ 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_SIMPLE N_("Quick file open") -#define HELP_ADV N_("Advanced open") -#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_STREAMWIZARD N_("Open the streaming wizard") -#define HELP_OTHER N_("Open other types of inputs") - -#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(_("Quick &Open ...")), - wxU(_(HELP_SIMPLE)) ); + file_menu->Append( OpenFileSimple_Event, + wxU(_("Quick &Open File...\tCtrl-O")) ); file_menu->AppendSeparator(); - 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))); + 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")) ); -#if 0 - file_menu->Append( OpenSat_Event, wxU(_("Open &Satellite Stream...")), - wxU(_(HELP_NET)) ); -#endif file_menu->AppendSeparator(); - file_menu->Append( Stream_Event, wxU(_("Streaming Wizard...")), - wxU(_(HELP_STREAMWIZARD)) ); + file_menu->Append( Wizard_Event, wxU(_("&Wizard...\tCtrl-W")) ); 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(_("&Stream and Media info...")), - wxU(_(HELP_FILEINFO)) ); - - /* Create the "Settings" menu */ - p_settings_menu = new wxMenu; - b_settings_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 "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 "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 ); @@ -372,22 +356,76 @@ 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__) + 22 /* 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 } -void Interface::CreateOurToolBar() +class VLCVolCtrl : public wxControl { -#define HELP_STOP N_("Stop current playlist item") +public: + VLCVolCtrl( intf_thread_t *p_intf, wxWindow *p_parent, wxGauge ** ); + virtual ~VLCVolCtrl() {}; + + virtual void OnPaint( wxPaintEvent &event ); -#define HELP_PLAY N_("Play current playlist item") -#define HELP_PAUSE N_("Pause current playlist item") -#define HELP_PLO N_("Open playlist") + private: + DECLARE_EVENT_TABLE() + int i_y_offset; +}; + +BEGIN_EVENT_TABLE(VLCVolCtrl, wxControl) + EVT_PAINT(VLCVolCtrl::OnPaint) +END_EVENT_TABLE() + +#if defined(__WXGTK__) +#define VLCVOL_HEIGHT p_parent->GetSize().GetHeight() +#else +#define VLCVOL_HEIGHT TOOLBAR_BMP_HEIGHT +#endif +VLCVolCtrl::VLCVolCtrl( intf_thread_t *p_intf, wxWindow *p_parent, + wxGauge **pp_volctrl ) + :wxControl( p_parent, -1, wxDefaultPosition, wxSize(64, VLCVOL_HEIGHT ), + wxBORDER_NONE ), + i_y_offset((VLCVOL_HEIGHT - TOOLBAR_BMP_HEIGHT) / 2) +{ + *pp_volctrl = new wxVolCtrl( p_intf, this, -1, wxPoint( 18, i_y_offset ), + wxSize( 44, TOOLBAR_BMP_HEIGHT ) ); +} + +void VLCVolCtrl::OnPaint( wxPaintEvent &evt ) +{ + wxPaintDC dc( this ); + wxBitmap mPlayBitmap( speaker_xpm ); + dc.DrawBitmap( mPlayBitmap, 0, i_y_offset, TRUE ); +} + +void Interface::CreateOurToolBar() +{ +#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") @@ -396,61 +434,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( OpenFileSimple_Event, wxU(_("Quick")), - wxBitmap( file_xpm ), wxU(_(HELP_SIMPLE)) ); - + toolbar->AddTool( OpenFile_Event, wxT(""), + wxBitmap( eject_xpm ), wxU(_(HELP_OPEN)) ); toolbar->AddSeparator(); - - 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( 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 @@ -461,28 +485,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); @@ -492,356 +503,134 @@ void Interface::CreateOurSlider() } -void Interface::CreateOurExtraPanel() +static int ConvertHotkeyModifiers( int i_hotkey ) { - 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 */ - wxStaticBox *adjust_box = - new wxStaticBox( extra_frame, -1, wxU(_("Image adjust")) ); - - /* Create the size for the frame */ - wxStaticBoxSizer *adjust_sizer = - new wxStaticBoxSizer( adjust_box, wxVERTICAL ); - adjust_sizer->SetMinSize( -1, 50 ); - - /* Create every controls */ - - /* Create the adjust button */ - wxCheckBox * adjust_check = new wxCheckBox( extra_frame, Adjust_Event, - wxU(_("Enable"))); - - - 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); - - extra_sizer->Add(adjust_sizer,1,wxBOTTOM,5); - - - /* Create sizer to surround the other controls */ - wxBoxSizer *other_sizer = new wxBoxSizer( wxVERTICAL ); - - - wxStaticBox *video_box = - new wxStaticBox( extra_frame, -1, wxU(_("Video Options")) ); - /* Create the sizer for the frame */ - wxStaticBoxSizer *video_sizer = - new wxStaticBoxSizer( video_box, wxVERTICAL ); - video_sizer->SetMinSize( -1, 50 ); - - 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, - wxU(_("Ratio")) ); - - 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(); - - video_sizer->Add( ratio_sizer , 0 , wxALL , 0 ); - video_sizer->Layout(); - - wxBoxSizer *visual_sizer = new wxBoxSizer( wxHORIZONTAL ); - - wxCheckBox *visual_checkbox = new wxCheckBox( extra_frame, Visual_Event, - wxU(_("Visualisation")) ); - - 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(); + 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; +} - other_sizer->Add( video_sizer, 0, wxALL | wxEXPAND , 0); - other_sizer->Add( audio_sizer , 0 , wxALL | wxEXPAND , 0 ); - other_sizer->Layout(); +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; +} - extra_sizer->Add(other_sizer,0,wxBOTTOM,5); +void Interface::SetupHotkeys() +{ + struct vlc_t::hotkey *p_hotkeys = p_intf->p_vlc->p_hotkeys; + int i_hotkeys; - extra_frame->SetSizer( extra_sizer ); + /* Count number of hoteys */ + for( i_hotkeys = 0; p_hotkeys[i_hotkeys].psz_action != NULL; i_hotkeys++ ); - /* Layout the whole panel */ - extra_sizer->Layout(); + p_intf->p_sys->i_first_hotkey_event = wxID_HIGHEST + 7000; + p_intf->p_sys->i_hotkeys = i_hotkeys; - extra_sizer->SetSizeHints(extra_frame); + wxAcceleratorEntry p_entries[i_hotkeys]; - /* Write down initial values */ - psz_filters = config_GetPsz( p_intf, "audio-filter" ); - if( psz_filters && strstr( psz_filters, "visual" ) ) + /* Setup the hotkeys as accelerators */ + for( int i = 0; i < i_hotkeys; i++ ) { - visual_checkbox->SetValue(1); + 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 ); } - if( psz_filters ) free( psz_filters ); - psz_filters = config_GetPsz( p_intf, "filter" ); - if( psz_filters && strstr( psz_filters, "adjust" ) ) + wxAcceleratorTable accel( i_hotkeys, p_entries ); + + if( !accel.Ok() ) { - adjust_check->SetValue( 1 ); - saturation_slider->Enable(); - contrast_slider->Enable(); - brightness_slider->Enable(); - hue_slider->Enable(); + msg_Err( p_intf, "invalid accelerator table" ); } else { - adjust_check->SetValue( 0 ); - saturation_slider->Disable(); - contrast_slider->Disable(); - brightness_slider->Disable(); - hue_slider->Disable(); + SetAcceleratorTable( accel ); + msg_Dbg( p_intf, "accelerator table loaded" ); } - 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) ); - - extra_frame->Hide(); -} - -void Interface::UpdateAcceleratorTable() -{ - /* Set some hotkeys */ - wxAcceleratorEntry entries[7]; - vlc_value_t val; - int i = 0; - - 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 ); - - if( !accel.Ok() ) - msg_Err( p_intf, "invalid accelerator table" ); - - SetAcceleratorTable( accel ); - msg_Dbg( p_intf, "accelerator table loaded" ); - } /***************************************************************************** * 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 defined( __WXMSW__ ) +# define GetEventObject GetMenu +#endif + if( event.GetEventObject() == p_settings_menu ) { - if( b_settings_menu ) - { - p_settings_menu = SettingsMenu( p_intf, this ); - - /* Add static items */ - p_settings_menu->AppendCheckItem( Extra_Event, - wxU(_("&Extended GUI") ), wxU(_(EXTRA_PREFS)) ); - p_settings_menu->Append( Prefs_Event, wxU(_("&Preferences...")), - wxU(_(HELP_PREFS)) ); - - /* Work-around for buggy wxGTK */ - wxMenu *menu = GetMenuBar()->GetMenu( 2 ); - RecursiveDestroy( menu ); - /* End work-around */ - - menu = GetMenuBar()->Replace( 2, p_settings_menu, - wxU(_("&Settings"))); - if( menu ) delete menu; + p_settings_menu = SettingsMenu( p_intf, this, p_settings_menu ); - b_settings_menu = 0; - } - else b_settings_menu = 1; + /* Add static items */ + p_settings_menu->AppendCheckItem( Extended_Event, + wxU(_("&Extended GUI") ) ); + if( b_extra ) p_settings_menu->Check( Extended_Event, TRUE ); +#if 0 + p_settings_menu->AppendCheckItem( Undock_Event, + wxU(_("&Undock Ext. GUI") ) ); + if( b_undock ) p_settings_menu->Check( Undock_Event, TRUE ); +#endif + p_settings_menu->Append( Bookmarks_Event, wxU(_("&Bookmarks...") ) ); + p_settings_menu->Append( Prefs_Event, wxU(_("&Preferences...")) ); } + else 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 */ - - menu = - GetMenuBar()->Replace( 3, p_audio_menu, wxU(_("&Audio")) ); - if( menu ) delete menu; - - b_audio_menu = 0; - } - else b_audio_menu = 1; + 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_settings_menu = SettingsMenu( p_intf, this ); - /* Add static items */ - p_settings_menu->AppendCheckItem( Extra_Event, wxU(_("&Extended GUI") ), - wxU(_(EXTRA_PREFS)) ); - p_settings_menu->Append( Prefs_Event, wxU(_("&Preferences...")), - wxU(_(HELP_PREFS)) ); - wxMenu *menu = - GetMenuBar()->Replace( 2, p_settings_menu, wxU(_("&Settings")) ); - if( menu ) delete menu; - - p_audio_menu = AudioMenu( p_intf, this ); - 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 - } #if defined( __WXMSW__ ) || defined( __WXMAC__ ) @@ -873,9 +662,9 @@ void Interface::OnExit( wxCommandEvent& WXUNUSED(event) ) void Interface::OnAbout( wxCommandEvent& WXUNUSED(event) ) { wxString msg; - msg.Printf( wxString(wxT("VLC media player " VERSION)) + + msg.Printf( wxString(wxT("VLC media player " PACKAGE_VERSION)) + wxU(_(" (wxWindows interface)\n\n")) + - wxU(_("(C) 1996-2003 - the VideoLAN Team\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")) ); @@ -906,6 +695,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; @@ -921,157 +713,116 @@ void Interface::OnShowDialog( wxCommandEvent& event ) case Prefs_Event: i_id = INTF_DIALOG_PREFS; 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::OnStream( wxCommandEvent& event ) +void Interface::OnExtended(wxCommandEvent& event) { - StreamDialog *p_stream_dialog = new StreamDialog(p_intf,this); - p_stream_dialog->Show(); -} - + b_extra = (b_extra == VLC_TRUE ? VLC_FALSE : VLC_TRUE ); -void Interface::OnExtra(wxCommandEvent& event) -{ - if( b_extra == VLC_FALSE) + if( b_extra == VLC_FALSE ) { - extra_frame->Show(); - frame_sizer->Show( extra_frame ); - b_extra = VLC_TRUE; + extra_frame->Hide(); + frame_sizer->Hide( extra_frame ); } else { - extra_frame->Hide(); - frame_sizer->Hide( extra_frame ); - b_extra = VLC_FALSE; + extra_frame->Show(); + frame_sizer->Show( extra_frame ); } 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) +#if 0 + if( b_undock == VLC_TRUE ) { - psz_new = strdup( "adjust" ); + fprintf(stderr,"Deleting window\n"); + if( extra_window ) + { + delete extra_window; + extra_window = NULL; + } } else { - psz_new= (char *) malloc(strlen(psz_filters) + 8 ); - sprintf( psz_new, "%s:adjust", psz_filters); + extra_frame->Hide(); + frame_sizer->Hide( extra_frame ); + frame_sizer->Layout(); + frame_sizer->Fit(this); } - 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 ); - brightness_slider->Enable(); - saturation_slider->Enable(); - contrast_slider->Enable(); - hue_slider->Enable(); } else { - if( psz_filters != NULL ) + if( b_undock == VLC_TRUE ) { - - 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); - 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 ) + fprintf(stderr,"Creating window\n"); + extra_frame->Hide(); + frame_sizer->Hide( extra_frame ); + frame_sizer->Detach( extra_frame ); + frame_sizer->Layout(); + frame_sizer->Fit(this); + extra_window = new ExtraWindow( p_intf, this, extra_frame ); + } + else + { + fprintf(stderr,"Deleting window\n"); + if( extra_window ) { - var_Set( p_vout, "filter", val); - vlc_object_release( p_vout ); + delete extra_window; } - if( val.psz_string ) free( val.psz_string ); + extra_frame->Show(); + frame_sizer->Show( extra_frame ); + frame_sizer->Layout(); + frame_sizer->Fit(this); } - brightness_slider->Disable(); - saturation_slider->Disable(); - contrast_slider->Disable(); - hue_slider->Disable(); } - if(psz_filters) free(psz_filters); - if(psz_new) free(psz_new); -} - -void Interface::OnHueUpdate( wxScrollEvent& event) -{ - config_PutInt( p_intf , "hue" , event.GetPosition() ); -} - -void Interface::OnSaturationUpdate( wxScrollEvent& event) -{ - config_PutFloat( p_intf , "saturation" , (float)event.GetPosition()/100 ); -} - -void Interface::OnBrightnessUpdate( wxScrollEvent& event) -{ - config_PutFloat( p_intf , "brightness", (float)event.GetPosition()/100 ); } -void Interface::OnContrastUpdate(wxScrollEvent& event) +void Interface::OnUndock(wxCommandEvent& event) { - config_PutFloat( p_intf , "contrast" , (float)event.GetPosition()/100 ); + b_undock = (b_undock == VLC_TRUE ? VLC_FALSE : VLC_TRUE ); -} - -void Interface::OnRatio( wxCommandEvent& event ) -{ - config_PutPsz( p_intf, "aspect-ratio", ratio_combo->GetValue().mb_str() ); -} - -void Interface::OnEnableVisual(wxCommandEvent& event) -{ - if( event.IsChecked() ) + if( b_extra == VLC_TRUE ) { - config_PutPsz( p_intf, "audio-filter", "visual" ); - } - else - { - config_PutPsz( p_intf, "audio-filter", "" ); + if( b_undock == VLC_FALSE ) + { + fprintf(stderr,"Deleting window\n"); + if( extra_window ) + { + delete extra_window; + extra_window = NULL; + } + extra_frame->Show(); + frame_sizer->Show( extra_frame ); + frame_sizer->Layout(); + frame_sizer->Fit(this); + } + else + { + fprintf(stderr,"Creating window\n"); + extra_frame->Hide(); + frame_sizer->Hide( extra_frame ); + frame_sizer->Detach( extra_frame ); + frame_sizer->Layout(); + frame_sizer->Fit(this); + extra_window = new ExtraWindow( p_intf, this, extra_frame ); + } } } +#endif void Interface::OnPlayStream( wxCommandEvent& WXUNUSED(event) ) { @@ -1166,19 +917,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 ); } @@ -1192,19 +946,21 @@ void Interface::OnPrevStream( wxCommandEvent& WXUNUSED(event) ) return; } - vlc_mutex_lock( &p_playlist->object_lock ); + /* FIXME --fenrir */ +#if 0 if( p_playlist->p_input != NULL ) { vlc_mutex_lock( &p_playlist->p_input->stream.stream_lock ); if( p_playlist->p_input->stream.p_selected_area->i_id > 1 ) { vlc_value_t val; val.b_bool = VLC_TRUE; - vlc_mutex_unlock( &p_playlist->p_input->stream.stream_lock ); + vlc_mutex_unlock( &p_playlist->p_input->stream.stream_lock ); var_Set( p_playlist->p_input, "prev-title", val ); - } else - 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 ); +#endif playlist_Prev( p_playlist ); vlc_object_release( p_playlist ); @@ -1220,6 +976,9 @@ void Interface::OnNextStream( wxCommandEvent& WXUNUSED(event) ) return; } + /* FIXME --fenrir */ +#if 0 + var_Change( p_input, "title", VLC_VAR_CHOICESCOUNT, &val, NULL ); vlc_mutex_lock( &p_playlist->object_lock ); if( p_playlist->p_input != NULL ) { @@ -1229,13 +988,13 @@ void Interface::OnNextStream( wxCommandEvent& WXUNUSED(event) ) p_playlist->p_input->stream.i_area_nb - 1 ) { vlc_value_t val; val.b_bool = VLC_TRUE; - vlc_mutex_unlock( &p_playlist->p_input->stream.stream_lock ); + vlc_mutex_unlock( &p_playlist->p_input->stream.stream_lock ); var_Set( p_playlist->p_input, "next-title", val ); - } else - 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 ); - +#endif playlist_Next( p_playlist ); vlc_object_release( p_playlist ); } @@ -1277,13 +1036,13 @@ void Interface::TogglePlayButton( int i_playing_status ) if( i_playing_status == PLAYING_S ) { - GetToolBar()->InsertTool( 8, PlayStream_Event, wxU(_("Pause")), + GetToolBar()->InsertTool( 2, PlayStream_Event, wxU(_("Pause")), wxBitmap( pause_xpm ), wxNullBitmap, wxITEM_NORMAL, wxU(_(HELP_PAUSE)) ); } else { - GetToolBar()->InsertTool( 8, PlayStream_Event, wxU(_("Play")), + GetToolBar()->InsertTool( 2, PlayStream_Event, wxU(_("Play")), wxBitmap( play_xpm ), wxNullBitmap, wxITEM_NORMAL, wxU(_(HELP_PLAY)) ); } @@ -1293,7 +1052,7 @@ 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. *****************************************************************************/ @@ -1317,7 +1076,8 @@ 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_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 ); @@ -1328,28 +1088,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 ) ); }