Added movie menu logic to gui.

This commit is contained in:
Matthew Budd 2020-07-11 20:48:48 -04:00
parent f2dc2c5755
commit b3c51ef4b1
4 changed files with 190 additions and 0 deletions

View File

@ -7,6 +7,7 @@
#include "../../fceu.h"
#include "../../fds.h"
#include "../../movie.h"
#ifdef _S9XLUA_H
#include "../../fceulua.h"
@ -395,6 +396,44 @@ void consoleWin_t::createMainMenu(void)
subMenu->addAction(fdsLoadBiosAct);
//-----------------------------------------------------------------------
// Movie
movieMenu = menuBar()->addMenu(tr("Movie"));
// Movie -> Open
openMovAct = new QAction(tr("Open"), this);
openMovAct->setShortcut( QKeySequence(tr("Shift+F7")));
openMovAct->setStatusTip(tr("Open Movie File"));
connect(openMovAct, SIGNAL(triggered()), this, SLOT(openMovie(void)) );
movieMenu->addAction(openMovAct);
// Movie -> Stop
stopMovAct = new QAction(tr("Stop"), this);
//stopMovAct->setShortcut( QKeySequence(tr("Shift+F7")));
stopMovAct->setStatusTip(tr("Stop Movie Recording"));
connect(stopMovAct, SIGNAL(triggered()), this, SLOT(stopMovie(void)) );
movieMenu->addAction(stopMovAct);
movieMenu->addSeparator();
// Movie -> Record
recMovAct = new QAction(tr("Record"), this);
recMovAct->setShortcut( QKeySequence(tr("Shift+F5")));
recMovAct->setStatusTip(tr("Record Movie"));
connect(recMovAct, SIGNAL(triggered()), this, SLOT(recordMovie(void)) );
movieMenu->addAction(recMovAct);
// Movie -> Record As
recAsMovAct = new QAction(tr("Record As"), this);
//recAsMovAct->setShortcut( QKeySequence(tr("Shift+F5")));
recAsMovAct->setStatusTip(tr("Record Movie"));
connect(recAsMovAct, SIGNAL(triggered()), this, SLOT(recordMovieAs(void)) );
movieMenu->addAction(recAsMovAct);
//-----------------------------------------------------------------------
// Help
helpMenu = menuBar()->addMenu(tr("Help"));
@ -1046,6 +1085,142 @@ void consoleWin_t::fdsLoadBiosFile(void)
return;
}
void consoleWin_t::openMovie(void)
{
int ret;
QString filename;
std::string last;
QFileDialog dialog(this, tr("Open FM2 Movie") );
dialog.setFileMode(QFileDialog::ExistingFile);
dialog.setNameFilter(tr("FM2 Movies (*.fm2) ;; All files (*)"));
dialog.setViewMode(QFileDialog::List);
g_config->getOption ("SDL.LastOpenFile", &last );
dialog.setDirectory( tr(last.c_str()) );
// the gnome default file dialog is not playing nice with QT.
// TODO make this a config option to use native file dialog.
dialog.setOption(QFileDialog::DontUseNativeDialog, true);
dialog.show();
ret = dialog.exec();
if ( ret )
{
QStringList fileList;
fileList = dialog.selectedFiles();
if ( fileList.size() > 0 )
{
filename = fileList[0];
}
}
if ( filename.isNull() )
{
return;
}
qDebug() << "selected file path : " << filename.toUtf8();
int pauseframe;
g_config->getOption ("SDL.PauseFrame", &pauseframe);
g_config->setOption ("SDL.PauseFrame", 0);
FCEUI_printf ("Playing back movie located at %s\n", filename.toStdString().c_str() );
fceuWrapperLock();
if (FCEUI_LoadMovie( filename.toStdString().c_str(),
false, pauseframe ? pauseframe : false) == false)
{
printf("Error: Could not open movie file: %s \n", filename.toStdString().c_str() );
}
fceuWrapperUnLock();
return;
}
void consoleWin_t::stopMovie(void)
{
fceuWrapperLock();
FCEUI_StopMovie();
fceuWrapperUnLock();
return;
}
void consoleWin_t::recordMovie(void)
{
fceuWrapperLock();
if (fceuWrapperGameLoaded())
{
std::string name = FCEU_MakeFName (FCEUMKF_MOVIE, 0, 0);
FCEUI_printf ("Recording movie to %s\n", name.c_str ());
FCEUI_SaveMovie (name.c_str (), MOVIE_FLAG_NONE, L"");
}
fceuWrapperUnLock();
return;
}
void consoleWin_t::recordMovieAs(void)
{
int ret;
QString filename;
std::string last;
QFileDialog dialog(this, tr("Save FM2 Movie for Recording") );
dialog.setFileMode(QFileDialog::AnyFile);
dialog.setNameFilter(tr("FM2 Movies (*.fm2) ;; All files (*)"));
dialog.setViewMode(QFileDialog::List);
g_config->getOption ("SDL.LastOpenFile", &last );
dialog.setDirectory( tr(last.c_str()) );
// the gnome default file dialog is not playing nice with QT.
// TODO make this a config option to use native file dialog.
dialog.setOption(QFileDialog::DontUseNativeDialog, true);
dialog.show();
ret = dialog.exec();
if ( ret )
{
QStringList fileList;
fileList = dialog.selectedFiles();
if ( fileList.size() > 0 )
{
filename = fileList[0];
}
}
if ( filename.isNull() )
{
return;
}
qDebug() << "selected file path : " << filename.toUtf8();
int pauseframe;
g_config->getOption ("SDL.PauseFrame", &pauseframe);
g_config->setOption ("SDL.PauseFrame", 0);
FCEUI_printf ("Recording movie to %s\n", filename.toStdString().c_str() );
fceuWrapperLock();
std::string s = GetUserText ("Author name");
std::wstring author (s.begin (), s.end ());
FCEUI_SaveMovie ( filename.toStdString().c_str(), MOVIE_FLAG_NONE, author);
fceuWrapperUnLock();
return;
}
void consoleWin_t::aboutFCEUX(void)
{
AboutWindow *aboutWin;

View File

@ -50,6 +50,7 @@ class consoleWin_t : public QMainWindow
QMenu *fileMenu;
QMenu *optMenu;
QMenu *emuMenu;
QMenu *movieMenu;
QMenu *helpMenu;
QAction *openROM;
@ -80,6 +81,10 @@ class consoleWin_t : public QMainWindow
QAction *fdsSwitchAct;
QAction *fdsEjectAct;
QAction *fdsLoadBiosAct;
QAction *openMovAct;
QAction *stopMovAct;
QAction *recMovAct;
QAction *recAsMovAct;
QTimer *gameTimer;
emulatorThread_t *emulatorThread;
@ -134,6 +139,10 @@ class consoleWin_t : public QMainWindow
void fdsSwitchDisk(void);
void fdsEjectDisk(void);
void fdsLoadBiosFile(void);
void openMovie(void);
void stopMovie(void);
void recordMovie(void);
void recordMovieAs(void);
};

View File

@ -318,6 +318,11 @@ int fceuWrapperTogglePause(void)
return 0;
}
bool fceuWrapperGameLoaded(void)
{
return (isloaded ? true : false);
}
int fceuWrapperInit( int argc, char *argv[] )
{
int error;

View File

@ -32,4 +32,5 @@ void fceuWrapperUnLock(void);
int fceuWrapperSoftReset(void);
int fceuWrapperHardReset(void);
int fceuWrapperTogglePause(void);
bool fceuWrapperGameLoaded(void);