/*****************************************************************************
* 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 <vlc/vout.h>
#include <vlc/intf.h>
-#include <string>
-#include <stdio.h>
-using namespace std;
+#include "wince.h"
-#include <winuser.h>
-#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>
-#include <aygshell.h>
-
-#include <commdlg.h> // common dialogs -> fileopen.lib ?
-
-#include "wince.h"
+#include <commdlg.h>
#define NUMIMAGES 9 // Number of buttons in the toolbar
#define IMAGEWIDTH 17 // Width of the buttons in the toolbar
#define BUTTONWIDTH 0 // Width of the button images in the toolbar
#define BUTTONHEIGHT 0 // Height of the button images in the toolbar
#define ID_TOOLBAR 2000 // Identifier of the main tool bar
-#define dwTBFontStyle TBSTYLE_BUTTON | TBSTYLE_CHECK | TBSTYLE_GROUP // style for toolbar buttons
// Help strings
#define HELP_SIMPLE _T("Quick file open")
#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")
// The TBBUTTON structure contains information the toolbar buttons.
static TBBUTTON tbButton[] =
{
- {0, ID_FILE_QUICKOPEN, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, -1},
- {1, ID_FILE_OPENNET, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, -1},
- {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, -1},
- {2, StopStream_Event, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, -1},
- {3, PlayStream_Event, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, -1},
- {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, -1},
- {4, ID_VIEW_PLAYLIST, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, -1},
- {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, -1},
- {5, PrevStream_Event, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, -1},
- {6, NextStream_Event, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, -1},
- {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP, 0, -1},
- {7, SlowStream_Event, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, -1},
- {8, FastStream_Event, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, -1},
+ {0, ID_FILE_QUICKOPEN, TBSTATE_ENABLED, TBSTYLE_BUTTON},
+ {1, ID_FILE_OPENNET, TBSTATE_ENABLED, TBSTYLE_BUTTON},
+ {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP},
+ {2, StopStream_Event, TBSTATE_ENABLED, TBSTYLE_BUTTON},
+ {3, PlayStream_Event, TBSTATE_ENABLED, TBSTYLE_BUTTON},
+ {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP},
+ {4, ID_VIEW_PLAYLIST, TBSTATE_ENABLED, TBSTYLE_BUTTON},
+ {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP},
+ {5, PrevStream_Event, TBSTATE_ENABLED, TBSTYLE_BUTTON},
+ {6, NextStream_Event, TBSTATE_ENABLED, TBSTYLE_BUTTON},
+ {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP},
+ {7, SlowStream_Event, TBSTATE_ENABLED, TBSTYLE_BUTTON},
+ {8, FastStream_Event, TBSTATE_ENABLED, TBSTYLE_BUTTON},
};
// Toolbar ToolTips
/*****************************************************************************
* 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
-
- // Check if the application is running.
- // If it's running then focus its window.
- hwndMain = FindWindow( _T("VLC WinCE"), _T("VLC media player") );
- if( hwndMain )
- {
- SetForegroundWindow( hwndMain );
- return TRUE;
- }
+ int i_style = WS_VISIBLE;
- // 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;
+#ifndef UNDER_CE
+ i_style |= WS_OVERLAPPEDWINDOW | WS_SIZEBOX;
+#endif
// Create main window
hwndMain =
- CreateWindow( _T("VLC WinCE"), _T("VLC media player"), WS_VISIBLE,
+ 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;
}
/***********************************************************************
+FUNCTION:
+ CreateMenuBar
+
+PURPOSE:
+ Creates a menu bar.
+***********************************************************************/
+HWND Interface::CreateMenuBar( HWND hwnd, HINSTANCE hInst )
+{
+ HMENU menu_file, menu_view;
+
+#ifdef UNDER_CE
+ SHMENUBARINFO mbi;
+ memset( &mbi, 0, sizeof(SHMENUBARINFO) );
+ mbi.cbSize = sizeof(SHMENUBARINFO);
+ mbi.hwndParent = hwnd;
+ mbi.hInstRes = hInst;
+ mbi.nToolBarId = IDR_MENUBAR;
+
+ if( !SHCreateMenuBar( &mbi ) )
+ {
+ MessageBox(hwnd, _T("SHCreateMenuBar Failed"), _T("Error"), MB_OK);
+ return 0;
+ }
+ TBBUTTONINFO tbbi;
+ tbbi.cbSize = sizeof(tbbi);
+ tbbi.dwMask = TBIF_LPARAM;
+
+ SendMessage( mbi.hwndMB, TB_GETBUTTONINFO, IDM_FILE, (LPARAM)&tbbi );
+ menu_file = (HMENU)tbbi.lParam;
+ RemoveMenu( menu_file, 0, MF_BYPOSITION );
+ SendMessage( mbi.hwndMB, TB_GETBUTTONINFO, IDM_VIEW, (LPARAM)&tbbi );
+ menu_view = (HMENU)tbbi.lParam;
+ RemoveMenu( menu_view, 0, MF_BYPOSITION );
+ SendMessage( mbi.hwndMB, TB_GETBUTTONINFO, IDM_SETTINGS, (LPARAM)&tbbi );
+ 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
+ menu_file = CreatePopupMenu();
+ menu_view = CreatePopupMenu();
+ menu_settings = CreatePopupMenu();
+ menu_audio = CreatePopupMenu();
+ menu_video = CreatePopupMenu();
+ menu_navigation = CreatePopupMenu();
+#endif
+
+ 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( menu_file, MF_STRING, ID_FILE_EXIT,
+ _T("E&xit") );
+
+ 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( menu_settings, MF_STRING, ID_PREFERENCES,
+ _T("&Preferences...") );
+
+
+#ifdef UNDER_CE
+ return mbi.hwndMB;
+
+#else
+ HMENU hmenu = CreateMenu();
+
+ 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)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 0;
+
+#endif
+}
+
+/***********************************************************************
FUNCTION:
- CreateToolbar
+ CreateToolBar
PURPOSE:
Registers the TOOLBAR control class and creates a toolbar.
-
***********************************************************************/
-HWND WINAPI Interface::CreateToolbar( HWND hwnd )
+HWND CreateToolBar( HWND hwnd, HINSTANCE hInst )
{
DWORD dwStyle;
HWND hwndTB;
dwStyle = WS_VISIBLE | WS_CHILD | TBSTYLE_TOOLTIPS |
WS_EX_OVERLAPPEDWINDOW | CCS_NOPARENTALIGN;
- hwndTB = CreateToolbarEx( hwnd, dwStyle, NULL, NUMIMAGES,
+ hwndTB = CreateToolbarEx( hwnd, dwStyle, 0, NUMIMAGES,
hInst, IDB_BITMAP1, tbButton, sizeof(tbButton) / sizeof(TBBUTTON),
BUTTONWIDTH, BUTTONHEIGHT, IMAGEWIDTH, IMAGEHEIGHT, sizeof(TBBUTTON) );
/***********************************************************************
FUNCTION:
- CreateSliderbar
+ CreateSliderBar
PURPOSE:
Registers the TRACKBAR_CLASS control class and creates a trackbar.
***********************************************************************/
-HWND WINAPI Interface::CreateSliderbar( HWND hwnd )
+HWND CreateSliderBar( HWND hwnd, HINSTANCE hInst )
{
HWND hwndSlider;
RECT rect;
// Registers TRACKBAR_CLASS control classes from the common control dll
InitCommonControlsEx( &iccex );
- hwndSlider = CreateWindowEx( NULL, TRACKBAR_CLASS, NULL,
+ hwndSlider = CreateWindowEx( 0, TRACKBAR_CLASS, NULL,
WS_CHILD | WS_VISIBLE | TBS_HORZ | WS_EX_OVERLAPPEDWINDOW |
TBS_BOTTOM, //|WS_CLIPSIBLINGS,
0, 0, 0, 0, hwnd, NULL, hInst, NULL );
return hwndSlider;
}
-HWND WINAPI Interface::CreateStaticText( HWND hwnd )
+HWND CreateStaticText( HWND hwnd, HINSTANCE hInst )
{
HWND hwndLabel;
RECT rect;
/***********************************************************************
FUNCTION:
- CreateVolTrackbar
+ CreateVolTrackBar
PURPOSE:
Registers the TRACKBAR_CLASS control class and creates a trackbar.
***********************************************************************/
-HWND WINAPI Interface::CreateVolTrackbar( HWND hwnd )
+HWND CreateVolTrackBar( HWND hwnd, HINSTANCE hInst )
{
HWND hwndVol;
RECT rect;
// Registers TRACKBAR_CLASS control classes from the common control dll
InitCommonControlsEx( &iccex );
- hwndVol = CreateWindowEx( NULL, TRACKBAR_CLASS, NULL,
+ hwndVol = CreateWindowEx( 0, TRACKBAR_CLASS, NULL,
WS_CHILD | WS_VISIBLE | TBS_VERT | TBS_RIGHT | TBS_AUTOTICKS |
WS_EX_OVERLAPPEDWINDOW, //|WS_CLIPSIBLINGS,
0, 0, 0, 0, hwnd, NULL, hInst, NULL );
/***********************************************************************
FUNCTION:
- CreateStatusbar
+ CreateStatusBar
PURPOSE:
Registers the StatusBar control class and creates a Statusbar.
***********************************************************************/
-HWND WINAPI Interface::CreateStatusbar( HWND hwnd )
+HWND CreateStatusBar( HWND hwnd, HINSTANCE hInst )
{
DWORD dwStyle;
HWND hwndSB;
// Create the statusbar control
dwStyle = WS_VISIBLE | WS_CHILD | TBSTYLE_TOOLTIPS | CCS_NOPARENTALIGN;
- hwndSB = CreateWindowEx( NULL, STATUSCLASSNAME, NULL,
+ hwndSB = CreateWindowEx( 0, STATUSCLASSNAME, NULL,
WS_CHILD | WS_VISIBLE | TBS_VERT | TBS_BOTTOM |
TBS_RIGHT |WS_CLIPSIBLINGS,
0, 0, CW_USEDEFAULT, 50, hwnd, NULL, hInst, 0 );
}
/***********************************************************************
-
-FUNCTION:
- BaseWndProc
-
-PURPOSE:
- Processes messages sent to the main window.
-
-***********************************************************************/
-LRESULT CALLBACK CBaseWindow::BaseWndProc( HWND hwnd, UINT msg, WPARAM wParam,
- LPARAM lParam )
-{
- // check to see if a copy of the 'this' pointer needs to be saved
- if( msg == WM_CREATE )
- {
- CBaseWindow *pObj = reinterpret_cast<CBaseWindow *>
- ((long)((LPCREATESTRUCT)lParam)->lpCreateParams);
- ::SetWindowLong( hwnd, GWL_USERDATA,
- (LONG)((LPCREATESTRUCT)lParam)->lpCreateParams );
-
- pObj->DlgFlag = FALSE;
- pObj->hWnd = hwnd; // videowindow
- }
-
- if( msg == WM_INITDIALOG )
- {
- CBaseWindow *pObj = reinterpret_cast<CBaseWindow *>(lParam);
- ::SetWindowLong( hwnd, GWL_USERDATA, lParam );
- pObj->DlgFlag = TRUE;
- pObj->hWnd = hwnd; //streamout
- }
-
- BOOL bProcessed = FALSE;
- LRESULT lResult;
-
- // Retrieve the pointer
- CBaseWindow *pObj =
- reinterpret_cast<CBaseWindow *>(::GetWindowLong( hwnd, GWL_USERDATA ));
-
- // Filter message through child classes
- if( pObj )
- lResult = pObj->WndProc( hwnd, msg, wParam, lParam, &bProcessed );
- else
- return ( pObj->DlgFlag ? FALSE : TRUE ); // message not processed
-
- if( pObj->DlgFlag )
- return bProcessed; // processing a dialog message return TRUE if processed
- else if( !bProcessed )
- // If message was unprocessed and not a dialog, send it back to Windows
- lResult = DefWindowProc( hwnd, msg, wParam, lParam );
-
- return lResult; // processing a window message return FALSE if processed
-}
-
-/***********************************************************************
-
FUNCTION:
WndProc
PURPOSE:
Processes messages sent to the main window.
-
***********************************************************************/
-LRESULT CALLBACK Interface::WndProc( HWND hwnd, UINT msg, WPARAM wp,
- LPARAM lp, PBOOL pbProcessed )
+LRESULT Interface::WndProc( HWND hwnd, UINT msg, WPARAM wp, LPARAM lp )
{
- SHMENUBARINFO mbi;
-
- // call the base class first
- LRESULT lResult = CBaseWindow::WndProc( hwnd, msg, wp, lp, pbProcessed );
- BOOL bWasProcessed = *pbProcessed;
- *pbProcessed = TRUE;
-
switch( msg )
{
case WM_CREATE:
- //Create the menubar
- memset( &mbi, 0, sizeof(SHMENUBARINFO) );
- mbi.cbSize = sizeof(SHMENUBARINFO);
- mbi.hwndParent = hwnd;
- mbi.nToolBarId = IDR_MENUBAR;
- mbi.hInstRes = hInst;
- mbi.nBmpId = 0;
- mbi.cBmpImages = 0;
-
- if( !SHCreateMenuBar(&mbi) )
- {
- MessageBox(hwnd, L"SHCreateMenuBar Failed", L"Error", MB_OK);
- //return -1;
- }
-
- hwndCB = mbi.hwndMB;
-
- // Creates the toolbar
- hwndTB = CreateToolbar( hwnd );
-
- // Creates the sliderbar
- hwndSlider = CreateSliderbar( hwnd );
-
- // Creates the time label
- hwndLabel = CreateStaticText( hwnd );
-
- // Creates the volume trackbar
- hwndVol = CreateVolTrackbar( hwnd );
-
- // Creates the statusbar
- hwndSB = CreateStatusbar( hwnd );
+ hwndCB = CreateMenuBar( hwnd, hInst );
+ hwndTB = CreateToolBar( hwnd, hInst );
+ hwndSlider = CreateSliderBar( hwnd, hInst );
+ hwndLabel = CreateStaticText( hwnd, hInst );
+ hwndVol = CreateVolTrackBar( hwnd, hInst );
+#ifdef UNDER_CE
+ hwndSB = CreateStatusBar( hwnd, hInst );
+#endif
/* Video window */
- video = CreateVideoWindow( pIntf, hInst, hwnd );
-
- ti = new Timer(pIntf, hwnd, this);
-
- // Hide the SIP button (WINCE only)
- SetForegroundWindow( hwnd );
- SHFullScreen( GetForegroundWindow(), SHFS_HIDESIPBUTTON );
+ if( config_GetInt( p_intf, "wince-embed" ) )
+ video = CreateVideoWindow( p_intf, hwnd );
- return lResult;
+ timer = new Timer( p_intf, hwnd, this );
+ break;
case WM_COMMAND:
switch( GET_WM_COMMAND_ID(wp,lp) )
{
case ID_FILE_QUICKOPEN:
- OnOpenFileSimple();
- return lResult;
-
case ID_FILE_OPENFILE:
- open = new OpenDialog( pIntf, hInst, FILE_ACCESS,
- ID_FILE_OPENFILE, OPEN_NORMAL );
- DialogBoxParam( hInst, (LPCTSTR)IDD_DUMMY, hwnd,
- (DLGPROC)open->BaseWndProc, (long)open );
- delete open;
- return lResult;
-
+ case ID_FILE_OPENDIR:
case ID_FILE_OPENNET:
- open = new OpenDialog( pIntf, hInst, NET_ACCESS, ID_FILE_OPENNET,
- OPEN_NORMAL );
- DialogBoxParam( hInst, (LPCTSTR)IDD_DUMMY, hwnd,
- (DLGPROC)open->BaseWndProc, (long)open );
- delete open;
- return lResult;
-
- case PlayStream_Event:
- OnPlayStream();
- return lResult;
-
- case StopStream_Event:
- OnStopStream();
- return lResult;
-
- case PrevStream_Event:
- OnPrevStream();
- return lResult;
-
- case NextStream_Event:
- OnNextStream();
- return lResult;
-
- case SlowStream_Event:
- OnSlowStream();
- return lResult;
+ 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();
- return lResult;
+ 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:
{
MessageBox( hwnd, _FROMMB(about.c_str()),
_T("About VLC media player"), MB_OK );
- return lResult;
+ break;
}
case ID_FILE_EXIT:
SendMessage( hwnd, WM_CLOSE, 0, 0 );
- return lResult;
-
- case ID_VIEW_STREAMINFO:
- fi = new FileInfo( pIntf, hInst );
- DialogBoxParam( hInst, (LPCTSTR)IDD_DUMMY, hwnd,
- (DLGPROC)fi->BaseWndProc, (long)fi );
- delete fi;
- return lResult;
-
- case ID_VIEW_MESSAGES:
- hmsg = new Messages( pIntf, hInst );
- DialogBoxParam( hInst, (LPCTSTR)IDD_MESSAGES, hwnd,
- (DLGPROC)hmsg->BaseWndProc, (long)hmsg );
- delete hmsg;
- return lResult;
+ break;
- case ID_VIEW_PLAYLIST:
- pl = new Playlist( pIntf, hInst );
- DialogBoxParam( hInst, (LPCTSTR)IDD_DUMMY, hwnd,
- (DLGPROC)pl->BaseWndProc, (long)pl );
- delete pl;
- return lResult;
-
- case ID_SETTINGS_PREF:
- pref = new PrefsDialog( pIntf, hInst );
- DialogBoxParam( hInst, (LPCTSTR)IDD_DUMMY, hwnd,
- (DLGPROC)pref->BaseWndProc, (long)pref );
- delete pref;
- return lResult;
-
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();
- return lResult;
+ timer->Notify();
+ break;
case WM_CTLCOLORSTATIC:
if( ( (HWND)lp == hwndSlider ) || ( (HWND)lp == hwndVol ) )
break;
case WM_HSCROLL:
- if( (HWND)lp == hwndSlider )
- {
- OnSliderUpdate( wp );
- return lResult;
- }
+ if( (HWND)lp == hwndSlider ) OnSliderUpdate( wp );
break;
case WM_VSCROLL:
- if( (HWND)lp == hwndVol )
- {
- OnChange( wp );
- return lResult;
- }
+ if( (HWND)lp == hwndVol ) OnChange( wp );
break;
case WM_INITMENUPOPUP:
- msg_Err( pIntf, "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 ) );
-
- msg_Err( pIntf, "WM_MEND" );
-#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
+ 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);
- return lResult;
+ break;
case WM_CLOSE:
- DestroyWindow( hwndCB );
+ if( hwndCB ) DestroyWindow( hwndCB );
DestroyWindow( hwnd );
- return lResult;
+ break;
case WM_DESTROY:
- PostQuitMessage( 0 );
- return lResult;
+ PostQuitMessage( 0 );
+ 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 = NULL;
- 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;
- DWORD dwPos = SendMessage( hwndSlider, TBM_GETPOS, 0, 0 );
+ 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();
+}