aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/qt_sdl
diff options
context:
space:
mode:
authorArisotura <thetotalworm@gmail.com>2020-12-30 14:32:22 +0100
committerGitHub <noreply@github.com>2020-12-30 14:32:22 +0100
commit162a0f4fb6dafa51939b9f3dcfb030ac7c7bb73f (patch)
treef5a6a827f74285876424d5f191cde219fc53027a /src/frontend/qt_sdl
parentd2c04c5c511cca3daeed292a397a5ae8ae2aa6a7 (diff)
parent6adf1731c1d0463302bf2886df68dba2d056b73f (diff)
Merge pull request #918 from abcdjdj/open-recent
Add option to open recent files
Diffstat (limited to 'src/frontend/qt_sdl')
-rw-r--r--src/frontend/qt_sdl/PlatformConfig.cpp13
-rw-r--r--src/frontend/qt_sdl/PlatformConfig.h2
-rw-r--r--src/frontend/qt_sdl/main.cpp79
-rw-r--r--src/frontend/qt_sdl/main.h7
4 files changed, 88 insertions, 13 deletions
diff --git a/src/frontend/qt_sdl/PlatformConfig.cpp b/src/frontend/qt_sdl/PlatformConfig.cpp
index 9861662..46f8717 100644
--- a/src/frontend/qt_sdl/PlatformConfig.cpp
+++ b/src/frontend/qt_sdl/PlatformConfig.cpp
@@ -72,6 +72,8 @@ char MicWavPath[1024];
char LastROMFolder[1024];
+char RecentROMList[10][1024];
+
int EnableCheats;
bool EnableJIT;
@@ -166,6 +168,17 @@ ConfigEntry PlatformConfigFile[] =
{"LastROMFolder", 1, LastROMFolder, 0, "", 1023},
+ {"RecentROM_0", 1, RecentROMList[0], 0, "", 1023},
+ {"RecentROM_1", 1, RecentROMList[1], 0, "", 1023},
+ {"RecentROM_2", 1, RecentROMList[2], 0, "", 1023},
+ {"RecentROM_3", 1, RecentROMList[3], 0, "", 1023},
+ {"RecentROM_4", 1, RecentROMList[4], 0, "", 1023},
+ {"RecentROM_5", 1, RecentROMList[5], 0, "", 1023},
+ {"RecentROM_6", 1, RecentROMList[6], 0, "", 1023},
+ {"RecentROM_7", 1, RecentROMList[7], 0, "", 1023},
+ {"RecentROM_8", 1, RecentROMList[8], 0, "", 1023},
+ {"RecentROM_9", 1, RecentROMList[9], 0, "", 1023},
+
{"EnableCheats", 0, &EnableCheats, 0, NULL, 0},
{"", -1, NULL, 0, NULL, 0}
diff --git a/src/frontend/qt_sdl/PlatformConfig.h b/src/frontend/qt_sdl/PlatformConfig.h
index ca03d80..2d73dea 100644
--- a/src/frontend/qt_sdl/PlatformConfig.h
+++ b/src/frontend/qt_sdl/PlatformConfig.h
@@ -86,6 +86,8 @@ extern char MicWavPath[1024];
extern char LastROMFolder[1024];
+extern char RecentROMList[10][1024];
+
extern int EnableCheats;
}
diff --git a/src/frontend/qt_sdl/main.cpp b/src/frontend/qt_sdl/main.cpp
index e5b1ba1..8e44bf0 100644
--- a/src/frontend/qt_sdl/main.cpp
+++ b/src/frontend/qt_sdl/main.cpp
@@ -1013,6 +1013,14 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
actOpenROM = menu->addAction("Open ROM...");
connect(actOpenROM, &QAction::triggered, this, &MainWindow::onOpenFile);
+ recentMenu = menu->addMenu("Open Recent");
+ for(int i = 0; i < 10; ++i)
+ {
+ if(strlen(Config::RecentROMList[i]) > 0)
+ recentFileList.push_back(Config::RecentROMList[i]);
+ }
+ updateRecentFilesMenu();
+
//actBootFirmware = menu->addAction("Launch DS menu");
actBootFirmware = menu->addAction("Boot firmware");
connect(actBootFirmware, &QAction::triggered, this, &MainWindow::onBootFirmware);
@@ -1441,20 +1449,11 @@ QString MainWindow::loadErrorStr(int error)
}
}
-
-void MainWindow::onOpenFile()
+void MainWindow::loadROM(QString filename)
{
- emuThread->emuPause();
-
- QString filename = QFileDialog::getOpenFileName(this,
- "Open ROM",
- Config::LastROMFolder,
- "DS ROMs (*.nds *.dsi *.srl);;GBA ROMs (*.gba);;Any file (*.*)");
- if (filename.isEmpty())
- {
- emuThread->emuUnpause();
- return;
- }
+ recentFileList.removeAll(filename);
+ recentFileList.prepend(filename);
+ updateRecentFilesMenu();
// TODO: validate the input file!!
// * check that it is a proper ROM
@@ -1501,6 +1500,60 @@ void MainWindow::onOpenFile()
}
}
+void MainWindow::onOpenFile()
+{
+ emuThread->emuPause();
+
+ QString filename = QFileDialog::getOpenFileName(this,
+ "Open ROM",
+ Config::LastROMFolder,
+ "DS ROMs (*.nds *.dsi *.srl);;GBA ROMs (*.gba);;Any file (*.*)");
+ if (filename.isEmpty())
+ {
+ emuThread->emuUnpause();
+ return;
+ }
+
+ loadROM(filename);
+}
+
+void MainWindow::onClearRecentFiles()
+{
+ recentFileList.clear();
+ memset(Config::RecentROMList, 0, 10 * 1024);
+ updateRecentFilesMenu();
+}
+
+void MainWindow::updateRecentFilesMenu()
+{
+ recentMenu->clear();
+
+ for(int i = 0; i < recentFileList.size(); ++i)
+ {
+ QAction *actRecentFile_i = recentMenu->addAction(QString("%1. %2").arg(i+1).arg(recentFileList.at(i)));
+ actRecentFile_i->setData(recentFileList.at(i));
+ connect(actRecentFile_i, &QAction::triggered, this, &MainWindow::onClickRecentFile);
+
+ if(i < 10)
+ strncpy(Config::RecentROMList[i], recentFileList.at(i).toStdString().c_str(), 1024);
+ }
+
+ QAction *actClearRecentList = recentMenu->addAction("Clear");
+ connect(actClearRecentList, &QAction::triggered, this, &MainWindow::onClearRecentFiles);
+
+ if(recentFileList.empty())
+ actClearRecentList->setEnabled(false);
+
+ Config::Save();
+}
+
+void MainWindow::onClickRecentFile()
+{
+ emuThread->emuPause();
+ QAction *act = (QAction *)sender();
+ loadROM(act->data().toString());
+}
+
void MainWindow::onBootFirmware()
{
// TODO: check the whole GBA cart shito
diff --git a/src/frontend/qt_sdl/main.h b/src/frontend/qt_sdl/main.h
index 978df9e..d31e706 100644
--- a/src/frontend/qt_sdl/main.h
+++ b/src/frontend/qt_sdl/main.h
@@ -191,6 +191,8 @@ signals:
private slots:
void onOpenFile();
+ void onClickRecentFile();
+ void onClearRecentFiles();
void onBootFirmware();
void onSaveState();
void onLoadState();
@@ -236,6 +238,11 @@ private slots:
void onFullscreenToggled();
private:
+ QList<QString> recentFileList;
+ QMenu *recentMenu;
+ void updateRecentFilesMenu();
+ void loadROM(QString filename);
+
void createScreenPanel();
QString loadErrorStr(int error);