From 397e17ba994e89412768d41150e3e99afcfd14ae Mon Sep 17 00:00:00 2001 From: Matthew Budd Date: Sun, 19 Jul 2020 18:43:42 -0400 Subject: [PATCH 1/5] Added a GUI config window to for misc GUI options. Added an option to use the native OS file browser when looking for files. --- src/CMakeLists.txt | 1 + src/drivers/Qt/ConsoleWindow.cpp | 106 ++++++++++++++++++++----------- src/drivers/Qt/ConsoleWindow.h | 2 + src/drivers/Qt/GuiConf.cpp | 59 +++++++++++++++++ src/drivers/Qt/GuiConf.h | 37 +++++++++++ src/drivers/Qt/config.cpp | 2 + 6 files changed, 171 insertions(+), 36 deletions(-) create mode 100644 src/drivers/Qt/GuiConf.cpp create mode 100644 src/drivers/Qt/GuiConf.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bb37f0f6..5b4900ff 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -389,6 +389,7 @@ 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/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..113585dd 100644 --- a/src/drivers/Qt/ConsoleWindow.cpp +++ b/src/drivers/Qt/ConsoleWindow.cpp @@ -20,6 +20,7 @@ #include "Qt/GamePadConf.h" #include "Qt/HotKeyConf.h" #include "Qt/PaletteConf.h" +#include "Qt/GuiConf.h" #include "Qt/ConsoleSoundConf.h" #include "Qt/ConsoleVideoConf.h" #include "Qt/AboutWindow.h" @@ -294,6 +295,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 +519,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]; @@ -528,9 +537,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 +581,7 @@ void consoleWin_t::closeROMCB(void) void consoleWin_t::loadNSF(void) { - int ret; + int ret, useNativeFileDialogVal; QString filename; std::string last; char dir[512]; @@ -589,9 +599,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 +633,7 @@ void consoleWin_t::loadNSF(void) void consoleWin_t::loadStateFrom(void) { - int ret; + int ret, useNativeFileDialogVal; QString filename; std::string last; char dir[512]; @@ -640,9 +651,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 +685,7 @@ void consoleWin_t::loadStateFrom(void) void consoleWin_t::saveStateAs(void) { - int ret; + int ret, useNativeFileDialogVal; QString filename; std::string last; char dir[512]; @@ -691,9 +703,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,7 +829,7 @@ void consoleWin_t::takeScreenShot(void) void consoleWin_t::loadLua(void) { #ifdef _S9XLUA_H - int ret; + int ret, useNativeFileDialogVal; QString filename; std::string last; char dir[512]; @@ -839,9 +852,10 @@ void consoleWin_t::loadLua(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(); @@ -956,6 +970,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 +1054,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]; @@ -1042,9 +1072,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 +1135,7 @@ void consoleWin_t::fdsEjectDisk(void) void consoleWin_t::fdsLoadBiosFile(void) { - int ret; + int ret, useNativeFileDialogVal; QString filename; std::string last; char dir[512]; @@ -1122,9 +1153,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 +1200,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 +1218,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 +1283,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 +1301,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..9f9d56b9 --- /dev/null +++ b/src/drivers/Qt/GuiConf.cpp @@ -0,0 +1,59 @@ +// PaletteConf.cpp +// +#include +#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 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/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", ""); From 188320147a38661d4e00bb9a87ab75c48a5e32e7 Mon Sep 17 00:00:00 2001 From: Matthew Budd Date: Sun, 19 Jul 2020 20:04:42 -0400 Subject: [PATCH 2/5] Bug fix for file name patterns used with QFileDialog --- src/drivers/Qt/ConsoleWindow.cpp | 14 +++++++------- src/drivers/Qt/GuiConf.cpp | 3 +-- src/drivers/Qt/PaletteConf.cpp | 11 ++++++----- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/drivers/Qt/ConsoleWindow.cpp b/src/drivers/Qt/ConsoleWindow.cpp index 113585dd..f52b2caf 100644 --- a/src/drivers/Qt/ConsoleWindow.cpp +++ b/src/drivers/Qt/ConsoleWindow.cpp @@ -527,7 +527,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); @@ -589,7 +589,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); @@ -641,7 +641,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); @@ -693,7 +693,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); @@ -837,7 +837,7 @@ void consoleWin_t::loadLua(void) dialog.setFileMode(QFileDialog::ExistingFile); - dialog.setNameFilter(tr("LUA Scripts (*.lua)(*.LUA) ;; All files (*)")); + dialog.setNameFilter(tr("LUA Scripts (*.lua *.LUA) ;; All files (*)")); dialog.setViewMode(QFileDialog::List); @@ -1062,7 +1062,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); @@ -1143,7 +1143,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); diff --git a/src/drivers/Qt/GuiConf.cpp b/src/drivers/Qt/GuiConf.cpp index 9f9d56b9..4ca60609 100644 --- a/src/drivers/Qt/GuiConf.cpp +++ b/src/drivers/Qt/GuiConf.cpp @@ -1,6 +1,5 @@ // PaletteConf.cpp // -#include #include #include "Qt/GuiConf.h" @@ -26,7 +25,7 @@ GuiConfDialog_t::GuiConfDialog_t(QWidget *parent) mainLayout = new QVBoxLayout(); - useNativeFileDialog = new QCheckBox( tr("Use Native File Dialog") ); + useNativeFileDialog = new QCheckBox( tr("Use Native OS File Dialog") ); useNativeFileDialog->setChecked( useNativeFileDialogVal ); 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(); From 122473b575ea791d7ec57d5d01c600cfd2db0749 Mon Sep 17 00:00:00 2001 From: Matthew Budd Date: Sun, 19 Jul 2020 21:15:56 -0400 Subject: [PATCH 3/5] Added Lua control window. --- src/CMakeLists.txt | 1 + src/drivers/Qt/ConsoleWindow.cpp | 63 ++------ src/drivers/Qt/LuaControl.cpp | 246 +++++++++++++++++++++++++++++++ src/drivers/Qt/LuaControl.h | 47 ++++++ src/lua-engine.cpp | 11 +- 5 files changed, 310 insertions(+), 58 deletions(-) create mode 100644 src/drivers/Qt/LuaControl.cpp create mode 100644 src/drivers/Qt/LuaControl.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5b4900ff..9d2dd703 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -390,6 +390,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/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 f52b2caf..5502c9bb 100644 --- a/src/drivers/Qt/ConsoleWindow.cpp +++ b/src/drivers/Qt/ConsoleWindow.cpp @@ -21,6 +21,7 @@ #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" @@ -829,62 +830,18 @@ void consoleWin_t::takeScreenShot(void) void consoleWin_t::loadLua(void) { #ifdef _S9XLUA_H - int ret, useNativeFileDialogVal; - 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) ); - - // 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() ); - - 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 } diff --git a/src/drivers/Qt/LuaControl.cpp b/src/drivers/Qt/LuaControl.cpp new file mode 100644 index 00000000..277d1077 --- /dev/null +++ b/src/drivers/Qt/LuaControl.cpp @@ -0,0 +1,246 @@ +// 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::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(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(); + + g_config->setOption ("SDL.LastLoadLua", filename.toStdString().c_str() ); + + scriptPath->setText( filename.toStdString().c_str() ); + +#endif +} +//---------------------------------------------------- +void LuaControlDialog_t::startLuaScript(void) +{ +#ifdef _S9XLUA_H + 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") ); + } +} +//---------------------------------------------------- +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 ); + +} +//---------------------------------------------------- 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/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); From 4e9601a24195a0d8ee6e4e891c14bade1e8b732a Mon Sep 17 00:00:00 2001 From: Matthew Budd Date: Sun, 19 Jul 2020 21:33:20 -0400 Subject: [PATCH 4/5] Added logic for the lua output display console. --- src/drivers/Qt/LuaControl.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/drivers/Qt/LuaControl.cpp b/src/drivers/Qt/LuaControl.cpp index 277d1077..cf924242 100644 --- a/src/drivers/Qt/LuaControl.cpp +++ b/src/drivers/Qt/LuaControl.cpp @@ -20,6 +20,7 @@ static bool luaScriptRunning = false; +static std::string luaOutputText; static std::list winList; //---------------------------------------------------- LuaControlDialog_t::LuaControlDialog_t(QWidget *parent) @@ -141,7 +142,7 @@ void LuaControlDialog_t::openLuaScriptFile(void) //getDirFromFile( last.c_str(), dir ); - //dialog.setDirectory( tr(dir) ); + dialog.setDirectory( tr("/usr/share/fceux/luaScripts") ); // Check config option to use native file dialog or not g_config->getOption ("SDL.UseNativeFileDialog", &useNativeFileDialogVal); @@ -178,6 +179,7 @@ void LuaControlDialog_t::openLuaScriptFile(void) 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() ) ) { @@ -208,6 +210,7 @@ void LuaControlDialog_t::refreshState(void) stopButton->setEnabled( false ); startButton->setText( tr("Start") ); } + luaOutput->setText( luaOutputText.c_str() ); } //---------------------------------------------------- void updateLuaWindows( void ) @@ -224,7 +227,7 @@ void WinLuaOnStart(intptr_t hDlgAsInt) { luaScriptRunning = true; - printf("Lua Script Running: %i \n", luaScriptRunning ); + //printf("Lua Script Running: %i \n", luaScriptRunning ); updateLuaWindows(); } @@ -233,14 +236,17 @@ void WinLuaOnStop(intptr_t hDlgAsInt) { luaScriptRunning = false; - printf("Lua Script Running: %i \n", luaScriptRunning ); + //printf("Lua Script Running: %i \n", luaScriptRunning ); updateLuaWindows(); } //---------------------------------------------------- void PrintToWindowConsole(intptr_t hDlgAsInt, const char* str) { - printf("%s\n", str ); + //printf("%s\n", str ); + luaOutputText.append( str ); + + updateLuaWindows(); } //---------------------------------------------------- From 982ed7689dab86ed4bcb95b6668df0885d4f665e Mon Sep 17 00:00:00 2001 From: Matthew Budd Date: Mon, 20 Jul 2020 19:36:22 -0400 Subject: [PATCH 5/5] Added Lua window hooks to old sdl port that are now needed by core library. These functions do not do much on the old port and really only exist to resolve linker issues. --- src/drivers/sdl/sdl.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) 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