Commit 08947dc7 authored by Gildas Bazin's avatar Gildas Bazin

* modules/gui/wince: added a popup menu for the main interface.

parent 953d89a9
......@@ -63,7 +63,6 @@
#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")
......@@ -194,12 +193,12 @@ static HWND CreateMenuBar( HWND hwnd, HINSTANCE hInst )
#endif
AppendMenu( hmenu_file, MF_STRING, ID_FILE_QUICKOPEN,
_T("Quick &Open File") );
_T("Quick &Open File...") );
AppendMenu( hmenu_file, MF_SEPARATOR, 0, 0 );
AppendMenu( hmenu_file, MF_STRING, ID_FILE_OPENFILE,
_T("Open &File") );
_T("Open &File...") );
AppendMenu( hmenu_file, MF_STRING, ID_FILE_OPENNET,
_T("Open Network Stream") );
_T("Open &Network Stream...") );
AppendMenu( hmenu_file, MF_SEPARATOR, 0, 0 );
AppendMenu( hmenu_file, MF_STRING, ID_FILE_ABOUT,
_T("About VLC") );
......@@ -207,15 +206,13 @@ static HWND CreateMenuBar( HWND hwnd, HINSTANCE hInst )
_T("E&xit") );
AppendMenu( hmenu_view, MF_STRING, ID_VIEW_PLAYLIST,
_T("&Playlist") );
_T("&Playlist...") );
AppendMenu( hmenu_view, MF_STRING, ID_VIEW_MESSAGES,
_T("&Messages") );
_T("&Messages...") );
AppendMenu( hmenu_view, MF_STRING, ID_VIEW_STREAMINFO,
_T("&Stream and Media info") );
_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( hmenu_settings, MF_STRING, ID_PREFERENCES,
_T("&Preferences...") );
......@@ -461,7 +458,7 @@ int CBaseWindow::CreateDialogBox( HWND hwnd, CBaseWindow *p_obj )
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 );
(DLGPROC)p_obj->BaseWndProc, (LPARAM)p_obj );
}
/***********************************************************************
......@@ -481,7 +478,7 @@ LRESULT CALLBACK CBaseWindow::BaseWndProc( HWND hwnd, UINT msg, WPARAM wParam,
{
p_obj = (CBaseWindow *)(((LPCREATESTRUCT)lParam)->lpCreateParams);
SetWindowLong( hwnd, GWL_USERDATA,
(LONG)((LPCREATESTRUCT)lParam)->lpCreateParams );
(LONG)((LPCREATESTRUCT)lParam)->lpCreateParams );
p_obj->hWnd = hwnd;
}
......@@ -540,45 +537,45 @@ LRESULT CALLBACK Interface::WndProc( HWND hwnd, UINT msg, WPARAM wp,
{
case ID_FILE_QUICKOPEN:
OnOpenFileSimple();
break;
break;
case ID_FILE_OPENFILE:
open = new OpenDialog( p_intf, hInst, FILE_ACCESS,
ID_FILE_OPENFILE, OPEN_NORMAL );
CreateDialogBox( hwnd, open );
delete open;
break;
open = new OpenDialog( p_intf, hInst, FILE_ACCESS,
ID_FILE_OPENFILE, OPEN_NORMAL );
CreateDialogBox( hwnd, open );
delete open;
break;
case ID_FILE_OPENNET:
open = new OpenDialog( p_intf, hInst, NET_ACCESS, ID_FILE_OPENNET,
OPEN_NORMAL );
CreateDialogBox( hwnd, open );
CreateDialogBox( hwnd, open );
delete open;
break;
break;
case PlayStream_Event:
OnPlayStream();
break;
break;
case StopStream_Event:
OnStopStream();
break;
break;
case PrevStream_Event:
OnPrevStream();
break;
break;
case NextStream_Event:
OnNextStream();
break;
break;
case SlowStream_Event:
OnSlowStream();
break;
break;
case FastStream_Event:
OnFastStream();
break;
break;
case ID_FILE_ABOUT:
{
......@@ -590,36 +587,36 @@ LRESULT CALLBACK Interface::WndProc( HWND hwnd, UINT msg, WPARAM wp,
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( p_intf, hInst );
CreateDialogBox( hwnd, fi );
CreateDialogBox( hwnd, fi );
delete fi;
break;
break;
case ID_VIEW_MESSAGES:
hmsg = new Messages( p_intf, hInst );
CreateDialogBox( hwnd, hmsg );
CreateDialogBox( hwnd, hmsg );
delete hmsg;
break;
break;
case ID_VIEW_PLAYLIST:
pl = new Playlist( p_intf, hInst );
CreateDialogBox( hwnd, pl );
CreateDialogBox( hwnd, pl );
delete pl;
break;
break;
case ID_SETTINGS_PREF:
case ID_PREFERENCES:
pref = new PrefsDialog( p_intf, hInst );
CreateDialogBox( hwnd, pref );
CreateDialogBox( hwnd, pref );
delete pref;
break;
break;
default:
OnMenuEvent( p_intf, GET_WM_COMMAND_ID(wp,lp) );
......@@ -687,20 +684,34 @@ LRESULT CALLBACK Interface::WndProc( HWND hwnd, UINT msg, WPARAM wp,
WM_NOTIFY, wp, lp );
return lResult;
#endif
break;
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_HELP:
MessageBox (hwnd, _T("Help"), _T("Help"), MB_OK);
break;
break;
case WM_CLOSE:
DestroyWindow( hwndCB );
DestroyWindow( hwnd );
break;
break;
case WM_DESTROY:
PostQuitMessage( 0 );
break;
break;
}
return DefWindowProc( hwnd, msg, wp, lp );
......
......@@ -54,6 +54,187 @@ enum
PopupMenu_Events = 6000
};
HMENU OpenStreamMenu( intf_thread_t *p_intf )
{
HMENU hmenu = CreatePopupMenu();
AppendMenu( hmenu, MF_STRING, ID_FILE_QUICKOPEN,
_T("Quick &Open File...") );
AppendMenu( hmenu, MF_STRING, ID_FILE_OPENFILE,
_T("Open &File...") );
AppendMenu( hmenu, MF_STRING, ID_FILE_OPENNET,
_T("Open &Network Stream...") );
return hmenu;
}
HMENU MiscMenu( intf_thread_t *p_intf )
{
HMENU hmenu = CreatePopupMenu();
AppendMenu( hmenu, MF_STRING, ID_VIEW_STREAMINFO, _T("Media &Info...") );
AppendMenu( hmenu, MF_STRING, ID_VIEW_MESSAGES, _T("&Messages...") );
AppendMenu( hmenu, MF_STRING, ID_PREFERENCES, _T("&Preferences...") );
return hmenu;
}
void PopupMenu( intf_thread_t *p_intf, HWND p_parent, POINT point )
{
#define MAX_POPUP_ITEMS 45
vlc_object_t *p_object, *p_input;
char *ppsz_varnames[MAX_POPUP_ITEMS];
int pi_objects[MAX_POPUP_ITEMS];
vector<MenuItemExt*>::iterator iter;
int i = 0, i_last_separator = 0;
/* Initializations */
memset( pi_objects, 0, MAX_POPUP_ITEMS * sizeof(int) );
/* Input menu */
p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
FIND_ANYWHERE );
if( p_object != NULL )
{
ppsz_varnames[i] = "bookmark";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "title";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "chapter";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "program";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "navigation";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "dvd_menus";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "video-es";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "audio-es";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "spu-es";
pi_objects[i++] = p_object->i_object_id;
}
p_input = p_object;
if( !p_input ) goto interfacemenu;
/* Video menu */
if( i != i_last_separator ) ppsz_varnames[i++] = NULL; /* Separator */
i_last_separator = i;
p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_VOUT,
FIND_ANYWHERE );
if( p_object != NULL )
{
vlc_object_t *p_dec_obj;
ppsz_varnames[i] = "fullscreen";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "zoom";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "deinterlace";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "aspect-ratio";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "crop";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "video-on-top";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "directx-wallpaper";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "video-snapshot";
pi_objects[i++] = p_object->i_object_id;
p_dec_obj = (vlc_object_t *)vlc_object_find( p_object,
VLC_OBJECT_DECODER,
FIND_PARENT );
if( p_dec_obj != NULL )
{
ppsz_varnames[i] = "ffmpeg-pp-q";
pi_objects[i++] = p_dec_obj->i_object_id;
vlc_object_release( p_dec_obj );
}
vlc_object_release( p_object );
}
/* Audio menu */
if( i != i_last_separator ) ppsz_varnames[i++] = NULL; /* Separator */
i_last_separator = i;
p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_AOUT,
FIND_ANYWHERE );
if( p_object != NULL )
{
ppsz_varnames[i] = "audio-device";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "audio-channels";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "visual";
pi_objects[i++] = p_object->i_object_id;
ppsz_varnames[i] = "equalizer";
pi_objects[i++] = p_object->i_object_id;
vlc_object_release( p_object );
}
interfacemenu:
/* Interface menu */
if( i != i_last_separator ) ppsz_varnames[i++] = NULL; /* Separator */
i_last_separator = i;
/* vlc_object_find is needed because of the dialogs provider case */
p_object = (vlc_object_t *)vlc_object_find( p_intf, VLC_OBJECT_INTF,
FIND_PARENT );
if( p_object != NULL )
{
/* Nothing for now */
vlc_object_release( p_object );
}
/* Build menu */
vector<MenuItemExt*> popup_menu;
HMENU hmenu = CreatePopupMenu();
RefreshMenu( p_intf, &popup_menu, hmenu, i,
ppsz_varnames, pi_objects, PopupMenu_Events );
/* Add static entries */
if( p_input != NULL )
{
vlc_value_t val;
AppendMenu( hmenu, MF_SEPARATOR, 0, _T("") );
AppendMenu( hmenu, MF_STRING, StopStream_Event, _T("Stop") );
AppendMenu( hmenu, MF_STRING, PrevStream_Event, _T("Previous") );
AppendMenu( hmenu, MF_STRING, NextStream_Event, _T("Next") );
var_Get( p_input, "state", &val );
if( val.i_int == PAUSE_S )
AppendMenu( hmenu, MF_STRING, PlayStream_Event, _T("Play") );
else
AppendMenu( hmenu, MF_STRING, PlayStream_Event, _T("Pause") );
vlc_object_release( p_input );
}
else
{
playlist_t * p_playlist =
(playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
FIND_ANYWHERE );
if( p_playlist && p_playlist->i_size )
{
AppendMenu( hmenu, MF_SEPARATOR, 0, _T("") );
AppendMenu( hmenu, MF_STRING, PlayStream_Event, _T("Play") );
}
if( p_playlist ) vlc_object_release( p_playlist );
}
AppendMenu( hmenu, MF_POPUP|MF_STRING, (UINT)MiscMenu( p_intf ),
_T("Miscellaneous") );
AppendMenu( hmenu, MF_POPUP|MF_STRING, (UINT)OpenStreamMenu( p_intf ),
_T("Open") );
TrackPopupMenu( hmenu, 0, point.x, point.y, 0, p_parent, 0 );
PostMessage( p_parent, WM_NULL, 0, 0 );
DestroyMenu( hmenu );
}
void RefreshAudioMenu( intf_thread_t *p_intf, HMENU hMenu )
{
#define MAX_AUDIO_ITEMS 10
......@@ -272,8 +453,7 @@ void RefreshSettingsMenu( intf_thread_t *p_intf, HMENU hMenu )
memset( pi_objects, 0, MAX_SETTINGS_ITEMS * sizeof(int) );
i = 0;
AppendMenu( hMenu, MF_STRING, ID_SETTINGS_EXTEND, _T("&Extended GUI") );
AppendMenu( hMenu, MF_STRING, ID_SETTINGS_PREF, _T("&Preferences...") );
AppendMenu( hMenu, MF_STRING, ID_PREFERENCES, _T("&Preferences...") );
p_object = (vlc_object_t *)
vlc_object_find( p_intf, VLC_OBJECT_INTF, FIND_PARENT );
......
......@@ -38,12 +38,12 @@
/* Callback prototype */
static int PopupMenuCB( vlc_object_t *p_this, const char *psz_variable,
vlc_value_t old_val, vlc_value_t new_val, void *param );
vlc_value_t old_val, vlc_value_t new_val, void * );
/*****************************************************************************
* Constructor.
*****************************************************************************/
Timer::Timer( intf_thread_t *_p_intf, HWND hwnd, Interface *_p_main_interface)//, Interface *_p_main_interface )
Timer::Timer( intf_thread_t *_p_intf, HWND hwnd, Interface *_p_main_interface)
{
p_intf = _p_intf;
p_main_interface = _p_main_interface;
......@@ -241,8 +241,9 @@ static int PopupMenuCB( vlc_object_t *p_this, const char *psz_variable,
vlc_value_t old_val, vlc_value_t new_val, void *param )
{
intf_thread_t *p_intf = (intf_thread_t *)param;
POINT point = {0};
/* Nothing for now */
PopupMenu( p_intf, p_intf->p_sys->p_main_window->hWnd, point );
return VLC_SUCCESS;
}
......@@ -159,6 +159,7 @@ static void Run( intf_thread_t *p_intf )
{
MSG msg;
Interface *pInterface = new Interface();
p_intf->p_sys->p_main_window = pInterface;
if( !hInstance ) hInstance = GetModuleHandle(NULL);
......
......@@ -46,6 +46,7 @@
#include <vector>
using namespace std;
class CBaseWindow;
class MenuItemExt;
class VideoWindow;
......@@ -75,6 +76,8 @@ struct intf_sys_t
void (*pf_show_dialog) ( intf_thread_t *p_intf, int i_dialog, int i_arg,
intf_dialog_args_t *p_arg );
CBaseWindow *p_main_window;
/* Dynamic Menu management */
vector<MenuItemExt*> *p_audio_menu;
vector<MenuItemExt*> *p_video_menu;
......@@ -124,6 +127,7 @@ class OpenDialog;
class PrefsDialog;
CBaseWindow *CreateVideoWindow( intf_thread_t *, HWND );
void PopupMenu( intf_thread_t *, HWND, POINT );
/* Main Interface */
class Interface : public CBaseWindow
......@@ -538,6 +542,8 @@ protected:
#define SHCMBF_EMPTYBAR 0x0001
#define SHFS_SHOWSIPBUTTON 0x0004
#define GN_CONTEXTMENU 1000
#define SHRG_RETURNCMD 0x0001
#define SHRG_NOTIFYPARENT 0x0002
#define SHCMBM_GETSUBMENU (WM_USER + 401)
#define SHCMBM_GETMENU (WM_USER + 402)
#ifndef TBSTYLE_NO_DROPDOWN_ARROW
......@@ -583,12 +589,23 @@ extern "C" {
} NMRGINFO, *PNMRGINFO;
BOOL WINAPI CommandBar_InsertMenubarEx(HWND, HINSTANCE, LPTSTR, WORD);
typedef struct tagSHRGI
{
DWORD cbSize;
HWND hwndClient;
POINT ptDown;
DWORD dwFlags;
} SHRGINFO, *PSHRGINFO;
DWORD SHRecognizeGesture(SHRGINFO *shrg);
}
#if defined( WIN32 ) && !defined( UNDER_CE )
# define SHFullScreen(a,b)
# define SHInitDialog(a)
# define SHCreateMenuBar(a) 1
# define SHRecognizeGesture(a) 0
#endif
#endif //WINCE_RESOURCE
......@@ -598,7 +615,6 @@ extern "C" {
#define IDB_BITMAP1 103
#define IDB_BITMAP2 111
#define IDR_MENUBAR1 113
#define IDR_ACCELERATOR1 116
#define IDD_FILEINFO 118
#define IDD_DUMMY 118
#define IDD_MESSAGES 119
......@@ -607,30 +623,10 @@ extern "C" {
#define IDD_PLAYLIST 122
#define IDB_BITMAP3 123
#define IDD_ITEMINFO 124
#define IDR_DUMMYMENU 126
#define IDCLEAR 1001
#define IDSAVEAS 1002
#define IDC_TEXTCTRL 1004
#define IDC_CUSTOM1 1012
#define IDS_MAIN_MENUITEM1 40001
#define IDS_TITLE 40002
#define IDS_CLASSNAME 40003
#define IDS_CAP_QUICKFILEOPEN 40006
#define IDS_CAP_VIEW 40009
#define IDS_CAP_SETTINGS 40012
#define IDS_CAP_AUDIO 40015
#define IDS_CAP_VIDEO 40018
#define IDS_CAP_HELP 40021
#define IDS_CAP_Navigation 40024
#define IDS_CAP_FILE 40025
#define ID_COLOR_OPTIONS 40026
#define IDS_DYNAMENU 40027
#define ID_FILE 40028
#define IDS_BLACK 40028
#define IDS_LTGRAY 40029
#define ID_VIEW 40030
#define IDS_DKGRAY 40030
#define IDS_WHITE 40031
#define ID_SETTINGS 40032
#define ID_AUDIO 40034
#define ID_EMPTY 40034
......@@ -642,21 +638,16 @@ extern "C" {
#define IDM_AUDIO 40048
#define IDM_VIDEO 40050
#define IDM_NAVIGATION 40053
#define ID_FILE_QUICK_OPEN 40056
#define ID_FILE_OPENFILE 40057
#define ID_FILE_QUICKOPEN 40058
#define ID_FILE_OPENNETWORKSTREAM 40059
#define ID_FILE_OPENNET 40060
#define ID_FILE_QUICKOPEN 40057
#define ID_FILE_OPENFILE 40058
#define ID_FILE_OPENNET 40059
#define ID_FILE_EXIT 40061
#define ID_VIEW_PLAYLIST 40063
#define ID_VIEW_MESSAGES 40064
#define ID_VIEW_MEDIAINFO 40065
#define ID_VIEW_STREAMINFO 40066
#define IDS_CAP_NAV 40067
#define ID_PREFERENCES 40071
#define ID_FILE_ABOUT 40069
#define ID_SETTINGS_PREF 40071
#define ID_SETTINGS_EXTEND 40072
#define IDS_CAP_XXX 40084
#define IDM_MANAGE 40087
#define IDM_SORT 40088
#define IDM_SEL 40089
......@@ -675,24 +666,9 @@ extern "C" {
#define ID_MANAGE_ADDMRL 40106
#define ID_MANAGE_OPENPL 40107
#define ID_MANAGE_SAVEPL 40108
#define ID_MENUITEM40108 40109
#define IDS_CAP_MENUITEM40109 40110
#define IDS_STOP 57601
#define StopStream_Event 57601
#define IDS_PLAY 57602
#define PlayStream_Event 57602
#define PrevStream_Event 57603
#define NextStream_Event 57604
#define SlowStream_Event 57605
#define FastStream_Event 57606
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 128
#define _APS_NEXT_COMMAND_VALUE 40111
#define _APS_NEXT_CONTROL_VALUE 1013
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment