diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 9821e1b8..0cf16cc3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -430,6 +430,7 @@ set(SRC_DRIVERS_SDL ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/HotKeyConf.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/PaletteConf.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/GuiConf.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/MoviePlay.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/MovieOptions.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/LuaControl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/CheatsConf.cpp diff --git a/src/drivers/Qt/ConsoleWindow.cpp b/src/drivers/Qt/ConsoleWindow.cpp index f34661a1..fb425960 100644 --- a/src/drivers/Qt/ConsoleWindow.cpp +++ b/src/drivers/Qt/ConsoleWindow.cpp @@ -24,6 +24,7 @@ #include "Qt/HotKeyConf.h" #include "Qt/PaletteConf.h" #include "Qt/GuiConf.h" +#include "Qt/MoviePlay.h" #include "Qt/MovieOptions.h" #include "Qt/LuaControl.h" #include "Qt/CheatsConf.h" @@ -660,10 +661,10 @@ void consoleWin_t::createMainMenu(void) // Movie movieMenu = menuBar()->addMenu(tr("Movie")); - // Movie -> Open - openMovAct = new QAction(tr("Open"), this); + // Movie -> Play + openMovAct = new QAction(tr("Play"), this); openMovAct->setShortcut( QKeySequence(tr("Shift+F7"))); - openMovAct->setStatusTip(tr("Open Movie File")); + openMovAct->setStatusTip(tr("Play Movie File")); connect(openMovAct, SIGNAL(triggered()), this, SLOT(openMovie(void)) ); movieMenu->addAction(openMovAct); @@ -1606,79 +1607,88 @@ void consoleWin_t::emuSetFrameAdvDelay(void) void consoleWin_t::openMovie(void) { - int ret, useNativeFileDialogVal; - QString filename; - std::string last; - char dir[512]; - char replayReadOnlySetting; - QFileDialog dialog(this, tr("Open FM2 Movie") ); + MoviePlayDialog_t *win; - dialog.setFileMode(QFileDialog::ExistingFile); + win = new MoviePlayDialog_t(this); - dialog.setNameFilter(tr("FM2 Movies (*.fm2) ;; All files (*)")); - - dialog.setViewMode(QFileDialog::List); - dialog.setFilter( QDir::AllEntries | QDir::AllDirs | QDir::Hidden ); - dialog.setLabelText( QFileDialog::Accept, tr("Open") ); - - g_config->getOption ("SDL.LastOpenMovie", &last ); - - getDirFromFile( last.c_str(), dir ); - - dialog.setDirectory( tr(dir) ); - - // Check config option to use native file dialog or not - g_config->getOption ("SDL.UseNativeFileDialog", &useNativeFileDialogVal); - - dialog.setOption(QFileDialog::DontUseNativeDialog, !useNativeFileDialogVal); - - 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() ); - - if (suggestReadOnlyReplay) - { - replayReadOnlySetting = true; - } - else - { - replayReadOnlySetting = FCEUI_GetMovieToggleReadOnly(); - } - - fceuWrapperLock(); - if (FCEUI_LoadMovie( filename.toStdString().c_str(), - replayReadOnlySetting, pauseframe ? pauseframe : false) == false) - { - printf("Error: Could not open movie file: %s \n", filename.toStdString().c_str() ); - } - g_config->setOption ("SDL.LastOpenMovie", filename.toStdString().c_str() ); - fceuWrapperUnLock(); - - return; + win->show(); } +//void consoleWin_t::openMovie(void) +//{ +// int ret, useNativeFileDialogVal; +// QString filename; +// std::string last; +// char dir[512]; +// char replayReadOnlySetting; +// QFileDialog dialog(this, tr("Open FM2 Movie") ); +// +// dialog.setFileMode(QFileDialog::ExistingFile); +// +// dialog.setNameFilter(tr("FM2 Movies (*.fm2) ;; All files (*)")); +// +// dialog.setViewMode(QFileDialog::List); +// dialog.setFilter( QDir::AllEntries | QDir::AllDirs | QDir::Hidden ); +// dialog.setLabelText( QFileDialog::Accept, tr("Open") ); +// +// g_config->getOption ("SDL.LastOpenMovie", &last ); +// +// getDirFromFile( last.c_str(), dir ); +// +// dialog.setDirectory( tr(dir) ); +// +// // Check config option to use native file dialog or not +// g_config->getOption ("SDL.UseNativeFileDialog", &useNativeFileDialogVal); +// +// dialog.setOption(QFileDialog::DontUseNativeDialog, !useNativeFileDialogVal); +// +// 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() ); +// +// if (suggestReadOnlyReplay) +// { +// replayReadOnlySetting = true; +// } +// else +// { +// replayReadOnlySetting = FCEUI_GetMovieToggleReadOnly(); +// } +// +// fceuWrapperLock(); +// if (FCEUI_LoadMovie( filename.toStdString().c_str(), +// replayReadOnlySetting, pauseframe ? pauseframe : false) == false) +// { +// printf("Error: Could not open movie file: %s \n", filename.toStdString().c_str() ); +// } +// g_config->setOption ("SDL.LastOpenMovie", filename.toStdString().c_str() ); +// fceuWrapperUnLock(); +// +// return; +//} + void consoleWin_t::stopMovie(void) { fceuWrapperLock(); diff --git a/src/drivers/Qt/MoviePlay.cpp b/src/drivers/Qt/MoviePlay.cpp new file mode 100644 index 00000000..9858ab56 --- /dev/null +++ b/src/drivers/Qt/MoviePlay.cpp @@ -0,0 +1,209 @@ +// MoviePlay.cpp +// +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "../../fceu.h" +#include "../../movie.h" + +#include "Qt/main.h" +#include "Qt/dface.h" +#include "Qt/input.h" +#include "Qt/config.h" +#include "Qt/keyscan.h" +#include "Qt/fceuWrapper.h" +#include "Qt/ConsoleUtilities.h" +#include "Qt/MoviePlay.h" + +//---------------------------------------------------------------------------- +MoviePlayDialog_t::MoviePlayDialog_t(QWidget *parent) + : QDialog( parent ) +{ + QVBoxLayout *mainLayout, *vbox; + QHBoxLayout *hbox; + QGroupBox *frame; + QGridLayout *grid; + QLabel *lbl; + + setWindowTitle("Movie Play"); + + mainLayout = new QVBoxLayout(); + hbox = new QHBoxLayout(); + + lbl = new QLabel( tr("File:") ); + movSelBox = new QComboBox(); + movBrowseBtn = new QPushButton( tr("Browse") ); + + hbox->addWidget( lbl ); + hbox->addWidget( movSelBox ); + hbox->addWidget( movBrowseBtn ); + + mainLayout->addLayout( hbox ); + + frame = new QGroupBox( tr("Parameters:") ); + vbox = new QVBoxLayout(); + hbox = new QHBoxLayout(); + + frame->setLayout( vbox ); + + openReadOnly = new QCheckBox( tr("Open Read-Only") ); + pauseAtFrame = new QCheckBox( tr("Pause Movie At Frame") ); + + pauseAtFrameEntry = new QLineEdit(); + + vbox->addWidget( openReadOnly ); + vbox->addLayout( hbox ); + hbox->addWidget( pauseAtFrame ); + hbox->addWidget( pauseAtFrameEntry ); + + mainLayout->addWidget( frame ); + + grid = new QGridLayout(); + + mainLayout->addLayout( grid ); + + movLenLbl = new QLabel(); + movFramesLbl = new QLabel(); + recCountLbl = new QLabel(); + recFromLbl = new QLabel(); + romUsedLbl = new QLabel(); + romCsumLbl = new QLabel(); + curCsumLbl = new QLabel(); + emuUsedLbl = new QLabel(); + palUsedLbl = new QLabel(); + newppuUsedLbl = new QLabel(); + + grid->addWidget( new QLabel( tr("Length:") ) , 0, 0, Qt::AlignRight ); + grid->addWidget( new QLabel( tr("Frames:") ) , 1, 0, Qt::AlignRight ); + grid->addWidget( new QLabel( tr("Record Count:") ) , 2, 0, Qt::AlignRight ); + grid->addWidget( new QLabel( tr("Recorded From:") ) , 3, 0, Qt::AlignRight ); + grid->addWidget( new QLabel( tr("ROM Used:") ) , 4, 0, Qt::AlignRight ); + grid->addWidget( new QLabel( tr("ROM Checksum:") ) , 5, 0, Qt::AlignRight ); + grid->addWidget( new QLabel( tr("Current ROM Sum:") ) , 6, 0, Qt::AlignRight ); + grid->addWidget( new QLabel( tr("Emulator Used:") ) , 7, 0, Qt::AlignRight ); + grid->addWidget( new QLabel( tr("PAL:") ) , 8, 0, Qt::AlignRight ); + grid->addWidget( new QLabel( tr("New PPU:") ) , 9, 0, Qt::AlignRight ); + + grid->addWidget( movLenLbl , 0, 1, Qt::AlignLeft ); + grid->addWidget( movFramesLbl , 1, 1, Qt::AlignLeft ); + grid->addWidget( recCountLbl , 2, 1, Qt::AlignLeft ); + grid->addWidget( recFromLbl , 3, 1, Qt::AlignLeft ); + grid->addWidget( romUsedLbl , 4, 1, Qt::AlignLeft ); + grid->addWidget( romCsumLbl , 5, 1, Qt::AlignLeft ); + grid->addWidget( curCsumLbl , 6, 1, Qt::AlignLeft ); + grid->addWidget( emuUsedLbl , 7, 1, Qt::AlignLeft ); + grid->addWidget( palUsedLbl , 8, 1, Qt::AlignLeft ); + grid->addWidget( newppuUsedLbl , 9, 1, Qt::AlignLeft ); + + setLayout( mainLayout ); + + connect( movBrowseBtn , SIGNAL(clicked(void)), this, SLOT(openMovie(void)) ); +} +//---------------------------------------------------------------------------- +MoviePlayDialog_t::~MoviePlayDialog_t(void) +{ + printf("Destroy Movie Play Window\n"); +} +//---------------------------------------------------------------------------- +void MoviePlayDialog_t::closeEvent(QCloseEvent *event) +{ + printf("Movie Play Close Window Event\n"); + done(0); + deleteLater(); + event->accept(); +} +//---------------------------------------------------------------------------- +void MoviePlayDialog_t::closeWindow(void) +{ + //printf("Close Window\n"); + done(0); + deleteLater(); +} +//---------------------------------------------------------------------------- +//void MoviePlayDialog_t::readOnlyReplayChanged( int state ) +//{ +// suggestReadOnlyReplay = (state != Qt::Unchecked); +//} +//---------------------------------------------------------------------------- +void MoviePlayDialog_t::openMovie(void) +{ + int ret, useNativeFileDialogVal; + QString filename; + std::string last; + char dir[512]; + char replayReadOnlySetting; + QFileDialog dialog(this, tr("Open FM2 Movie") ); + + dialog.setFileMode(QFileDialog::ExistingFile); + + dialog.setNameFilter(tr("FM2 Movies (*.fm2) ;; All files (*)")); + + dialog.setViewMode(QFileDialog::List); + dialog.setFilter( QDir::AllEntries | QDir::AllDirs | QDir::Hidden ); + dialog.setLabelText( QFileDialog::Accept, tr("Open") ); + + g_config->getOption ("SDL.LastOpenMovie", &last ); + + getDirFromFile( last.c_str(), dir ); + + dialog.setDirectory( tr(dir) ); + + // Check config option to use native file dialog or not + g_config->getOption ("SDL.UseNativeFileDialog", &useNativeFileDialogVal); + + dialog.setOption(QFileDialog::DontUseNativeDialog, !useNativeFileDialogVal); + + 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() ); + + if (suggestReadOnlyReplay) + { + replayReadOnlySetting = true; + } + else + { + replayReadOnlySetting = FCEUI_GetMovieToggleReadOnly(); + } + + //fceuWrapperLock(); + //if (FCEUI_LoadMovie( filename.toStdString().c_str(), + // replayReadOnlySetting, pauseframe ? pauseframe : false) == false) + //{ + // printf("Error: Could not open movie file: %s \n", filename.toStdString().c_str() ); + //} + g_config->setOption ("SDL.LastOpenMovie", filename.toStdString().c_str() ); + //fceuWrapperUnLock(); + + return; +} +//---------------------------------------------------------------------------- diff --git a/src/drivers/Qt/MoviePlay.h b/src/drivers/Qt/MoviePlay.h new file mode 100644 index 00000000..691f0753 --- /dev/null +++ b/src/drivers/Qt/MoviePlay.h @@ -0,0 +1,56 @@ +// MoviePlay.h +// + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Qt/main.h" + +class MoviePlayDialog_t : public QDialog +{ + Q_OBJECT + + public: + MoviePlayDialog_t(QWidget *parent = 0); + ~MoviePlayDialog_t(void); + + protected: + void closeEvent(QCloseEvent *event); + + QComboBox *movSelBox; + QPushButton *movBrowseBtn; + QCheckBox *openReadOnly; + QCheckBox *pauseAtFrame; + QLineEdit *pauseAtFrameEntry; + + QLabel *movLenLbl; + QLabel *movFramesLbl; + QLabel *recCountLbl; + QLabel *recFromLbl; + QLabel *romUsedLbl; + QLabel *romCsumLbl; + QLabel *curCsumLbl; + QLabel *emuUsedLbl; + QLabel *palUsedLbl; + QLabel *newppuUsedLbl; + + private: + + public slots: + void closeWindow(void); + private slots: + void openMovie(void); + //void readOnlyReplayChanged( int state ); + +};