From 0bd53a34ef975b12563ccfa6247def84789d098b Mon Sep 17 00:00:00 2001 From: Arisotura Date: Tue, 11 Aug 2020 17:38:29 +0200 Subject: [PATCH] lay base for the actual dialog also make EmuSettingsDialog properly modal --- src/frontend/qt_sdl/CMakeLists.txt | 1 + src/frontend/qt_sdl/CheatsDialog.cpp | 61 +++++++++++++++++++++++ src/frontend/qt_sdl/CheatsDialog.h | 65 +++++++++++++++++++++++++ src/frontend/qt_sdl/EmuSettingsDialog.h | 2 +- src/frontend/qt_sdl/main.cpp | 27 ++++++++++ src/frontend/qt_sdl/main.h | 5 ++ 6 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 src/frontend/qt_sdl/CheatsDialog.cpp create mode 100644 src/frontend/qt_sdl/CheatsDialog.h diff --git a/src/frontend/qt_sdl/CMakeLists.txt b/src/frontend/qt_sdl/CMakeLists.txt index 05c42d1c..9a0a025c 100644 --- a/src/frontend/qt_sdl/CMakeLists.txt +++ b/src/frontend/qt_sdl/CMakeLists.txt @@ -3,6 +3,7 @@ project(qt_sdl) SET(SOURCES_QT_SDL main.cpp main_shaders.h + CheatsDialog.cpp EmuSettingsDialog.cpp InputConfigDialog.cpp VideoSettingsDialog.cpp diff --git a/src/frontend/qt_sdl/CheatsDialog.cpp b/src/frontend/qt_sdl/CheatsDialog.cpp new file mode 100644 index 00000000..2654e758 --- /dev/null +++ b/src/frontend/qt_sdl/CheatsDialog.cpp @@ -0,0 +1,61 @@ +/* + Copyright 2016-2020 Arisotura + + This file is part of melonDS. + + melonDS is free software: you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + melonDS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with melonDS. If not, see http://www.gnu.org/licenses/. +*/ + +#include +#include + +#include "types.h" +#include "Platform.h" +#include "Config.h" +#include "PlatformConfig.h" + +#include "CheatsDialog.h" +#include "ui_CheatsDialog.h" + + +CheatsDialog* CheatsDialog::currentDlg = nullptr; + +extern char* EmuDirectory; + + +CheatsDialog::CheatsDialog(QWidget* parent) : QDialog(parent), ui(new Ui::CheatsDialog) +{ + ui->setupUi(this); + setAttribute(Qt::WA_DeleteOnClose); + + // setup UI here +} + +CheatsDialog::~CheatsDialog() +{ + delete ui; +} + +void CheatsDialog::on_CheatsDialog_accepted() +{ + // save shit here + + closeDlg(); +} + +void CheatsDialog::on_CheatsDialog_rejected() +{ + // don't save shit here + + closeDlg(); +} diff --git a/src/frontend/qt_sdl/CheatsDialog.h b/src/frontend/qt_sdl/CheatsDialog.h new file mode 100644 index 00000000..99582c80 --- /dev/null +++ b/src/frontend/qt_sdl/CheatsDialog.h @@ -0,0 +1,65 @@ +/* + Copyright 2016-2020 Arisotura + + This file is part of melonDS. + + melonDS is free software: you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation, either version 3 of the License, or (at your option) + any later version. + + melonDS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with melonDS. If not, see http://www.gnu.org/licenses/. +*/ + +#ifndef CHEATSDIALOG_H +#define CHEATSDIALOG_H + +#include + +namespace Ui { class CheatsDialog; } +class CheatsDialog; + +class CheatsDialog : public QDialog +{ + Q_OBJECT + +public: + explicit CheatsDialog(QWidget* parent); + ~CheatsDialog(); + + static CheatsDialog* currentDlg; + static CheatsDialog* openDlg(QWidget* parent) + { + if (currentDlg) + { + currentDlg->activateWindow(); + return currentDlg; + } + + currentDlg = new CheatsDialog(parent); + currentDlg->open(); + return currentDlg; + } + static void closeDlg() + { + currentDlg = nullptr; + } + +private slots: + void on_CheatsDialog_accepted(); + void on_CheatsDialog_rejected(); + + // + +private: + Ui::CheatsDialog* ui; + + // +}; + +#endif // CHEATSDIALOG_H diff --git a/src/frontend/qt_sdl/EmuSettingsDialog.h b/src/frontend/qt_sdl/EmuSettingsDialog.h index c24a147d..1a16ebc0 100644 --- a/src/frontend/qt_sdl/EmuSettingsDialog.h +++ b/src/frontend/qt_sdl/EmuSettingsDialog.h @@ -42,7 +42,7 @@ public: } currentDlg = new EmuSettingsDialog(parent); - currentDlg->show(); + currentDlg->open(); return currentDlg; } static void closeDlg() diff --git a/src/frontend/qt_sdl/main.cpp b/src/frontend/qt_sdl/main.cpp index e7f35c20..903e654b 100644 --- a/src/frontend/qt_sdl/main.cpp +++ b/src/frontend/qt_sdl/main.cpp @@ -34,6 +34,7 @@ #include "main.h" #include "Input.h" +#include "CheatsDialog.h" #include "EmuSettingsDialog.h" #include "InputConfigDialog.h" #include "VideoSettingsDialog.h" @@ -1062,6 +1063,14 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent) actStop = menu->addAction("Stop"); connect(actStop, &QAction::triggered, this, &MainWindow::onStop); + + menu->addSeparator(); + + actEnableCheats = menu->addAction("Enable cheats"); + connect(actEnableCheats, &QAction::triggered, this, &MainWindow::onEnableCheats); + + actSetupCheats = menu->addAction("Setup cheat codes"); + connect(actSetupCheats, &QAction::triggered, this, &MainWindow::onSetupCheats); } { QMenu* menu = menubar->addMenu("Config"); @@ -1651,6 +1660,24 @@ void MainWindow::onStop() NDS::Stop(); } +void MainWindow::onEnableCheats(bool checked) +{ + // +} + +void MainWindow::onSetupCheats() +{ + emuThread->emuPause(); + + CheatsDialog* dlg = CheatsDialog::openDlg(this); + connect(dlg, &CheatsDialog::finished, this, &MainWindow::onCheatsDialogFinished); +} + +void MainWindow::onCheatsDialogFinished(int res) +{ + emuThread->emuUnpause(); +} + void MainWindow::onOpenEmuSettings() { diff --git a/src/frontend/qt_sdl/main.h b/src/frontend/qt_sdl/main.h index 7f339732..cad30d6b 100644 --- a/src/frontend/qt_sdl/main.h +++ b/src/frontend/qt_sdl/main.h @@ -198,6 +198,9 @@ private slots: void onPause(bool checked); void onReset(); void onStop(); + void onEnableCheats(bool checked); + void onSetupCheats(); + void onCheatsDialogFinished(int res); void onOpenEmuSettings(); void onEmuSettingsDialogFinished(int res); @@ -245,6 +248,8 @@ public: QAction* actPause; QAction* actReset; QAction* actStop; + QAction* actEnableCheats; + QAction* actSetupCheats; QAction* actEmuSettings; QAction* actInputConfig;