aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/qt_sdl
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/qt_sdl')
-rw-r--r--src/frontend/qt_sdl/EmuSettingsDialog.cpp70
-rw-r--r--src/frontend/qt_sdl/EmuSettingsDialog.h26
-rw-r--r--src/frontend/qt_sdl/main.cpp4
3 files changed, 97 insertions, 3 deletions
diff --git a/src/frontend/qt_sdl/EmuSettingsDialog.cpp b/src/frontend/qt_sdl/EmuSettingsDialog.cpp
index c64f192..34cafb5 100644
--- a/src/frontend/qt_sdl/EmuSettingsDialog.cpp
+++ b/src/frontend/qt_sdl/EmuSettingsDialog.cpp
@@ -16,16 +16,86 @@
with melonDS. If not, see http://www.gnu.org/licenses/.
*/
+#include <QFileDialog>
+
+#include "types.h"
+#include "Config.h"
+#include "PlatformConfig.h"
+
#include "EmuSettingsDialog.h"
#include "ui_EmuSettingsDialog.h"
+EmuSettingsDialog* EmuSettingsDialog::currentDlg = nullptr;
+
+extern char* EmuDirectory;
+
+
EmuSettingsDialog::EmuSettingsDialog(QWidget* parent) : QDialog(parent), ui(new Ui::EmuSettingsDialog)
{
ui->setupUi(this);
+ setAttribute(Qt::WA_DeleteOnClose);
+
+ ui->txtBIOS9Path->setText(Config::BIOS9Path);
+ ui->txtBIOS7Path->setText(Config::BIOS7Path);
+ ui->txtFirmwarePath->setText(Config::FirmwarePath);
+ ui->chkDirectBoot->setChecked(Config::DirectBoot != 0);
}
EmuSettingsDialog::~EmuSettingsDialog()
{
delete ui;
}
+
+void EmuSettingsDialog::on_EmuSettingsDialog_accepted()
+{
+ strncpy(Config::BIOS9Path, ui->txtBIOS9Path->text().toStdString().c_str(), 1023); Config::BIOS9Path[1023] = '\0';
+ strncpy(Config::BIOS7Path, ui->txtBIOS7Path->text().toStdString().c_str(), 1023); Config::BIOS7Path[1023] = '\0';
+ strncpy(Config::FirmwarePath, ui->txtFirmwarePath->text().toStdString().c_str(), 1023); Config::FirmwarePath[1023] = '\0';
+ Config::DirectBoot = ui->chkDirectBoot->isChecked() ? 1:0;
+
+ closeDlg();
+}
+
+void EmuSettingsDialog::on_EmuSettingsDialog_rejected()
+{
+ closeDlg();
+}
+
+void EmuSettingsDialog::on_btnBIOS9Browse_clicked()
+{
+ QString file = QFileDialog::getOpenFileName(this,
+ "Select DS-mode ARM9 BIOS...",
+ EmuDirectory,
+ "BIOS files (*.bin *.rom);;Any file (*.*)");
+
+ if (file.isEmpty()) return;
+
+ ui->txtBIOS9Path->setText(file);
+}
+
+void EmuSettingsDialog::on_btnBIOS7Browse_clicked()
+{
+ QString file = QFileDialog::getOpenFileName(this,
+ "Select DS-mode ARM7 BIOS...",
+ EmuDirectory,
+ "BIOS files (*.bin *.rom);;Any file (*.*)");
+
+ if (file.isEmpty()) return;
+
+ ui->txtBIOS7Path->setText(file);
+}
+
+void EmuSettingsDialog::on_btnFirmwareBrowse_clicked()
+{
+ QString file = QFileDialog::getOpenFileName(this,
+ "Select DS-mode firmware...",
+ EmuDirectory,
+ "Firmware files (*.bin *.rom);;Any file (*.*)");
+
+ if (file.isEmpty()) return;
+
+ // TODO: check for shitty hacked firmware here?
+
+ ui->txtFirmwarePath->setText(file);
+}
diff --git a/src/frontend/qt_sdl/EmuSettingsDialog.h b/src/frontend/qt_sdl/EmuSettingsDialog.h
index eb21aaa..471e0fb 100644
--- a/src/frontend/qt_sdl/EmuSettingsDialog.h
+++ b/src/frontend/qt_sdl/EmuSettingsDialog.h
@@ -22,6 +22,7 @@
#include <QDialog>
namespace Ui { class EmuSettingsDialog; }
+class EmuSettingsDialog;
class EmuSettingsDialog : public QDialog
{
@@ -31,6 +32,31 @@ public:
explicit EmuSettingsDialog(QWidget* parent);
~EmuSettingsDialog();
+ static EmuSettingsDialog* currentDlg;
+ static void openDlg(QWidget* parent)
+ {
+ if (currentDlg)
+ {
+ currentDlg->activateWindow();
+ return;
+ }
+
+ currentDlg = new EmuSettingsDialog(parent);
+ currentDlg->show();
+ }
+ static void closeDlg()
+ {
+ currentDlg = nullptr;
+ }
+
+private slots:
+ void on_EmuSettingsDialog_accepted();
+ void on_EmuSettingsDialog_rejected();
+
+ void on_btnBIOS9Browse_clicked();
+ void on_btnBIOS7Browse_clicked();
+ void on_btnFirmwareBrowse_clicked();
+
private:
Ui::EmuSettingsDialog* ui;
};
diff --git a/src/frontend/qt_sdl/main.cpp b/src/frontend/qt_sdl/main.cpp
index 3986876..8b97320 100644
--- a/src/frontend/qt_sdl/main.cpp
+++ b/src/frontend/qt_sdl/main.cpp
@@ -820,9 +820,7 @@ void MainWindow::onEmuUnpause()
void MainWindow::onOpenEmuSettings()
{
- // TODO keep track of this pointer!!
- EmuSettingsDialog* dlg = new EmuSettingsDialog(this);
- dlg->show();
+ EmuSettingsDialog::openDlg(this);
}