From fb876cbbc9bfb17be0c3b3bd347675eada63fc86 Mon Sep 17 00:00:00 2001 From: adelikat Date: Mon, 24 Nov 2008 19:18:13 +0000 Subject: [PATCH] Win32 - right click context menus for main window --- changelog.txt | 1 + src/drivers/win/res.rc | 40 ++++++++ src/drivers/win/resource.h | 25 ++++- src/drivers/win/window.cpp | 184 ++++++++++++++++++++++++++++++------- 4 files changed, 212 insertions(+), 38 deletions(-) diff --git a/changelog.txt b/changelog.txt index 264a35ba..bf044397 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,5 @@ ---version 2.0.4 yet to be released--- +24-nov-2008 - adelikat - win32 - right click context menus installed 24-nov-2008 - adelikat - win32 - added lots of mappable hotkey items as Menu items 23-nov-2008 - adelikat - Win32 - fixed some errors in my AVI directory override code 23-nov-2008 - shinydoofy - movie subs now have a toggle button in the SDL build (F10 by default) diff --git a/src/drivers/win/res.rc b/src/drivers/win/res.rc index beeda463..1e4a5411 100644 --- a/src/drivers/win/res.rc +++ b/src/drivers/win/res.rc @@ -312,6 +312,27 @@ BEGIN END END +FCEUCONTEXTMENUS MENU +BEGIN + POPUP "Game+Movie" + BEGIN + MENUITEM "Insert Subtitle", FCEU_CONTEXT_INSERTSUBTITLE, GRAYED + MENUITEM "Insert Comment", FCEU_CONTEXT_INSERTCOMMENT, GRAYED + MENUITEM SEPARATOR + MENUITEM "&Help....", FCEU_CONTEXT_MOVIEHELP + END + POPUP "Game+NoMovie" + BEGIN + MENUITEM "&Replay Movie", FCEUX_CONTEXT_REPLAYMOVIE + END + POPUP "NoGame" + BEGIN + MENUITEM "Open ROM", FCEU_CONTEXT_OPENROM + MENUITEM SEPARATOR + MENUITEM "&Help....", FCEU_CONTEXT_FCEUHELP + END +END + ///////////////////////////////////////////////////////////////////////////// // @@ -1578,6 +1599,17 @@ BEGIN CONTROL "",IDC_LIST1,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,7,7,311,214 END +INSERTCOMMENTSUBTITLE DIALOGEX 0, 0, 147, 82 +STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Insert Comment" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",INSERTCS_IDOK,7,55,50,14 + PUSHBUTTON "Cancel",INSERTCS_IDCANCEL,84,55,50,14 + EDITTEXT INSERTCS_MESSAGE,15,30,125,14,ES_AUTOHSCROLL + LTEXT "Insert:",IDC_STATIC,7,11,23,8 +END + ///////////////////////////////////////////////////////////////////////////// // @@ -1594,6 +1626,14 @@ BEGIN TOPMARGIN, 7 BOTTOMMARGIN, 243 END + + INSERTCOMMENTSUBTITLE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 140 + TOPMARGIN, 7 + BOTTOMMARGIN, 75 + END END #endif // APSTUDIO_INVOKED diff --git a/src/drivers/win/resource.h b/src/drivers/win/resource.h index e4d4b030..f0ff13dd 100644 --- a/src/drivers/win/resource.h +++ b/src/drivers/win/resource.h @@ -133,6 +133,8 @@ #define CHECK_SOUND_8BIT 122 #define IDD_DIALOG3 123 #define CHECK_SOUND_GLOBAL_FOCUS 124 +#define IDD_DIALOG4 124 +#define INSERTCOMMENTSUBTITLE 124 #define CHECK_SOUND_ENABLED 126 #define CTL_LATENCY_TRACKBAR 128 #define COMBO_SOUND_QUALITY 129 @@ -373,8 +375,11 @@ #define MEMW_EDIT01RESET 1185 #define MEMW_EDIT02RESET 1186 #define MEMW_EDIT03RESET 1187 +#define INSERTCS_MESSAGE 1187 #define MEMW_EDIT00RMADDRESS 1188 +#define INSERTCS_IDOK 1188 #define MEMW_EDIT01RMADDRESS 1189 +#define INSERTCS_IDCANCEL 1189 #define MEMW_EDIT02RMADDRESS 1190 #define MEMW_EDIT03RMADDRESS 1191 #define MEMW_EDIT04RMADDRESS 1192 @@ -577,6 +582,20 @@ #define ID_FILE_SCREENSHOT 40272 #define ID_FILE_RESTARTMOVIE 40273 #define ID_FILE_PLAYMOVIEFROMBEGINNING 40274 +#define ID_GAME_INSERTSUBTITLE 40275 +#define ID_GAME_INSERTCOMMENT 40276 +#define ID_GAME_HELP 40277 +#define ID_GAME_REPLAYMOVIE 40278 +#define ID_GAME_HELP40279 40279 +#define FCEU_CONTEXT_INSERTSUBTITLE 40280 +#define FCEU_CONTEXT_MOVIEHELP 40281 +#define FCEUX_CONTEXT_REPLAYMOVIE 40282 +#define FCEU_CONTEXT_ROMHELP 40283 +#define ID_NOGAME_OPENROM 40284 +#define ID_NOGAME_HELP 40285 +#define FCEU_CONTEXT_OPENROM 40286 +#define FCEU_CONTEXT_FCEUHELP 40287 +#define FCEU_CONTEXT_INSERTCOMMENT 40288 #define IDC_DEBUGGER_ICONTRAY 55535 #define MW_ValueLabel2 65423 #define MW_ValueLabel1 65426 @@ -585,9 +604,9 @@ // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 124 -#define _APS_NEXT_COMMAND_VALUE 40275 -#define _APS_NEXT_CONTROL_VALUE 1187 +#define _APS_NEXT_RESOURCE_VALUE 125 +#define _APS_NEXT_COMMAND_VALUE 40289 +#define _APS_NEXT_CONTROL_VALUE 1190 #define _APS_NEXT_SYMED_VALUE 101 #endif #endif diff --git a/src/drivers/win/window.cpp b/src/drivers/win/window.cpp index 4ae4f8c6..876113f0 100644 --- a/src/drivers/win/window.cpp +++ b/src/drivers/win/window.cpp @@ -65,8 +65,18 @@ #include using namespace std; +//******************************************************************************** +//Globals +//******************************************************************************** -// Extern variables +//Handles--------------------------------------------- +static HMENU fceumenu = 0; //Main menu. +HWND pwindow; //Client Area +static HMENU recentmenu; //Recent Menu +HMENU hfceuxcontext; //Handle to context menu +HMENU hfceuxcontextsub; //Handle to context sub menu + +//Extern variables------------------------------------ extern FCEUGI *GameInfo; extern int EnableAutosave; @@ -77,49 +87,48 @@ extern bool turbo; // Extern functions char *md5_asciistr(uint8 digest[16]); - void SetAutoFirePattern(int onframes, int offframes); void SetAutoFireOffset(int offset); - void ShowNetplayConsole(void); //mbg merge 7/17/06 YECH had to add - void MapInput(void); -// Internal variables -int pauseAfterPlayback = 0; +//AutoFire----------------------------------------------- + +static int CheckedAutoFirePattern = MENU_AUTOFIRE_PATTERN_1; +static int CheckedAutoFireOffset = MENU_AUTOFIRE_OFFSET_1; +int GetCheckedAutoFirePattern(); +int GetCheckedAutoFireOffset(); + +//Internal variables------------------------------------- +int pauseAfterPlayback = 0; //Flag for pausing emulator when movie is finished static int winwidth, winheight; static volatile int nofocus = 0; +static int tog = 0; //Toggle for Hide Menu +static bool loggingSound = false; +static LONG WindowXC=1<<30,WindowYC; +int MainWindow_wndx, MainWindow_wndy; +static uint32 mousex,mousey,mouseb; +static int vchanged = 0; -// Contains recent file strings +//Recent Menu Strings ------------------------------------ char *recent_files[] = { 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 }; - const unsigned int MENU_FIRST_RECENT_FILE = 600; const unsigned int MAX_NUMBER_OF_RECENT_FILES = sizeof(recent_files)/sizeof(*recent_files); -// Exported variables -HWND pwindow; +//Exported variables ------------------------------------ + int EnableBackgroundInput = 0; int ismaximized = 0; -//Menu handle of the main menu. -static HMENU fceumenu = 0; +//Subtitles/Comments +void InsertSubtitle(HWND main); +void InsertComment(HWND main); -static int tog = 0; -static int CheckedAutoFirePattern = MENU_AUTOFIRE_PATTERN_1; -static int CheckedAutoFireOffset = MENU_AUTOFIRE_OFFSET_1; -static bool loggingSound = false; +//Help Menu subtopics +string moviehelp = "{695C964E-B83F-4A6E-9BA2-1A975387DB55}"; //Movie Recording +string gettingstartedhelp = "{C76AEBD9-1E27-4045-8A37-69E5A52D0F9A}";//Getting Started -static HMENU recentmenu; - -static LONG WindowXC=1<<30,WindowYC; -int MainWindow_wndx, MainWindow_wndy; - -static uint32 mousex,mousey,mouseb; - -static int vchanged = 0; - -int GetCheckedAutoFirePattern(); -int GetCheckedAutoFireOffset(); +//******************************************************************************** int GetCheckedAutoFirePattern() { @@ -717,24 +726,44 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) case WM_LBUTTONDOWN: case WM_LBUTTONUP: case WM_RBUTTONDOWN: - case WM_RBUTTONUP: mouseb=wParam; goto proco; - case WM_MOVE: { + case WM_RBUTTONUP: + { + hfceuxcontext = LoadMenu(fceu_hInstance,"FCEUCONTEXTMENUS"); + + //If There is a movie loaded + if (GameInfo && FCEUMOV_Mode(MOVIEMODE_PLAY|MOVIEMODE_RECORD)) + hfceuxcontextsub = GetSubMenu(hfceuxcontext,0); + + //If there is a ROM loaded but no movie + else if (GameInfo) + hfceuxcontextsub = GetSubMenu(hfceuxcontext,1); + + //Else no ROM + else + hfceuxcontextsub = GetSubMenu(hfceuxcontext,2); + + TrackPopupMenu(hfceuxcontextsub,0,mousex,mousey,TPM_RIGHTBUTTON,hWnd,0); + } + + case WM_MOVE: + { RECT wrect; GetWindowRect(hWnd,&wrect); MainWindow_wndx = wrect.left; MainWindow_wndy = wrect.top; - } + } case WM_MOUSEMOVE: - { - mousex=LOWORD(lParam); - mousey=HIWORD(lParam); - } + { + mousex=LOWORD(lParam); + mousey=HIWORD(lParam); + } goto proco; + case WM_ERASEBKGND: if(xbsave) return(0); @@ -1160,7 +1189,8 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) case MENU_MEMORY_WATCH: CreateMemWatch(); break; - + + case FCEU_CONTEXT_OPENROM: case MENU_OPEN_FILE: // User selected the Open File menu => Show the file selection dialog LoadNewGamey(hWnd, 0); @@ -1206,6 +1236,7 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) FCEUD_MovieRecordTo(); break; + case FCEUX_CONTEXT_REPLAYMOVIE: case MENU_REPLAY_MOVIE: // Replay movie menu was selected FCEUD_MovieReplayFrom(); @@ -1313,6 +1344,24 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) case ID_NES_TURBO: FCEUD_TurboToggle(); break; + + //Context Menus------------------------------------------------------ + //Game+Movie + case FCEU_CONTEXT_INSERTSUBTITLE: + InsertSubtitle(hWnd); + break; + case FCEU_CONTEXT_INSERTCOMMENT: + InsertComment(hWnd); + break; + case FCEU_CONTEXT_MOVIEHELP: + OpenHelpWindow(moviehelp); + break; + + //No Game + case FCEU_CONTEXT_FCEUHELP: + OpenHelpWindow(gettingstartedhelp); + break; + } @@ -1371,6 +1420,7 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) } } goto proco; + case WM_CLOSE: case WM_DESTROY: case WM_QUIT: @@ -2029,4 +2079,68 @@ void UpdateMenuHotkeys() combo = GetKeyComboName(FCEUD_CommandMapping[EMUCMD_TOOL_OPENCDLOGGER]); combined = "Code/Data Logger...\t" + combo; ChangeMenuItemText(MENU_CDLOGGER, combined); +} + +LRESULT CALLBACK InsertCommentSubtitleProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + static int *success; + //string message; + char message[128]; + stringstream frame; + frame << currFrameCounter; + string Subtitle; + switch (uMsg) + { + case WM_INITDIALOG: + { + + // Nothing very useful to do + success = (int*)lParam; + return true; + } + break; + case WM_CLOSE: + case WM_DESTROY: + case WM_QUIT: + { + EndDialog(hDlg, 0); + return true; + } + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case INSERTCS_IDOK: + { + GetDlgItemText(hDlg, INSERTCS_MESSAGE, message, 128); + Subtitle = frame.str() + " " + message; + FCEU_printf("%s",Subtitle.c_str()); + currMovieData.subtitles.push_back(Subtitle); + EndDialog(hDlg, 0); + return true; + break; + } + + case INSERTCS_IDCANCEL: + { + EndDialog(hDlg, 0); + return true; + break; + } + + } + } + return 0; +} +void InsertSubtitle(HWND main) +{ + //DialogBoxParam(fceu_hInstance, MAKEINTRESOURCE(INSERTCOMMENTSUBTITLE), main, (DLGPROC) InsertCommentSubtitleProc,(LPARAM) 0); + string Subtitle = "1000 Poop"; + currMovieData.subtitles.push_back(Subtitle); +} + +void InsertComment(HWND main) +{ + wstring adelikat = mbstowcs("adelikat"); + currMovieData.comments.push_back(L"author " + adelikat); } \ No newline at end of file