From 447383efd2e1609b65b25a3a12b0cd26c8bb0e49 Mon Sep 17 00:00:00 2001 From: shinydoofy Date: Sat, 11 Apr 2009 20:30:22 +0000 Subject: [PATCH] SDL: implemented FCEUD_MovieRecordTo --- changelog.txt | 1 + src/drivers/sdl/input.cpp | 68 ++++++++++++++++++++++++++++++++++++--- src/drivers/sdl/sdl.cpp | 1 - 3 files changed, 65 insertions(+), 5 deletions(-) diff --git a/changelog.txt b/changelog.txt index a37fca0e..bf9fc3d8 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,4 @@ +11-apr-2009 - shinydoofy - sdl - implemented starting an FM2 movie on Alt+R 11-apr-2009 - adelikat - made default save slot 0 instead of 1, Win32 - remember last slot used 11-apr-2009 - shinydoofy - sdl - added --pauseframe to pause movie playback on frame x 11-apr-2009 - shinydoofy - sdl - dropped UTFConverter.c from SDL build and added hotkey Q for toggling read-only/read+write movie playback diff --git a/src/drivers/sdl/input.cpp b/src/drivers/sdl/input.cpp index 36dde142..c5ea9acf 100644 --- a/src/drivers/sdl/input.cpp +++ b/src/drivers/sdl/input.cpp @@ -33,6 +33,7 @@ #include "../../movie.h" #include "../../fceu.h" #include "../../driver.h" +#include "../../utils/xstring.h" #ifdef _S9XLUA_H #include "../../fceulua.h" #endif @@ -237,7 +238,7 @@ void setHotKeys() * This function opens a file chooser dialog and returns the filename the * user selected. * */ -std::string GetFilename(const char* title, bool save) +std::string GetFilename(const char* title, bool save, const char* filter) { if (FCEUI_EmulationPaused() == 0) FCEUI_ToggleEmulationPause(); @@ -276,9 +277,15 @@ std::string GetFilename(const char* title, bool save) FILE *fpipe; std::string command = "zenity --file-selection --title=\""; command.append(title); + command.append("\" --file-filter=\""); + command.append(filter); command.append("\""); if (save) // Do we want to save a file or load one? - command.append(" --save --confirm-overwrite"); + { + command.append(" --save --confirm-overwrite --filename=\"."); + command.append(getExtension(filter)); + command.append("\""); + } if ( !(fpipe = (FILE*)popen(command.c_str(),"r")) ) { // If fpipe is NULL FCEUD_PrintError("Pipe error on opening zenity"); @@ -297,6 +304,55 @@ std::string GetFilename(const char* title, bool save) return fname; } +/** + * This function opens a text entry dialog and returns the user's input + */ +std::string GetUserText(const char* title) +{ + if (FCEUI_EmulationPaused() == 0) + FCEUI_ToggleEmulationPause(); // pause emulation + + int fullscreen = 0; + g_config->getOption("SDL.Fullscreen", &fullscreen); + if(fullscreen) + ToggleFS(); // disable fullscreen emulation + + FILE *fpipe; + std::string command = "zenity --entry --title=\""; + command.append(title); + command.append("\" --text=\""); + command.append(title); + command.append(":\""); + + if (!(fpipe = (FILE*)popen(command.c_str(),"r"))) // If fpipe is NULL + FCEUD_PrintError("Pipe error on opening zenity"); + int c; + std::string input; + while((c = fgetc(fpipe))) + { + if (c == EOF || c == '\n') + break; + input += c; + } + pclose(fpipe); + FCEUI_ToggleEmulationPause(); // unpause emulation + return input; +} + + +/** +* Lets the user start a new .fm2 movie file +**/ +void FCEUD_MovieRecordTo() +{ + std::string fname = GetFilename("Save FM2 movie for recording", true, "FM2 movies|*.fm2"); + if (!fname.size()) + return; // no filename selected, quit the whole thing + std::wstring author = mbstowcs(GetUserText("Author name")); // the author can be empty, so no need to check here + + FCEUI_SaveMovie(fname.c_str(), MOVIE_FLAG_FROM_POWERON, author); +} + /** * Parse keyboard commands and execute accordingly. */ @@ -350,6 +406,10 @@ KeyboardCommands() autoMovieBackup ? "en" : "dis"); } + // Start recording an FM2 movie on Alt+R + if(keyonly(R) && is_alt) { + FCEUD_MovieRecordTo(); + } // Famicom disk-system games if(gametype==GIT_FDS) @@ -388,7 +448,7 @@ KeyboardCommands() if(is_shift) { FCEUI_StopMovie(); std::string fname; - fname = GetFilename("Open FM2 movie for playback...", false); + fname = GetFilename("Open FM2 movie for playback...", false, "FM2 movies|*.fm2"); if(fname != "") { if(fname.find(".fm2") != std::string::npos) @@ -472,7 +532,7 @@ KeyboardCommands() #ifdef _S9XLUA_H if(_keyonly(loadLuaKey)) { std::string fname; - fname = GetFilename("Open LUA script...", false); + fname = GetFilename("Open LUA script...", false, "Lua scripts|*.lua"); if(fname != "") FCEU_LoadLuaCode(fname.c_str()); } diff --git a/src/drivers/sdl/sdl.cpp b/src/drivers/sdl/sdl.cpp index 23008c03..8227e7a9 100644 --- a/src/drivers/sdl/sdl.cpp +++ b/src/drivers/sdl/sdl.cpp @@ -715,7 +715,6 @@ void FCEUD_PrintError(const char *errormsg) DUMMY(FCEUD_HideMenuToggle) DUMMY(FCEUD_SaveStateAs) DUMMY(FCEUD_LoadStateFrom) -DUMMY(FCEUD_MovieRecordTo) DUMMY(FCEUD_MovieReplayFrom) DUMMY(FCEUD_ToggleStatusIcon) DUMMY(FCEUD_AviRecordTo)