/*****************************************************************************
* interface.cpp: WinCE gui plugin for VLC
*****************************************************************************
- * Copyright (C) 2003 VideoLAN
+ * Copyright (C) 2003 the VideoLAN team
* $Id$
*
* Authors: Marodon Cedric <cedric_marodon@yahoo.fr>
#include "wince.h"
-#include <winuser.h>
-#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>
#include <commdlg.h>
#define HELP_FILEINFO _T("Show information about the file being played")
#define HELP_PREFS _T("Go to the preferences menu")
-#define EXTRA_PREFS _T("Shows the extended GUI")
#define HELP_ABOUT _T("About this program")
/*****************************************************************************
* Constructor.
*****************************************************************************/
-BOOL Interface::InitInstance( HINSTANCE hInstance, intf_thread_t *_p_intf )
+Interface::Interface( intf_thread_t *p_intf, CBaseWindow *p_parent,
+ HINSTANCE h_inst )
+ : CBaseWindow( p_intf, p_parent, h_inst ),
+ hwndMain(0), hwndCB(0), hwndTB(0), hwndSlider(0), hwndLabel(0),
+ hwndVol(0), hwndSB(0), timer(0), video(0), b_volume_hold(0)
+{
+}
+
+Interface::~Interface()
+{
+ if( timer ) delete timer;
+ if( video ) delete video;
+}
+
+BOOL Interface::InitInstance()
{
/* Initializations */
- pIntf = _p_intf;
- hwndMain = hwndCB = hwndTB = hwndSlider = hwndLabel = hwndVol = hwndSB = 0;
i_old_playing_status = PAUSE_S;
- hInst = hInstance; // Store instance handle in our global variable
-
- // Register window class
- WNDCLASS wc;
- wc.style = CS_HREDRAW | CS_VREDRAW ;
- wc.lpfnWndProc = (WNDPROC)BaseWndProc;
- wc.cbClsExtra = 0;
- wc.cbWndExtra = 0;
- wc.hIcon = NULL;
- wc.hInstance = hInstance;
- wc.hCursor = NULL;
- wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
- wc.lpszMenuName = NULL;
- wc.lpszClassName = _T("VLC WinCE");
- if( !RegisterClass( &wc ) ) return FALSE;
-
int i_style = WS_VISIBLE;
#ifndef UNDER_CE
hwndMain =
CreateWindow( _T("VLC WinCE"), _T("VLC media player"), i_style,
0, MENU_HEIGHT, CW_USEDEFAULT, CW_USEDEFAULT,
- NULL, NULL, hInstance, (void *)this );
+ NULL, NULL, GetInstance(), (void *)this );
if( !hwndMain ) return FALSE;
PURPOSE:
Creates a menu bar.
***********************************************************************/
-static HWND CreateMenuBar( HWND hwnd, HINSTANCE hInst )
+HWND Interface::CreateMenuBar( HWND hwnd, HINSTANCE hInst )
{
+ HMENU menu_file, menu_view;
+
#ifdef UNDER_CE
SHMENUBARINFO mbi;
memset( &mbi, 0, sizeof(SHMENUBARINFO) );
tbbi.dwMask = TBIF_LPARAM;
SendMessage( mbi.hwndMB, TB_GETBUTTONINFO, IDM_FILE, (LPARAM)&tbbi );
- HMENU hmenu_file = (HMENU)tbbi.lParam;
- RemoveMenu( hmenu_file, 0, MF_BYPOSITION );
+ menu_file = (HMENU)tbbi.lParam;
+ RemoveMenu( menu_file, 0, MF_BYPOSITION );
SendMessage( mbi.hwndMB, TB_GETBUTTONINFO, IDM_VIEW, (LPARAM)&tbbi );
- HMENU hmenu_view = (HMENU)tbbi.lParam;
- RemoveMenu( hmenu_view, 0, MF_BYPOSITION );
+ menu_view = (HMENU)tbbi.lParam;
+ RemoveMenu( menu_view, 0, MF_BYPOSITION );
SendMessage( mbi.hwndMB, TB_GETBUTTONINFO, IDM_SETTINGS, (LPARAM)&tbbi );
- HMENU hmenu_settings = (HMENU)tbbi.lParam;
+ menu_settings = (HMENU)tbbi.lParam;
+ SendMessage( mbi.hwndMB, TB_GETBUTTONINFO, IDM_VIDEO, (LPARAM)&tbbi );
+ menu_video = (HMENU)tbbi.lParam;
+ SendMessage( mbi.hwndMB, TB_GETBUTTONINFO, IDM_AUDIO, (LPARAM)&tbbi );
+ menu_audio = (HMENU)tbbi.lParam;
+ SendMessage( mbi.hwndMB, TB_GETBUTTONINFO, IDM_NAVIGATION, (LPARAM)&tbbi );
+ menu_navigation = (HMENU)tbbi.lParam;
#else
- HMENU hmenu_file = CreatePopupMenu();
- HMENU hmenu_view = CreatePopupMenu();
- HMENU hmenu_settings = CreatePopupMenu();
- HMENU hmenu_audio = CreatePopupMenu();
- HMENU hmenu_video = CreatePopupMenu();
- HMENU hmenu_navigation = CreatePopupMenu();
+ menu_file = CreatePopupMenu();
+ menu_view = CreatePopupMenu();
+ menu_settings = CreatePopupMenu();
+ menu_audio = CreatePopupMenu();
+ menu_video = CreatePopupMenu();
+ menu_navigation = CreatePopupMenu();
#endif
- AppendMenu( hmenu_file, MF_STRING, ID_FILE_QUICKOPEN,
- _T("Quick &Open File") );
- AppendMenu( hmenu_file, MF_SEPARATOR, 0, 0 );
- AppendMenu( hmenu_file, MF_STRING, ID_FILE_OPENFILE,
- _T("Open &File") );
- AppendMenu( hmenu_file, MF_STRING, ID_FILE_OPENNET,
- _T("Open Network Stream") );
- AppendMenu( hmenu_file, MF_SEPARATOR, 0, 0 );
- AppendMenu( hmenu_file, MF_STRING, ID_FILE_ABOUT,
+ AppendMenu( menu_file, MF_STRING, ID_FILE_QUICKOPEN,
+ _T("Quick &Open File...") );
+ AppendMenu( menu_file, MF_SEPARATOR, 0, 0 );
+ AppendMenu( menu_file, MF_STRING, ID_FILE_OPENFILE,
+ _T("Open &File...") );
+ AppendMenu( menu_file, MF_STRING, ID_FILE_OPENDIR,
+ _T("Open &Directory...") );
+ AppendMenu( menu_file, MF_STRING, ID_FILE_OPENNET,
+ _T("Open &Network Stream...") );
+ AppendMenu( menu_file, MF_SEPARATOR, 0, 0 );
+ AppendMenu( menu_file, MF_STRING, ID_FILE_ABOUT,
_T("About VLC") );
- AppendMenu( hmenu_file, MF_STRING, ID_FILE_EXIT,
+ AppendMenu( menu_file, MF_STRING, ID_FILE_EXIT,
_T("E&xit") );
- AppendMenu( hmenu_view, MF_STRING, ID_VIEW_PLAYLIST,
- _T("&Playlist") );
- AppendMenu( hmenu_view, MF_STRING, ID_VIEW_MESSAGES,
- _T("&Messages") );
- AppendMenu( hmenu_view, MF_STRING, ID_VIEW_STREAMINFO,
- _T("&Stream and Media info") );
+ AppendMenu( menu_view, MF_STRING, ID_VIEW_PLAYLIST,
+ _T("&Playlist...") );
+ AppendMenu( menu_view, MF_STRING, ID_VIEW_MESSAGES,
+ _T("&Messages...") );
+ AppendMenu( menu_view, MF_STRING, ID_VIEW_STREAMINFO,
+ _T("Stream and Media &info...") );
- AppendMenu( hmenu_settings, MF_STRING, ID_SETTINGS_EXTEND,
- _T("&Extended GUI") );
- AppendMenu( hmenu_settings, MF_STRING, ID_SETTINGS_PREF,
+ AppendMenu( menu_settings, MF_STRING, ID_PREFERENCES,
_T("&Preferences...") );
#else
HMENU hmenu = CreateMenu();
- AppendMenu( hmenu, MF_POPUP|MF_STRING, (UINT)hmenu_file, _T("File") );
- AppendMenu( hmenu, MF_POPUP|MF_STRING, (UINT)hmenu_view, _T("View") );
- AppendMenu( hmenu, MF_POPUP|MF_STRING, (UINT)hmenu_settings,
+ AppendMenu( hmenu, MF_POPUP|MF_STRING, (UINT)menu_file, _T("File") );
+ AppendMenu( hmenu, MF_POPUP|MF_STRING, (UINT)menu_view, _T("View") );
+ AppendMenu( hmenu, MF_POPUP|MF_STRING, (UINT)menu_settings,
_T("Settings") );
- AppendMenu( hmenu, MF_POPUP|MF_STRING, (UINT)hmenu_audio, _T("Audio") );
- AppendMenu( hmenu, MF_POPUP|MF_STRING, (UINT)hmenu_video, _T("Video") );
- AppendMenu( hmenu, MF_POPUP|MF_STRING, (UINT)hmenu_navigation,
- _T("Nav.") );
+ AppendMenu( hmenu, MF_POPUP|MF_STRING, (UINT)menu_audio, _T("Audio") );
+ AppendMenu( hmenu, MF_POPUP|MF_STRING, (UINT)menu_video, _T("Video") );
+ AppendMenu( hmenu, MF_POPUP|MF_STRING, (UINT)menu_navigation, _T("Nav") );
SetMenu( hwnd, hmenu );
- return hwnd;
+ return 0;
#endif
}
return hwndSB;
}
-/***********************************************************************
-FUNCTION:
- CreateDialogBox
-
-PURPOSE:
- Creates a Dialog Box.
-***********************************************************************/
-int CBaseWindow::CreateDialogBox( HWND hwnd, CBaseWindow *p_obj )
-{
- uint8_t p_buffer[sizeof(DLGTEMPLATE) + sizeof(WORD) * 4];
- DLGTEMPLATE *p_dlg_template = (DLGTEMPLATE *)p_buffer;
- memset( p_dlg_template, 0, sizeof(DLGTEMPLATE) + sizeof(WORD) * 4 );
-
- // these values are arbitrary, they won't be used normally anyhow
- p_dlg_template->x = 0; p_dlg_template->y = 0;
- p_dlg_template->cx = 300; p_dlg_template->cy = 300;
- p_dlg_template->style =
- DS_MODALFRAME|WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_SIZEBOX;
-
- return DialogBoxIndirectParam( GetModuleHandle(0), p_dlg_template, hwnd,
- (DLGPROC)p_obj->BaseWndProc, (LPARAM)p_obj );
-}
-
-/***********************************************************************
-FUNCTION:
- BaseWndProc
-
-PURPOSE:
- Processes messages sent to the main window.
-***********************************************************************/
-LRESULT CALLBACK CBaseWindow::BaseWndProc( HWND hwnd, UINT msg, WPARAM wParam,
- LPARAM lParam )
-{
- CBaseWindow *p_obj;
-
- // check to see if a copy of the 'this' pointer needs to be saved
- if( msg == WM_CREATE )
- {
- p_obj = (CBaseWindow *)(((LPCREATESTRUCT)lParam)->lpCreateParams);
- SetWindowLong( hwnd, GWL_USERDATA,
- (LONG)((LPCREATESTRUCT)lParam)->lpCreateParams );
-
- p_obj->hWnd = hwnd;
- }
-
- if( msg == WM_INITDIALOG )
- {
- p_obj = (CBaseWindow *)lParam;
- SetWindowLong( hwnd, GWL_USERDATA, lParam );
- p_obj->hWnd = hwnd;
- }
-
- // Retrieve the pointer
- p_obj = (CBaseWindow *)GetWindowLong( hwnd, GWL_USERDATA );
-
- if( !p_obj ) return DefWindowProc( hwnd, msg, wParam, lParam );
-
- // Filter message through child classes
- return p_obj->WndProc( hwnd, msg, wParam, lParam );
-}
-
/***********************************************************************
FUNCTION:
WndProc
PURPOSE:
Processes messages sent to the main window.
***********************************************************************/
-LRESULT CALLBACK Interface::WndProc( HWND hwnd, UINT msg, WPARAM wp,
- LPARAM lp )
+LRESULT Interface::WndProc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp )
{
switch( msg )
{
#endif
/* Video window */
- if( config_GetInt( pIntf, "wince-embed" ) )
- video = CreateVideoWindow( pIntf, hwnd );
+ if( config_GetInt( p_intf, "wince-embed" ) )
+ video = CreateVideoWindow( p_intf, hwnd );
- ti = new Timer(pIntf, hwnd, this);
-
- // Hide the SIP button (WINCE only)
- SetForegroundWindow( hwnd );
- SHFullScreen( GetForegroundWindow(), SHFS_HIDESIPBUTTON );
+ timer = new Timer( p_intf, hwnd, this );
break;
case WM_COMMAND:
switch( GET_WM_COMMAND_ID(wp,lp) )
{
case ID_FILE_QUICKOPEN:
- OnOpenFileSimple();
- break;
-
case ID_FILE_OPENFILE:
- open = new OpenDialog( pIntf, hInst, FILE_ACCESS,
- ID_FILE_OPENFILE, OPEN_NORMAL );
- CreateDialogBox( hwnd, open );
- delete open;
- break;
-
+ case ID_FILE_OPENDIR:
case ID_FILE_OPENNET:
- open = new OpenDialog( pIntf, hInst, NET_ACCESS, ID_FILE_OPENNET,
- OPEN_NORMAL );
- CreateDialogBox( hwnd, open );
- delete open;
- break;
-
- case PlayStream_Event:
- OnPlayStream();
- break;
-
- case StopStream_Event:
- OnStopStream();
- break;
-
- case PrevStream_Event:
- OnPrevStream();
- break;
-
- case NextStream_Event:
- OnNextStream();
- break;
-
- case SlowStream_Event:
- OnSlowStream();
- break;
+ case ID_VIEW_STREAMINFO:
+ case ID_VIEW_MESSAGES:
+ case ID_VIEW_PLAYLIST:
+ case ID_PREFERENCES:
+ OnShowDialog( GET_WM_COMMAND_ID(wp,lp) );
+ break;
- case FastStream_Event:
- OnFastStream();
- break;
+ case PlayStream_Event: OnPlayStream(); break;
+ case StopStream_Event: OnStopStream(); break;
+ case PrevStream_Event: OnPrevStream(); break;
+ case NextStream_Event: OnNextStream(); break;
+ case SlowStream_Event: OnSlowStream(); break;
+ case FastStream_Event: OnFastStream(); break;
case ID_FILE_ABOUT:
{
string about = (string)"VLC media player " PACKAGE_VERSION +
_("\n(WinCE interface)\n\n") +
- _("(c) 1996-2005 - the VideoLAN Team\n\n") +
+ _("(c) 1996-2006 - the VideoLAN Team\n\n") +
+ _("Compiled by ") + VLC_CompileBy() + "@" +
+ VLC_CompileHost() + "." + VLC_CompileDomain() + ".\n" +
+ _("Compiler: ") + VLC_Compiler() + ".\n" +
+#ifndef HAVE_SHARED_LIBVLC
+ _("Based on SVN revision: ") + VLC_Changeset() + ".\n\n" +
+#endif
_("The VideoLAN team <videolan@videolan.org>\n"
- "http://www.videolan.org/\n\n");
+ "http://www.videolan.org/");
MessageBox( hwnd, _FROMMB(about.c_str()),
_T("About VLC media player"), MB_OK );
- break;
+ break;
}
case ID_FILE_EXIT:
SendMessage( hwnd, WM_CLOSE, 0, 0 );
- break;
+ break;
- case ID_VIEW_STREAMINFO:
- fi = new FileInfo( pIntf, hInst );
- CreateDialogBox( hwnd, fi );
- delete fi;
- break;
-
- case ID_VIEW_MESSAGES:
- hmsg = new Messages( pIntf, hInst );
- CreateDialogBox( hwnd, hmsg );
- delete hmsg;
- break;
-
- case ID_VIEW_PLAYLIST:
- pl = new Playlist( pIntf, hInst );
- CreateDialogBox( hwnd, pl );
- delete pl;
- break;
-
- case ID_SETTINGS_PREF:
- pref = new PrefsDialog( pIntf, hInst );
- CreateDialogBox( hwnd, pref );
- delete pref;
- break;
-
default:
- OnMenuEvent( pIntf, GET_WM_COMMAND_ID(wp,lp) );
+ OnMenuEvent( p_intf, GET_WM_COMMAND_ID(wp,lp) );
// we should test if it is a menu command
}
break;
case WM_TIMER:
- ti->Notify();
+ timer->Notify();
break;
case WM_CTLCOLORSTATIC:
break;
case WM_INITMENUPOPUP:
- RefreshSettingsMenu( pIntf,
- (HMENU)SendMessage( hwndCB, SHCMBM_GETSUBMENU, (WPARAM)0,
- (LPARAM)IDM_SETTINGS ) );
- RefreshAudioMenu( pIntf,
- (HMENU)SendMessage( hwndCB, SHCMBM_GETSUBMENU, (WPARAM)0,
- (LPARAM)IDM_AUDIO ) );
- RefreshVideoMenu( pIntf,
- (HMENU)SendMessage( hwndCB, SHCMBM_GETSUBMENU, (WPARAM)0,
- (LPARAM)IDM_VIDEO ) );
- RefreshNavigMenu( pIntf,
- (HMENU)SendMessage( hwndCB, SHCMBM_GETSUBMENU, (WPARAM)0,
- (LPARAM)IDM_NAVIGATION ) );
-
-#if 0
- // Undo the video display because menu is opened
- // due to GAPI, menu top display is not assumed
- // FIXME verify if p_child_window exits
- SendMessage( pIntf->p_sys->p_video_window->p_child_window,
- WM_INITMENUPOPUP, wp, lp );
-#endif
+ if( (HMENU)wp == menu_settings )
+ RefreshSettingsMenu( p_intf, menu_settings );
+ if( (HMENU)wp == menu_audio )
+ RefreshAudioMenu( p_intf, menu_audio );
+ if( (HMENU)wp == menu_video )
+ RefreshVideoMenu( p_intf, menu_video );
+ if( (HMENU)wp == menu_navigation )
+ RefreshNavigMenu( p_intf, menu_navigation );
+ /* Fall through */
+
+ case WM_KILLFOCUS:
+ SHFullScreen( hwnd, SHFS_SHOWSIPBUTTON );
+ case WM_ENTERMENULOOP:
+ if( video && video->hWnd )
+ SendMessage( video->hWnd, WM_KILLFOCUS, 0, 0 );
+ break;
- //refresh screen
- /* InvalidateRect(hwnd, NULL, TRUE);
- /UpdateWindow(hwndCB); // NULL*/
+ case WM_SETFOCUS:
+ SHSipPreference( hwnd, SIP_DOWN );
+ SHFullScreen( GetForegroundWindow(), SHFS_HIDESIPBUTTON );
+ case WM_EXITMENULOOP:
+ if( video && video->hWnd )
+ SendMessage( video->hWnd, WM_SETFOCUS, 0, 0 );
break;
-#if 0
- case WM_NOTIFY:
- // Redo the video display because menu can be closed
- // FIXME verify if p_child_window exits
- if( (((NMHDR *)lp)->code) == NM_CUSTOMDRAW )
- SendMessage( pIntf->p_sys->p_video_window->p_child_window,
- WM_NOTIFY, wp, lp );
- return lResult;
-#endif
- break;
+ case WM_LBUTTONDOWN:
+ {
+ SHRGINFO shrg;
+ shrg.cbSize = sizeof( shrg );
+ shrg.hwndClient = hwnd;
+ shrg.ptDown.x = LOWORD(lp);
+ shrg.ptDown.y = HIWORD(lp);
+ shrg.dwFlags = SHRG_RETURNCMD ;
+
+ if( SHRecognizeGesture( &shrg ) == GN_CONTEXTMENU )
+ PopupMenu( p_intf, hwnd, shrg.ptDown );
+ }
+ break;
+
+ case WM_RBUTTONUP:
+ {
+ POINT point;
+ point.x = LOWORD(lp);
+ point.y = HIWORD(lp);
+ PopupMenu( p_intf, hwnd, point );
+ }
+ break;
case WM_HELP:
MessageBox (hwnd, _T("Help"), _T("Help"), MB_OK);
- break;
+ break;
case WM_CLOSE:
- DestroyWindow( hwndCB );
+ if( hwndCB ) DestroyWindow( hwndCB );
DestroyWindow( hwnd );
- break;
+ break;
case WM_DESTROY:
PostQuitMessage( 0 );
- break;
+ break;
}
return DefWindowProc( hwnd, msg, wp, lp );
}
-void Interface::OnOpenFileSimple( void )
+void Interface::OnShowDialog( int i_dialog_event )
{
- OPENFILENAME ofn;
- TCHAR DateiName[80+1] = _T("\0");
- static TCHAR szFilter[] = _T("All (*.*)\0*.*\0");
-
- playlist_t *p_playlist = (playlist_t *)
- vlc_object_find( pIntf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
- if( p_playlist == NULL ) return;
+ int i_id;
- memset( &ofn, 0, sizeof(OPENFILENAME) );
- ofn.lStructSize = sizeof(OPENFILENAME);
- ofn.hwndOwner = NULL;
- ofn.hInstance = hInst;
- ofn.lpstrFilter = szFilter;
- ofn.lpstrCustomFilter = NULL;
- ofn.nMaxCustFilter = 0;
- ofn.nFilterIndex = 1;
- ofn.lpstrFile = (LPTSTR)DateiName;
- ofn.nMaxFile = 80;
- ofn.lpstrFileTitle = NULL;
- ofn.nMaxFileTitle = 40;
- ofn.lpstrInitialDir = NULL;
- ofn.lpstrTitle = _T("Quick Open File");
- ofn.Flags = 0;
- ofn.nFileOffset = 0;
- ofn.nFileExtension = 0;
- ofn.lpstrDefExt = NULL;
- ofn.lCustData = 0L;
- ofn.lpfnHook = NULL;
- ofn.lpTemplateName = NULL;
-
- SHFullScreen( GetForegroundWindow(), SHFS_HIDESIPBUTTON );
-
- if( GetOpenFileName( (LPOPENFILENAME)&ofn ) )
+ switch( i_dialog_event )
{
- char *psz_filename = _TOMB(ofn.lpstrFile);
- playlist_Add( p_playlist, psz_filename, psz_filename,
- PLAYLIST_APPEND | PLAYLIST_GO, PLAYLIST_END );
+ case ID_FILE_QUICKOPEN: i_id = INTF_DIALOG_FILE_SIMPLE; break;
+ case ID_FILE_OPENFILE: i_id = INTF_DIALOG_FILE; break;
+ case ID_FILE_OPENDIR: i_id = INTF_DIALOG_DIRECTORY; break;
+ case ID_FILE_OPENNET: i_id = INTF_DIALOG_NET; break;
+ case ID_VIEW_PLAYLIST: i_id = INTF_DIALOG_PLAYLIST; break;
+ case ID_VIEW_MESSAGES: i_id = INTF_DIALOG_MESSAGES; break;
+ case ID_VIEW_STREAMINFO: i_id = INTF_DIALOG_FILEINFO; break;
+ case ID_PREFERENCES: i_id = INTF_DIALOG_PREFS; break;
+ default: i_id = INTF_DIALOG_FILE; break;
}
- vlc_object_release( p_playlist );
+ if( p_intf->p_sys->pf_show_dialog )
+ p_intf->p_sys->pf_show_dialog( p_intf, i_id, 1, 0 );
}
void Interface::OnPlayStream( void )
{
playlist_t *p_playlist = (playlist_t *)
- vlc_object_find( pIntf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
+ vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
if( p_playlist == NULL ) return;
if( p_playlist->i_size && p_playlist->i_enabled )
vlc_value_t state;
input_thread_t *p_input = (input_thread_t *)
- vlc_object_find( pIntf, VLC_OBJECT_INPUT, FIND_ANYWHERE );
+ vlc_object_find( p_intf, VLC_OBJECT_INPUT, FIND_ANYWHERE );
if( p_input == NULL )
{
{
/* If the playlist is empty, open a file requester instead */
vlc_object_release( p_playlist );
- OnOpenFileSimple();
+ OnShowDialog( ID_FILE_QUICKOPEN );
}
}
vlc_value_t val;
vout_thread_t *p_vout = (vout_thread_t *)
- vlc_object_find( pIntf, VLC_OBJECT_VOUT, FIND_ANYWHERE );
+ vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE );
if( p_vout == NULL ) return;
void Interface::OnSliderUpdate( int wp )
{
- vlc_mutex_lock( &pIntf->change_lock );
- input_thread_t *p_input = pIntf->p_sys->p_input;
+ vlc_mutex_lock( &p_intf->change_lock );
+ input_thread_t *p_input = p_intf->p_sys->p_input;
int dwPos = SendMessage( hwndSlider, TBM_GETPOS, 0, 0 );
if( (int)LOWORD(wp) == SB_THUMBPOSITION ||
(int)LOWORD(wp) == SB_ENDSCROLL )
{
- if( pIntf->p_sys->i_slider_pos != dwPos && p_input )
+ if( p_intf->p_sys->i_slider_pos != dwPos && p_input )
{
vlc_value_t pos;
pos.f_float = (float)dwPos / (float)SLIDER_MAX_POS;
var_Set( p_input, "position", pos );
}
- pIntf->p_sys->b_slider_free = VLC_TRUE;
+ p_intf->p_sys->b_slider_free = VLC_TRUE;
}
else
{
- pIntf->p_sys->b_slider_free = VLC_FALSE;
+ p_intf->p_sys->b_slider_free = VLC_FALSE;
if( p_input )
{
}
}
- vlc_mutex_unlock( &pIntf->change_lock );
+ vlc_mutex_unlock( &p_intf->change_lock );
}
void Interface::OnChange( int wp )
if( LOWORD(wp) == SB_THUMBPOSITION || LOWORD(wp) == SB_ENDSCROLL )
{
- Change( 200 - (int)dwPos );
+ VolumeChange( 200 - (int)dwPos );
+ b_volume_hold = VLC_FALSE;
+ }
+ else
+ {
+ b_volume_hold = VLC_TRUE;
}
}
-void Interface::Change( int i_volume )
+void Interface::VolumeChange( int i_volume )
{
- aout_VolumeSet( pIntf, i_volume * AOUT_VOLUME_MAX / 200 / 2 );
-#if 0
- SetToolTip( wxString::Format((wxString)wxU(_("Volume")) + wxT(" %d"),
- i_volume ) );
-#endif
+ aout_VolumeSet( p_intf, i_volume * AOUT_VOLUME_MAX / 200 / 2 );
+}
+
+void Interface::VolumeUpdate()
+{
+ audio_volume_t i_volume;
+
+ if( b_volume_hold ) return;
+
+ aout_VolumeGet( p_intf, &i_volume );
+
+ int i_volume_ctrl = 200 - i_volume * 200 * 2 / AOUT_VOLUME_MAX;
+
+ DWORD dwPos = SendMessage( hwndVol, TBM_GETPOS, 0, 0 );
+ if( i_volume_ctrl == (int)dwPos ) return;
+
+ SendMessage( hwndVol, TBM_SETPOS, 1, i_volume_ctrl );
}
void Interface::OnStopStream( void )
{
playlist_t * p_playlist = (playlist_t *)
- vlc_object_find( pIntf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
+ vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
if( p_playlist == NULL ) return;
playlist_Stop( p_playlist );
void Interface::OnPrevStream( void )
{
playlist_t * p_playlist = (playlist_t *)
- vlc_object_find( pIntf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
+ vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
if( p_playlist == NULL ) return;
playlist_Prev( p_playlist );
void Interface::OnNextStream( void )
{
playlist_t * p_playlist = (playlist_t *)
- vlc_object_find( pIntf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
+ vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
if( p_playlist == NULL ) return;
playlist_Next( p_playlist );
void Interface::OnSlowStream( void )
{
input_thread_t *p_input = (input_thread_t *)
- vlc_object_find( pIntf, VLC_OBJECT_INPUT, FIND_ANYWHERE );
+ vlc_object_find( p_intf, VLC_OBJECT_INPUT, FIND_ANYWHERE );
if( p_input == NULL ) return;
void Interface::OnFastStream( void )
{
input_thread_t *p_input = (input_thread_t *)
- vlc_object_find( pIntf, VLC_OBJECT_INPUT, FIND_ANYWHERE );
+ vlc_object_find( p_intf, VLC_OBJECT_INPUT, FIND_ANYWHERE );
if( p_input == NULL ) return;
var_Set( p_input, "rate-faster", val );
vlc_object_release( p_input );
}
+
+void Interface::Update()
+{
+ /* Misc updates */
+ VolumeUpdate();
+}