From f1256869b6e794b029dff6f9ec72107707dab4ce Mon Sep 17 00:00:00 2001 From: adelikat Date: Wed, 24 Dec 2008 04:46:56 +0000 Subject: [PATCH] Redo Savestate fix. Made Undo/Redo Savestate hotkey. Win32 - made default Undo/Redo key mapping Ctrl+Z --- changelog.txt | 1 + src/drivers/win/mapinput.cpp | 1 + src/drivers/win/window.cpp | 7 ++++--- src/input.cpp | 10 +++++++++- src/input.h | 1 + src/state.cpp | 3 ++- 6 files changed, 18 insertions(+), 5 deletions(-) diff --git a/changelog.txt b/changelog.txt index f457ea9b..ffabfa1f 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,4 +1,5 @@ ---version 2.0.4 yet to be released--- +24-dec-2008 - adelikat - added undo/redo savestate hotkey. Win32 - made undo/redo default key mapping Ctrl+Z 24-dec-2008 - adelikat - win32 - added Last ROM used context menu item when no game loaded 24-dec-2008 - shinydoofy - sdl - added option to mute FCEUX for avi capturing, check the docs for more detail 23-dec-2008 - adelikat - Win32 - Undo/redo loadstate and Undo/redo savestate context menu items added diff --git a/src/drivers/win/mapinput.cpp b/src/drivers/win/mapinput.cpp index 712d851e..a4b98eb0 100644 --- a/src/drivers/win/mapinput.cpp +++ b/src/drivers/win/mapinput.cpp @@ -84,6 +84,7 @@ static struct { EMUCMD_SCRIPT_RELOAD, SCAN_L | CMD_KEY_SHIFT }, { EMUCMD_OPENROM, SCAN_O | CMD_KEY_CTRL }, { EMUCMD_CLOSEROM, SCAN_W | CMD_KEY_CTRL }, + { EMUCMD_MISC_UNDOREDOSAVESTATE, SCAN_Z | CMD_KEY_CTRL }, }; #define NUM_DEFAULT_MAPPINGS (sizeof(DefaultCommandMapping)/sizeof(DefaultCommandMapping[0])) diff --git a/src/drivers/win/window.cpp b/src/drivers/win/window.cpp index 0928b0e4..1ee6a3ca 100644 --- a/src/drivers/win/window.cpp +++ b/src/drivers/win/window.cpp @@ -417,9 +417,9 @@ void UpdateContextMenuItems(HMENU context, int whichContext) { string undoLoadstate = "Undo loadstate"; string redoLoadstate = "Redo loadstate"; - string redoSavestate = "Redo savestate"; string undoSavestate = "Undo savestate"; - + string redoSavestate = "Redo savestate"; + //Undo Loadstate if (CheckBackupSaveStateExist() && (undoLS || redoLS)) EnableMenuItem(context,FCEUX_CONTEXT_UNDOLOADSTATE,MF_BYCOMMAND | MF_ENABLED); @@ -1315,7 +1315,8 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) //Undo Savestate case FCEUX_CONTEXT_UNDOSAVESTATE: - SwapSaveState(); + if (undoSS || redoSS) + SwapSaveState(); break; //Undo Loadstate diff --git a/src/input.cpp b/src/input.cpp index 30e143d2..67d98968 100644 --- a/src/input.cpp +++ b/src/input.cpp @@ -594,6 +594,7 @@ static void FA_SkipLag(void); static void OpenRom(void); static void CloseRom(void); static void MovieSubtitleToggle(void); +static void UndoRedoSavestate(void); struct EMUCMDTABLE FCEUI_CommandTable[]= { @@ -704,7 +705,8 @@ struct EMUCMDTABLE FCEUI_CommandTable[]= { EMUCMD_FRAMEADV_SKIPLAG, EMUCMDTYPE_MISC, FA_SkipLag, 0, 0, "Frame Adv.-Skip Lag", 0}, { EMUCMD_OPENROM, EMUCMDTYPE_TOOL, OpenRom, 0, 0, "Open ROM", 0}, { EMUCMD_CLOSEROM, EMUCMDTYPE_TOOL, CloseRom, 0, 0, "Close ROM", 0}, - { EMUCMD_MISC_DISPLAY_MOVIESUBTITLES, EMUCMDTYPE_MISC, MovieSubtitleToggle,0,0,"Toggle Movie Subtitles", 0} + { EMUCMD_MISC_DISPLAY_MOVIESUBTITLES, EMUCMDTYPE_MISC, MovieSubtitleToggle,0,0,"Toggle Movie Subtitles", 0}, + { EMUCMD_MISC_UNDOREDOSAVESTATE, EMUCMDTYPE_MISC, UndoRedoSavestate, 0,0,"Undo/Redo Savestate", 0} }; #define NUM_EMU_CMDS (sizeof(FCEUI_CommandTable)/sizeof(FCEUI_CommandTable[0])) @@ -912,4 +914,10 @@ static void MovieSubtitleToggle(void) movieSubtitles ^= 1; if (movieSubtitles) FCEU_DispMessage("Movie subtitles on"); else FCEU_DispMessage("Movie subtitles off"); +} + +static void UndoRedoSavestate(void) +{ + if (lastSavestateMade && (undoSS || redoSS)) + SwapSaveState(); } \ No newline at end of file diff --git a/src/input.h b/src/input.h index 1340151a..7601018d 100644 --- a/src/input.h +++ b/src/input.h @@ -212,6 +212,7 @@ enum EMUCMD EMUCMD_CLOSEROM, //----------------------------- EMUCMD_MISC_DISPLAY_MOVIESUBTITLES, + EMUCMD_MISC_UNDOREDOSAVESTATE, EMUCMD_MAX }; diff --git a/src/state.cpp b/src/state.cpp index b810f2cc..1d8b611a 100644 --- a/src/state.cpp +++ b/src/state.cpp @@ -447,7 +447,7 @@ void FCEUSS_Save(const char *fname) { CreateBackupSaveState(fn); //Make a backup of previous savestate before overwriting it strcpy(lastSavestateMade,fn); //Remember what the last savestate filename was (for undoing later) - undoSS = true; //Backup was created so redo is possible + undoSS = true; //Backup was created so undo is possible } else undoSS = false; //so backup made so lastSavestateMade does have a backup file, so no undo @@ -474,6 +474,7 @@ void FCEUSS_Save(const char *fname) SaveStateStatus[CurrentState]=1; FCEU_DispMessage("State %d saved.",CurrentState); } + redoSS = false; //we have a new savestate so redo is not possible } int FCEUSS_LoadFP_old(std::istream* is, ENUM_SSLOADPARAMS params)