* interface.cpp : wxWindows plugin for vlc
*****************************************************************************
* Copyright (C) 2000-2001 VideoLAN
- * $Id: interface.cpp,v 1.33 2003/05/24 17:52:49 gbazin Exp $
+ * $Id: interface.cpp,v 1.47 2003/07/17 18:58:23 gbazin Exp $
*
* Authors: Gildas Bazin <gbazin@netcourrier.com>
*
#include <stdio.h>
#include <vlc/vlc.h>
+#include <vlc/aout.h>
#ifdef WIN32 /* mingw32 hack */
#undef Yield
#define TOOLBAR_BMP_HEIGHT 36
/* include the icon graphic */
-#include "share/vlc32x32.xpm"
+#include "../../../share/vlc32x32.xpm"
/*****************************************************************************
* Local class declarations.
};
+class wxVolCtrl: public wxGauge
+{
+public:
+ /* Constructor */
+ wxVolCtrl( intf_thread_t *_p_intf, wxWindow* parent, wxWindowID id );
+ virtual ~wxVolCtrl() {};
+
+ void Change( int i_volume );
+
+ void OnChange( wxMouseEvent& event );
+
+private:
+ intf_thread_t *p_intf;
+
+ DECLARE_EVENT_TABLE();
+};
+
+BEGIN_EVENT_TABLE(wxVolCtrl, wxWindow)
+ /* Mouse events */
+ EVT_LEFT_DOWN(wxVolCtrl::OnChange)
+END_EVENT_TABLE()
+
/*****************************************************************************
* Event Table.
*****************************************************************************/
{
/* menu items */
Exit_Event = wxID_HIGHEST,
+ OpenFileSimple_Event,
OpenFile_Event,
OpenDisc_Event,
OpenNet_Event,
/* Menu events */
EVT_MENU(Exit_Event, Interface::OnExit)
EVT_MENU(About_Event, Interface::OnAbout)
- EVT_MENU(Playlist_Event, Interface::OnPlaylist)
- EVT_MENU(Logs_Event, Interface::OnLogs)
- EVT_MENU(FileInfo_Event, Interface::OnFileInfo)
- EVT_MENU(Prefs_Event, Interface::OnPreferences)
+
+ EVT_MENU(Playlist_Event, Interface::OnShowDialog)
+ EVT_MENU(Logs_Event, Interface::OnShowDialog)
+ EVT_MENU(FileInfo_Event, Interface::OnShowDialog)
+ EVT_MENU(Prefs_Event, Interface::OnShowDialog)
EVT_MENU_OPEN(Interface::OnMenuOpen)
#if defined( __WXMSW__ ) || defined( __WXMAC__ )
- EVT_CONTEXT_MENU(Interface::OnContextMenu)
-#else
- EVT_RIGHT_UP(Interface::OnContextMenu)
+ EVT_CONTEXT_MENU(Interface::OnContextMenu2)
#endif
+ EVT_RIGHT_UP(Interface::OnContextMenu)
/* Toolbar events */
- EVT_MENU(OpenFile_Event, Interface::OnOpenFile)
- EVT_MENU(OpenDisc_Event, Interface::OnOpenDisc)
- EVT_MENU(OpenNet_Event, Interface::OnOpenNet)
- EVT_MENU(OpenSat_Event, Interface::OnOpenSat)
+ EVT_MENU(OpenFileSimple_Event, Interface::OnShowDialog)
+ EVT_MENU(OpenFile_Event, Interface::OnShowDialog)
+ EVT_MENU(OpenDisc_Event, Interface::OnShowDialog)
+ EVT_MENU(OpenNet_Event, Interface::OnShowDialog)
+ EVT_MENU(OpenSat_Event, Interface::OnShowDialog)
EVT_MENU(StopStream_Event, Interface::OnStopStream)
EVT_MENU(PlayStream_Event, Interface::OnPlayStream)
EVT_MENU(PrevStream_Event, Interface::OnPrevStream)
/* Slider events */
EVT_COMMAND_SCROLL(SliderScroll_Event, Interface::OnSliderUpdate)
+
END_EVENT_TABLE()
/*****************************************************************************
* Constructor.
*****************************************************************************/
Interface::Interface( intf_thread_t *_p_intf ):
- wxFrame( NULL, -1, wxT(VOUT_TITLE),
+ wxFrame( NULL, -1, wxT("VLC media player"),
wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE )
{
/* Initializations */
p_intf = _p_intf;
- p_prefs_dialog = NULL;
i_old_playing_status = PAUSE_S;
- p_open_dialog = NULL;
/* Give our interface a nice little icon */
- p_intf->p_sys->p_icon = new wxIcon( vlc_xpm );
- SetIcon( *p_intf->p_sys->p_icon );
+ SetIcon( wxIcon( vlc_xpm ) );
/* Create a sizer for the main frame */
frame_sizer = new wxBoxSizer( wxHORIZONTAL );
statusbar->SetStatusWidths( 3, i_status_width );
statusbar->SetStatusText( wxString::Format(wxT("x%.2f"), 1.0), 1 );
-
/* Make sure we've got the right background colour */
SetBackgroundColour( slider_frame->GetBackgroundColour() );
Interface::~Interface()
{
/* Clean up */
- if( p_open_dialog ) delete p_open_dialog;
- if( p_prefs_dialog ) p_prefs_dialog->Destroy();
}
/*****************************************************************************
/* Create the "File" menu */
wxMenu *file_menu = new wxMenu;
- file_menu->Append( OpenFile_Event, wxU(_("&Open File...")),
+ 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(_("&Network Stream...")),
+ file_menu->Append( OpenNet_Event, wxU(_("Open &Network Stream...")),
wxU(_(HELP_NET)) );
#if 0
- file_menu->Append( OpenSat_Event, wxU(_("&Satellite Stream...")),
+ file_menu->Append( OpenSat_Event, wxU(_("Open &Satellite Stream...")),
wxU(_(HELP_NET)) );
#endif
#if 0
wxMenu *view_menu = new wxMenu;
view_menu->Append( Playlist_Event, wxU(_("&Playlist...")),
wxU(_(HELP_PLAYLIST)) );
- view_menu->Append( Logs_Event, wxU(_("&Logs...")), wxU(_(HELP_LOGS)) );
+ view_menu->Append( Logs_Event, wxU(_("&Messages...")), wxU(_(HELP_LOGS)) );
view_menu->Append( FileInfo_Event, wxU(_("&File info...")),
wxU(_(HELP_FILEINFO)) );
void Interface::CreateOurSlider()
{
- /* Create a new frame containing the slider */
+ /* 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_frame->SetSizer( slider_sizer );
slider_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, wxGROW | wxALL, 5 );
- slider_sizer->Layout();
- slider_sizer->SetSizeHints(slider_frame);
-
- /* Hide the slider by default */
- slider_frame->Hide();
-}
+ slider_sizer->Add( slider, 1, wxEXPAND | wxALL, 5 );
-void Interface::Open( int i_access_method )
-{
- /* Show/hide the open dialog */
- if( p_open_dialog == NULL )
- p_open_dialog = new OpenDialog( p_intf, this, i_access_method );
- if( p_open_dialog &&
- p_open_dialog->ShowModal( i_access_method ) == wxID_OK )
- {
- /* Update the playlist */
- playlist_t *p_playlist =
- (playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
- FIND_ANYWHERE );
- if( p_playlist == NULL )
- {
- return;
- }
-
- for( size_t i = 0; i < p_open_dialog->mrl.GetCount(); i++ )
- {
- playlist_Add( p_playlist,
- (const char *)p_open_dialog->mrl[i].mb_str(),
- PLAYLIST_APPEND | (i ? 0 : PLAYLIST_GO), PLAYLIST_END );
- }
+ volctrl = new wxVolCtrl( p_intf, slider_frame, -1 );
- TogglePlayButton( PLAYING_S );
+ /* Add everything to the frame */
+ frame_sizer->Add( slider_sizer, 1, wxEXPAND | wxBOTTOM, 5 );
+ frame_sizer->Add( volctrl, 0, wxEXPAND | wxALL, 5 );
+ slider_frame->SetSizer( frame_sizer );
+ frame_sizer->Layout();
+ frame_sizer->SetSizeHints(slider_frame);
- vlc_object_release( p_playlist );
- }
+ /* Hide the slider by default */
+ slider_frame->Hide();
}
/*****************************************************************************
}
#if defined( __WXMSW__ ) || defined( __WXMAC__ )
-void Interface::OnContextMenu(wxContextMenuEvent& event)
+void Interface::OnContextMenu2(wxContextMenuEvent& event)
{
- ::PopupMenu( p_intf, this, ScreenToClient(event.GetPosition()) );
+ if( p_intf->p_sys->pf_show_dialog )
+ p_intf->p_sys->pf_show_dialog( p_intf, INTF_DIALOG_POPUPMENU, 0 );
+ //::PopupMenu( p_intf, this, ScreenToClient(event.GetPosition()) );
}
-#else
+#endif
void Interface::OnContextMenu(wxMouseEvent& event)
{
- ::PopupMenu( p_intf, this, event.GetPosition() );
+ if( p_intf->p_sys->pf_show_dialog )
+ p_intf->p_sys->pf_show_dialog( p_intf, INTF_DIALOG_POPUPMENU, 0 );
+ //::PopupMenu( p_intf, this, event.GetPosition() );
}
-#endif
void Interface::OnExit( wxCommandEvent& WXUNUSED(event) )
{
void Interface::OnAbout( wxCommandEvent& WXUNUSED(event) )
{
wxString msg;
- msg.Printf( wxString(wxT(VOUT_TITLE)) +
+ msg.Printf( wxString(wxT("VLC media player " VERSION)) +
wxU(_(" (wxWindows interface)\n\n")) +
wxU(_("(C) 1996-2003 - the VideoLAN Team\n\n")) +
wxU(_("The VideoLAN team <videolan@videolan.org>\n"
"\nIt can play MPEG and MPEG2 files from a file or from a "
"network source.")) );
- wxMessageBox( msg, wxString::Format(wxU(_("About %s")), wxT(VOUT_TITLE)),
- wxOK | wxICON_INFORMATION, this );
-}
-
-void Interface::OnPlaylist( wxCommandEvent& WXUNUSED(event) )
-{
- /* Show/hide the playlist window */
- Playlist *p_playlist_window = p_intf->p_sys->p_playlist_window;
- if( p_playlist_window )
- {
- p_playlist_window->ShowPlaylist( ! p_playlist_window->IsShown() );
- }
+ wxMessageBox( msg, wxString::Format(wxU(_("About %s")),
+ wxT("VLC media player")), wxOK | wxICON_INFORMATION, this );
}
-void Interface::OnLogs( wxCommandEvent& WXUNUSED(event) )
+void Interface::OnShowDialog( wxCommandEvent& event )
{
- /* Show/hide the log window */
- wxFrame *p_messages_window = p_intf->p_sys->p_messages_window;
- if( p_messages_window )
+ if( p_intf->p_sys->pf_show_dialog )
{
- p_messages_window->Show( ! p_messages_window->IsShown() );
- }
-}
+ int i_id;
-void Interface::OnFileInfo( wxCommandEvent& WXUNUSED(event) )
-{
- /* Show/hide the file info window */
- wxFrame *p_fileinfo_window = p_intf->p_sys->p_fileinfo_window;
- if( p_fileinfo_window )
- {
- p_fileinfo_window->Show( ! p_fileinfo_window->IsShown() );
- }
-}
+ switch( event.GetId() )
+ {
+ case OpenFileSimple_Event:
+ i_id = INTF_DIALOG_FILE_SIMPLE;
+ break;
+ case OpenFile_Event:
+ i_id = INTF_DIALOG_FILE;
+ break;
+ case OpenDisc_Event:
+ i_id = INTF_DIALOG_DISC;
+ break;
+ case OpenNet_Event:
+ i_id = INTF_DIALOG_NET;
+ break;
+ case OpenSat_Event:
+ i_id = INTF_DIALOG_SAT;
+ break;
+ case Playlist_Event:
+ i_id = INTF_DIALOG_PLAYLIST;
+ break;
+ case Logs_Event:
+ i_id = INTF_DIALOG_MESSAGES;
+ break;
+ case FileInfo_Event:
+ i_id = INTF_DIALOG_FILEINFO;
+ break;
+ case Prefs_Event:
+ i_id = INTF_DIALOG_PREFS;
+ break;
+ default:
+ i_id = INTF_DIALOG_FILE;
+ break;
-void Interface::OnPreferences( wxCommandEvent& WXUNUSED(event) )
-{
- /* Show/hide the open dialog */
- if( p_prefs_dialog == NULL )
- {
- p_prefs_dialog = new PrefsDialog( p_intf, this );
- }
+ }
- if( p_prefs_dialog )
- {
- p_prefs_dialog->Show( true );
+ p_intf->p_sys->pf_show_dialog( p_intf, i_id, 1 );
}
}
-void Interface::OnOpenFile( wxCommandEvent& WXUNUSED(event) )
-{
- Open( FILE_ACCESS );
-}
-
-void Interface::OnOpenDisc( wxCommandEvent& WXUNUSED(event) )
-{
- Open( DISC_ACCESS );
-}
-
-void Interface::OnOpenNet( wxCommandEvent& WXUNUSED(event) )
-{
- Open( NET_ACCESS );
-}
-
-void Interface::OnOpenSat( wxCommandEvent& WXUNUSED(event) )
-{
- Open( SAT_ACCESS );
-}
-
void Interface::OnPlayStream( wxCommandEvent& WXUNUSED(event) )
{
wxCommandEvent dummy;
if( p_playlist == NULL )
{
/* If the playlist is empty, open a file requester instead */
- OnOpenFile( dummy );
+ OnShowDialog( dummy );
return;
}
- vlc_mutex_lock( &p_playlist->object_lock );
if( p_playlist->i_size )
{
- vlc_mutex_unlock( &p_playlist->object_lock );
-
input_thread_t *p_input = (input_thread_t *)vlc_object_find( p_intf,
VLC_OBJECT_INPUT,
FIND_ANYWHERE );
}
/* Stream is paused, resume it */
- playlist_Play( p_playlist );
+ input_SetStatus( p_input, INPUT_STATUS_PLAY );
TogglePlayButton( PLAYING_S );
vlc_object_release( p_input );
vlc_object_release( p_playlist );
{
vlc_mutex_unlock( &p_playlist->object_lock );
vlc_object_release( p_playlist );
- OnOpenFile( dummy );
+ OnShowDialog( dummy );
}
}
if( i_playing_status == PLAYING_S )
{
GetToolBar()->InsertTool( 5, PlayStream_Event, wxU(_("Pause")),
- wxBitmap( pause_xpm ) );
+ wxBitmap( pause_xpm ), wxNullBitmap,
+ wxITEM_NORMAL, wxU(_(HELP_PAUSE)) );
}
else
{
GetToolBar()->InsertTool( 5, PlayStream_Event, wxU(_("Play")),
- wxBitmap( play_xpm ) );
+ wxBitmap( play_xpm ), wxNullBitmap,
+ wxITEM_NORMAL, wxU(_(HELP_PLAY)) );
}
GetToolBar()->Realize();
return TRUE;
}
#endif
+
+/*****************************************************************************
+ * 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 )
+{
+ p_intf = _p_intf;
+}
+
+void wxVolCtrl::OnChange( wxMouseEvent& event )
+{
+ int i_volume = (GetRect().height - event.GetY()) * 200 / GetRect().height;
+ Change( i_volume );
+}
+
+void wxVolCtrl::Change( int i_volume )
+{
+ aout_VolumeSet( p_intf, i_volume * AOUT_VOLUME_MAX / 200 );
+ SetValue( i_volume );
+ SetToolTip( wxString::Format((wxString)wxU(_("Volume")) + wxT(" %d"),
+ i_volume ) );
+}