diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bb37f0f6..9d2dd703 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -389,6 +389,8 @@ set(SRC_DRIVERS_SDL ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/GamePadConf.cpp ${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/LuaControl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/ConsoleVideoConf.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/ConsoleSoundConf.cpp ${CMAKE_CURRENT_SOURCE_DIR}/drivers/Qt/AboutWindow.cpp diff --git a/src/drivers/Qt/ConsoleWindow.cpp b/src/drivers/Qt/ConsoleWindow.cpp index e8eef4f1..5502c9bb 100644 --- a/src/drivers/Qt/ConsoleWindow.cpp +++ b/src/drivers/Qt/ConsoleWindow.cpp @@ -20,6 +20,8 @@ #include "Qt/GamePadConf.h" #include "Qt/HotKeyConf.h" #include "Qt/PaletteConf.h" +#include "Qt/GuiConf.h" +#include "Qt/LuaControl.h" #include "Qt/ConsoleSoundConf.h" #include "Qt/ConsoleVideoConf.h" #include "Qt/AboutWindow.h" @@ -294,6 +296,14 @@ void consoleWin_t::createMainMenu(void) optMenu->addAction(paletteConfig); + // Options -> GUI Config + guiConfig = new QAction(tr("GUI Config"), this); + //guiConfig->setShortcut( QKeySequence(tr("Ctrl+C"))); + guiConfig->setStatusTip(tr("GUI Configure")); + connect(guiConfig, SIGNAL(triggered()), this, SLOT(openGuiConfWin(void)) ); + + optMenu->addAction(guiConfig); + // Options -> Auto-Resume autoResume = new QAction(tr("Auto-Resume Play"), this); //autoResume->setShortcut( QKeySequence(tr("Ctrl+C"))); @@ -510,7 +520,7 @@ int consoleWin_t::getDirFromFile( const char *path, char *dir ) void consoleWin_t::openROMFile(void) { - int ret; + int ret, useNativeFileDialogVal; QString filename; std::string last; char dir[512]; @@ -518,7 +528,7 @@ void consoleWin_t::openROMFile(void) dialog.setFileMode(QFileDialog::ExistingFile); - dialog.setNameFilter(tr("NES files (*.nes)(*.NES) ;; All files (*)")); + dialog.setNameFilter(tr("NES files (*.nes *.NES) ;; All files (*)")); dialog.setViewMode(QFileDialog::List); @@ -528,9 +538,10 @@ void consoleWin_t::openROMFile(void) dialog.setDirectory( tr(dir) ); - // 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); + // 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(); @@ -571,7 +582,7 @@ void consoleWin_t::closeROMCB(void) void consoleWin_t::loadNSF(void) { - int ret; + int ret, useNativeFileDialogVal; QString filename; std::string last; char dir[512]; @@ -579,7 +590,7 @@ void consoleWin_t::loadNSF(void) dialog.setFileMode(QFileDialog::ExistingFile); - dialog.setNameFilter(tr("NSF Sound Files (*.nsf)(*.NSF) ;; Zip Files (*.zip)(*.ZIP) ;; All files (*)")); + dialog.setNameFilter(tr("NSF Sound Files (*.nsf *.NSF) ;; Zip Files (*.zip *.ZIP) ;; All files (*)")); dialog.setViewMode(QFileDialog::List); @@ -589,9 +600,10 @@ void consoleWin_t::loadNSF(void) dialog.setDirectory( tr(dir) ); - // 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); + // 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(); @@ -622,7 +634,7 @@ void consoleWin_t::loadNSF(void) void consoleWin_t::loadStateFrom(void) { - int ret; + int ret, useNativeFileDialogVal; QString filename; std::string last; char dir[512]; @@ -630,7 +642,7 @@ void consoleWin_t::loadStateFrom(void) dialog.setFileMode(QFileDialog::ExistingFile); - dialog.setNameFilter(tr("FCS Files (*.fc?)(*.FC?) ;; SAV Files (*.sav)(*.SAV) ;; All files (*)")); + dialog.setNameFilter(tr("FCS Files (*.fc? *.FC?) ;; SAV Files (*.sav *.SAV) ;; All files (*)")); dialog.setViewMode(QFileDialog::List); @@ -640,9 +652,10 @@ void consoleWin_t::loadStateFrom(void) dialog.setDirectory( tr(dir) ); - // 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); + // 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(); @@ -673,7 +686,7 @@ void consoleWin_t::loadStateFrom(void) void consoleWin_t::saveStateAs(void) { - int ret; + int ret, useNativeFileDialogVal; QString filename; std::string last; char dir[512]; @@ -681,7 +694,7 @@ void consoleWin_t::saveStateAs(void) dialog.setFileMode(QFileDialog::AnyFile); - dialog.setNameFilter(tr("FCS Files (*.fc?)(*.FC?) ;; SAV Files (*.sav)(*.SAV) ;; All files (*)")); + dialog.setNameFilter(tr("SAV Files (*.sav *.SAV) ;; All files (*)")); dialog.setViewMode(QFileDialog::List); @@ -691,9 +704,10 @@ void consoleWin_t::saveStateAs(void) dialog.setDirectory( tr(dir) ); - // 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); + // 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(); @@ -816,61 +830,18 @@ void consoleWin_t::takeScreenShot(void) void consoleWin_t::loadLua(void) { #ifdef _S9XLUA_H - int ret; - QString filename; - std::string last; - char dir[512]; - QFileDialog dialog(this, tr("Open LUA Script") ); + LuaControlDialog_t *luaCtrlWin; - dialog.setFileMode(QFileDialog::ExistingFile); + //printf("Open Lua Control Window\n"); + + luaCtrlWin = new LuaControlDialog_t(this); + + luaCtrlWin->show(); + luaCtrlWin->exec(); - dialog.setNameFilter(tr("LUA Scripts (*.lua)(*.LUA) ;; All files (*)")); + delete luaCtrlWin; - dialog.setViewMode(QFileDialog::List); - - g_config->getOption ("SDL.LastLoadLua", &last ); - - if ( last.size() == 0 ) - { - last.assign( "/usr/share/fceux/luaScripts" ); - } - - getDirFromFile( last.c_str(), dir ); - - dialog.setDirectory( tr(dir) ); - - // 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(); - - g_config->setOption ("SDL.LastLoadLua", filename.toStdString().c_str() ); - - fceuWrapperLock(); - if ( 0 == FCEU_LoadLuaCode( filename.toStdString().c_str() ) ) - { - printf("Error: Could not open the selected lua script: '%s'\n", filename.toStdString().c_str() ); - } - fceuWrapperUnLock(); + //printf("Lua Control Window Destroyed\n"); #endif } @@ -956,6 +927,22 @@ void consoleWin_t::openPaletteConfWin(void) //printf("Palette Config Window Destroyed\n"); } +void consoleWin_t::openGuiConfWin(void) +{ + GuiConfDialog_t *guiConfWin; + + //printf("Open GUI Config Window\n"); + + guiConfWin = new GuiConfDialog_t(this); + + guiConfWin->show(); + guiConfWin->exec(); + + delete guiConfWin; + + //printf("GUI Config Window Destroyed\n"); +} + void consoleWin_t::toggleAutoResume(void) { //printf("Auto Resume: %i\n", autoResume->isChecked() ); @@ -1024,7 +1011,7 @@ void consoleWin_t::toggleGameGenie(bool checked) void consoleWin_t::loadGameGenieROM(void) { - int ret; + int ret, useNativeFileDialogVal; QString filename; std::string last; char dir[512]; @@ -1032,7 +1019,7 @@ void consoleWin_t::loadGameGenieROM(void) dialog.setFileMode(QFileDialog::ExistingFile); - dialog.setNameFilter(tr("GG ROM File (gg.rom)(*Genie*.nes) ;; All files (*)")); + dialog.setNameFilter(tr("GG ROM File (gg.rom *Genie*.nes) ;; All files (*)")); dialog.setViewMode(QFileDialog::List); @@ -1042,9 +1029,10 @@ void consoleWin_t::loadGameGenieROM(void) dialog.setDirectory( tr(dir) ); - // 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); + // 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(); @@ -1104,7 +1092,7 @@ void consoleWin_t::fdsEjectDisk(void) void consoleWin_t::fdsLoadBiosFile(void) { - int ret; + int ret, useNativeFileDialogVal; QString filename; std::string last; char dir[512]; @@ -1112,7 +1100,7 @@ void consoleWin_t::fdsLoadBiosFile(void) dialog.setFileMode(QFileDialog::ExistingFile); - dialog.setNameFilter(tr("ROM files (*.rom)(*.ROM) ;; All files (*)")); + dialog.setNameFilter(tr("ROM files (*.rom *.ROM) ;; All files (*)")); dialog.setViewMode(QFileDialog::List); @@ -1122,9 +1110,10 @@ void consoleWin_t::fdsLoadBiosFile(void) dialog.setDirectory( tr(dir) ); - // 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); + // 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(); @@ -1168,7 +1157,7 @@ void consoleWin_t::fdsLoadBiosFile(void) void consoleWin_t::openMovie(void) { - int ret; + int ret, useNativeFileDialogVal; QString filename; std::string last; char dir[512]; @@ -1186,9 +1175,10 @@ void consoleWin_t::openMovie(void) dialog.setDirectory( tr(dir) ); - // 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); + // 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(); @@ -1250,7 +1240,7 @@ void consoleWin_t::recordMovie(void) void consoleWin_t::recordMovieAs(void) { - int ret; + int ret, useNativeFileDialogVal; QString filename; std::string last; char dir[512]; @@ -1268,9 +1258,10 @@ void consoleWin_t::recordMovieAs(void) dialog.setDirectory( tr(dir) ); - // 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); + // 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(); diff --git a/src/drivers/Qt/ConsoleWindow.h b/src/drivers/Qt/ConsoleWindow.h index e5d563fb..638a901d 100644 --- a/src/drivers/Qt/ConsoleWindow.h +++ b/src/drivers/Qt/ConsoleWindow.h @@ -68,6 +68,7 @@ class consoleWin_t : public QMainWindow QAction *gameVideoConfig; QAction *hotkeyConfig; QAction *paletteConfig; + QAction *guiConfig; QAction *autoResume; QAction *fullscreen; QAction *aboutAct; @@ -118,6 +119,7 @@ class consoleWin_t : public QMainWindow void openGameVideoConfWin(void); void openHotkeyConfWin(void); void openPaletteConfWin(void); + void openGuiConfWin(void); void toggleAutoResume(void); void toggleFullscreen(void); void updatePeriodic(void); diff --git a/src/drivers/Qt/GuiConf.cpp b/src/drivers/Qt/GuiConf.cpp new file mode 100644 index 00000000..4ca60609 --- /dev/null +++ b/src/drivers/Qt/GuiConf.cpp @@ -0,0 +1,58 @@ +// PaletteConf.cpp +// +#include + +#include "Qt/GuiConf.h" +#include "Qt/main.h" +#include "Qt/input.h" +#include "Qt/config.h" +#include "Qt/keyscan.h" +#include "Qt/fceuWrapper.h" + +//---------------------------------------------------- +GuiConfDialog_t::GuiConfDialog_t(QWidget *parent) + : QDialog( parent ) +{ + int useNativeFileDialogVal; + QVBoxLayout *mainLayout; + + //resize( 512, 600 ); + + // sync with config + g_config->getOption ("SDL.UseNativeFileDialog", &useNativeFileDialogVal); + + setWindowTitle( tr("GUI Config") ); + + mainLayout = new QVBoxLayout(); + + useNativeFileDialog = new QCheckBox( tr("Use Native OS File Dialog") ); + + useNativeFileDialog->setChecked( useNativeFileDialogVal ); + + connect(useNativeFileDialog , SIGNAL(stateChanged(int)), this, SLOT(useNativeFileDialogChanged(int)) ); + + mainLayout->addWidget( useNativeFileDialog ); + + setLayout( mainLayout ); +} + +//---------------------------------------------------- +GuiConfDialog_t::~GuiConfDialog_t(void) +{ + +} +//---------------------------------------------------- +void GuiConfDialog_t::closeWindow(void) +{ + //printf("Close Window\n"); + done(0); +} +//---------------------------------------------------- +void GuiConfDialog_t::useNativeFileDialogChanged(int state) +{ + int value = (state == Qt::Unchecked) ? 0 : 1; + + g_config->setOption ("SDL.UseNativeFileDialog", value); + +} +//---------------------------------------------------- diff --git a/src/drivers/Qt/GuiConf.h b/src/drivers/Qt/GuiConf.h new file mode 100644 index 00000000..dcc3d313 --- /dev/null +++ b/src/drivers/Qt/GuiConf.h @@ -0,0 +1,37 @@ +// GuiConf.h +// + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Qt/main.h" + +class GuiConfDialog_t : public QDialog +{ + Q_OBJECT + + public: + GuiConfDialog_t(QWidget *parent = 0); + ~GuiConfDialog_t(void); + + protected: + QCheckBox *useNativeFileDialog; + private: + + public slots: + void closeWindow(void); + private slots: + void useNativeFileDialogChanged(int v); + +}; diff --git a/src/drivers/Qt/LuaControl.cpp b/src/drivers/Qt/LuaControl.cpp new file mode 100644 index 00000000..cf924242 --- /dev/null +++ b/src/drivers/Qt/LuaControl.cpp @@ -0,0 +1,252 @@ +// LuaControl.cpp +// +#include + +#include +#include + +#include "../../fceu.h" + +#ifdef _S9XLUA_H +#include "../../fceulua.h" +#endif + +#include "Qt/LuaControl.h" +#include "Qt/main.h" +#include "Qt/input.h" +#include "Qt/config.h" +#include "Qt/keyscan.h" +#include "Qt/fceuWrapper.h" + +static bool luaScriptRunning = false; + +static std::string luaOutputText; +static std::list winList; +//---------------------------------------------------- +LuaControlDialog_t::LuaControlDialog_t(QWidget *parent) + : QDialog( parent ) +{ + QVBoxLayout *mainLayout; + QHBoxLayout *hbox; + QLabel *lbl; + std::string filename; + + resize( 512, 512 ); + + setWindowTitle( tr("Lua Script Control") ); + + mainLayout = new QVBoxLayout(); + + lbl = new QLabel( tr("Script File:") ); + + scriptPath = new QLineEdit(); + scriptArgs = new QLineEdit(); + + g_config->getOption ("SDL.LastLoadLua", &filename ); + + scriptPath->setText( filename.c_str() ); + + luaOutput = new QTextEdit(); + luaOutput->setReadOnly(true); + + hbox = new QHBoxLayout(); + + browseButton = new QPushButton( tr("Browse") ); + stopButton = new QPushButton( tr("Stop") ); + + if ( luaScriptRunning ) + { + startButton = new QPushButton( tr("Restart") ); + } + else + { + startButton = new QPushButton( tr("Start") ); + } + + stopButton->setEnabled( luaScriptRunning ); + + connect(browseButton , SIGNAL(clicked()), this, SLOT(openLuaScriptFile(void)) ); + connect(stopButton , SIGNAL(clicked()), this, SLOT(stopLuaScript(void)) ); + connect(startButton , SIGNAL(clicked()), this, SLOT(startLuaScript(void)) ); + + hbox->addWidget( browseButton ); + hbox->addWidget( stopButton ); + hbox->addWidget( startButton ); + + mainLayout->addWidget( lbl ); + mainLayout->addWidget( scriptPath ); + mainLayout->addLayout( hbox ); + + hbox = new QHBoxLayout(); + lbl = new QLabel( tr("Arguments:") ); + + hbox->addWidget( lbl ); + hbox->addWidget( scriptArgs ); + + mainLayout->addLayout( hbox ); + + lbl = new QLabel( tr("Output Console:") ); + mainLayout->addWidget( lbl ); + mainLayout->addWidget( luaOutput ); + + //connect(useNativeFileDialog , SIGNAL(stateChanged(int)), this, SLOT(useNativeFileDialogChanged(int)) ); + + setLayout( mainLayout ); + + winList.push_back( this ); +} + +//---------------------------------------------------- +LuaControlDialog_t::~LuaControlDialog_t(void) +{ + std::list ::iterator it; + + for (it = winList.begin(); it != winList.end(); it++) + { + if ( (*it) == this ) + { + winList.erase(it); + //printf("Removing Lua Window\n"); + break; + } + } +} +//---------------------------------------------------- +void LuaControlDialog_t::closeWindow(void) +{ + //printf("Close Window\n"); + done(0); +} +//---------------------------------------------------- +void LuaControlDialog_t::openLuaScriptFile(void) +{ +#ifdef _S9XLUA_H + int ret, useNativeFileDialogVal; + QString filename; + std::string last; + //char dir[512]; + QFileDialog dialog(this, tr("Open LUA Script") ); + + dialog.setFileMode(QFileDialog::ExistingFile); + + dialog.setNameFilter(tr("LUA Scripts (*.lua *.LUA) ;; All files (*)")); + + dialog.setViewMode(QFileDialog::List); + + g_config->getOption ("SDL.LastLoadLua", &last ); + + if ( last.size() == 0 ) + { + last.assign( "/usr/share/fceux/luaScripts" ); + } + + //getDirFromFile( last.c_str(), dir ); + + dialog.setDirectory( tr("/usr/share/fceux/luaScripts") ); + + // 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(); + + g_config->setOption ("SDL.LastLoadLua", filename.toStdString().c_str() ); + + scriptPath->setText( filename.toStdString().c_str() ); + +#endif +} +//---------------------------------------------------- +void LuaControlDialog_t::startLuaScript(void) +{ +#ifdef _S9XLUA_H + luaOutputText.clear(); + fceuWrapperLock(); + if ( 0 == FCEU_LoadLuaCode( scriptPath->text().toStdString().c_str(), scriptArgs->text().toStdString().c_str() ) ) + { + printf("Error: Could not open the selected lua script: '%s'\n", scriptPath->text().toStdString().c_str() ); + } + fceuWrapperUnLock(); +#endif +} +//---------------------------------------------------- +void LuaControlDialog_t::stopLuaScript(void) +{ +#ifdef _S9XLUA_H + fceuWrapperLock(); + FCEU_LuaStop(); + fceuWrapperUnLock(); +#endif +} +//---------------------------------------------------- +void LuaControlDialog_t::refreshState(void) +{ + if ( luaScriptRunning ) + { + stopButton->setEnabled( true ); + startButton->setText( tr("Restart") ); + } + else + { + stopButton->setEnabled( false ); + startButton->setText( tr("Start") ); + } + luaOutput->setText( luaOutputText.c_str() ); +} +//---------------------------------------------------- +void updateLuaWindows( void ) +{ + std::list ::iterator it; + + for (it = winList.begin(); it != winList.end(); it++) + { + (*it)->refreshState(); + } +} +//---------------------------------------------------- +void WinLuaOnStart(intptr_t hDlgAsInt) +{ + luaScriptRunning = true; + + //printf("Lua Script Running: %i \n", luaScriptRunning ); + + updateLuaWindows(); +} +//---------------------------------------------------- +void WinLuaOnStop(intptr_t hDlgAsInt) +{ + luaScriptRunning = false; + + //printf("Lua Script Running: %i \n", luaScriptRunning ); + + updateLuaWindows(); +} +//---------------------------------------------------- +void PrintToWindowConsole(intptr_t hDlgAsInt, const char* str) +{ + //printf("%s\n", str ); + + luaOutputText.append( str ); + + updateLuaWindows(); +} +//---------------------------------------------------- diff --git a/src/drivers/Qt/LuaControl.h b/src/drivers/Qt/LuaControl.h new file mode 100644 index 00000000..824f52fa --- /dev/null +++ b/src/drivers/Qt/LuaControl.h @@ -0,0 +1,47 @@ +// LuaControl.h +// + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "Qt/main.h" + +class LuaControlDialog_t : public QDialog +{ + Q_OBJECT + + public: + LuaControlDialog_t(QWidget *parent = 0); + ~LuaControlDialog_t(void); + + void refreshState(void); + + protected: + QLineEdit *scriptPath; + QLineEdit *scriptArgs; + QPushButton *browseButton; + QPushButton *stopButton; + QPushButton *startButton; + QTextEdit *luaOutput; + private: + + public slots: + void closeWindow(void); + private slots: + void openLuaScriptFile(void); + void startLuaScript(void); + void stopLuaScript(void); + +}; diff --git a/src/drivers/Qt/PaletteConf.cpp b/src/drivers/Qt/PaletteConf.cpp index dcfe85f0..500e892c 100644 --- a/src/drivers/Qt/PaletteConf.cpp +++ b/src/drivers/Qt/PaletteConf.cpp @@ -287,21 +287,22 @@ void PaletteConfDialog_t::clearPalette(void) //---------------------------------------------------- void PaletteConfDialog_t::openPaletteFile(void) { - int ret; + int ret, useNativeFileDialogVal; QString filename; QFileDialog dialog(this, tr("Open NES Palette") ); dialog.setFileMode(QFileDialog::ExistingFile); - dialog.setNameFilter(tr("NES Palettes (*.pal)(*.PAL) ;; All files (*)")); + dialog.setNameFilter(tr("NES Palettes (*.pal *.PAL) ;; All files (*)")); dialog.setViewMode(QFileDialog::List); dialog.setDirectory( tr("/usr/share/fceux/palettes") ); - // 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); + // 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(); diff --git a/src/drivers/Qt/config.cpp b/src/drivers/Qt/config.cpp index 5c16c617..d08e3d24 100644 --- a/src/drivers/Qt/config.cpp +++ b/src/drivers/Qt/config.cpp @@ -292,6 +292,8 @@ InitConfig() config->addOption("_lastopennsf", "SDL.LastOpenNSF", home_dir); config->addOption("_lastsavestateas", "SDL.LastSaveStateAs", home_dir); config->addOption("_lastloadlua", "SDL.LastLoadLua", ""); + + config->addOption("_useNativeFileDialog", "SDL.UseNativeFileDialog", false); // fcm -> fm2 conversion config->addOption("fcmconvert", "SDL.FCMConvert", ""); diff --git a/src/drivers/sdl/sdl.cpp b/src/drivers/sdl/sdl.cpp index dd3d1c83..9eaab246 100644 --- a/src/drivers/sdl/sdl.cpp +++ b/src/drivers/sdl/sdl.cpp @@ -77,6 +77,8 @@ int pal_emulation; int dendy; bool swapDuty; +static bool luaScriptRunning = false; + // -Video Modes Tag- : See --special static const char *DriverUsage= "Option Value Description\n" @@ -1002,6 +1004,27 @@ void FCEUD_PrintError(const char *errormsg) fprintf(stderr, "%s\n", errormsg); } +//---------------------------------------------------- +void WinLuaOnStart(intptr_t hDlgAsInt) +{ + luaScriptRunning = true; + + //printf("Lua Script Running: %i \n", luaScriptRunning ); +} +//---------------------------------------------------- +void WinLuaOnStop(intptr_t hDlgAsInt) +{ + luaScriptRunning = false; + + //printf("Lua Script Running: %i \n", luaScriptRunning ); +} +//---------------------------------------------------- +void PrintToWindowConsole(intptr_t hDlgAsInt, const char* str) +{ + printf("Lua Output: %s\n", str ); +} +//---------------------------------------------------- + // dummy functions diff --git a/src/lua-engine.cpp b/src/lua-engine.cpp index 645eaf31..42344162 100644 --- a/src/lua-engine.cpp +++ b/src/lua-engine.cpp @@ -170,11 +170,11 @@ static intptr_t info_uid; #ifdef WIN32 extern HWND LuaConsoleHWnd; extern INT_PTR CALLBACK DlgLuaScriptDialog(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); +void TaseditorDisableManualFunctionIfNeeded(); +#endif extern void PrintToWindowConsole(intptr_t hDlgAsInt, const char* str); extern void WinLuaOnStart(intptr_t hDlgAsInt); extern void WinLuaOnStop(intptr_t hDlgAsInt); -void TaseditorDisableManualFunctionIfNeeded(); -#endif static lua_State *L; @@ -6249,9 +6249,10 @@ int FCEU_LoadLuaCode(const char *filename, const char *arg) { LuaConsoleHWnd = CreateDialog(fceu_hInstance, MAKEINTRESOURCE(IDD_LUA), hAppWnd, DlgLuaScriptDialog); info_uid = (intptr_t)LuaConsoleHWnd; #else - info_print = NULL; - info_onstart = NULL; - info_onstop = NULL; + info_print = PrintToWindowConsole; + info_onstart = WinLuaOnStart; + info_onstop = WinLuaOnStop; + info_uid = (intptr_t)0; #endif if (info_onstart) info_onstart(info_uid);