#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")
#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") );
_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...") );
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 );
}
/***********************************************************************
{
p_obj = (CBaseWindow *)(((LPCREATESTRUCT)lParam)->lpCreateParams);
SetWindowLong( hwnd, GWL_USERDATA,
- (LONG)((LPCREATESTRUCT)lParam)->lpCreateParams );
+ (LONG)((LPCREATESTRUCT)lParam)->lpCreateParams );
p_obj->hWnd = hwnd;
}
{
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:
{
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) );
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 );
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
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 );
/* 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;
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;
}
{
MSG msg;
Interface *pInterface = new Interface();
+ p_intf->p_sys->p_main_window = pInterface;
if( !hInstance ) hInstance = GetModuleHandle(NULL);
#include <vector>
using namespace std;
+class CBaseWindow;
class MenuItemExt;
class VideoWindow;
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;
class PrefsDialog;
CBaseWindow *CreateVideoWindow( intf_thread_t *, HWND );
+void PopupMenu( intf_thread_t *, HWND, POINT );
/* Main Interface */
class Interface : public CBaseWindow
#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
} 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
#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
#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
#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
#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