game list in progress

This commit is contained in:
2026-06-10 21:27:23 +02:00
parent d26417b83f
commit 2b59e5f461
7 changed files with 195 additions and 66 deletions
+69 -8
View File
@@ -6,6 +6,7 @@
#include <QStatusBar>
#include <QTimer>
#include <QMimeData>
#include <QHeaderView>
#include <resources/gamecontrollerdb.h>
#include <Options.hpp>
#include <Scheduler.hpp>
@@ -15,6 +16,42 @@ KaizenGui::KaizenGui() noexcept : QMainWindow(nullptr), settings(QSettings::User
hide();
auto romsNotFoundLabel = new QLabel(R"(Kaizen could not find any ROMs. Set the path in "Settings -> General")");
romsList->verticalHeader()->hide();
romsList->setSelectionBehavior(QAbstractItemView::SelectRows);
romsList->setEditTriggers(QAbstractItemView::NoEditTriggers);
romsList->setSortingEnabled(true);
romsList->setColumnCount(3);
romsList->setHorizontalHeaderItem(0, romName);
romsList->setHorizontalHeaderItem(1, romLastPlayed);
romsList->setHorizontalHeaderItem(2, romTimePlayed);
auto romsPath = Options::GetRomsPath();
if (!romsPath.empty()) {
int i = 0;
centralWidget->addWidget(romsList);
for (const auto &file : fs::recursive_directory_iterator{romsPath}) {
if (file.is_regular_file() &&
std::ranges::any_of(std::array{".n64", ".z64", ".v64"},
[&](const std::string &ext) { return file.path().extension() == ext; })) {
romsList->insertRow(i);
romsList->setItem(i, 0, new QTableWidgetItem(file.path().stem().string().c_str()));
romsList->setItem(i, 1, new QTableWidgetItem("Never"));
romsList->setItem(i, 2, new QTableWidgetItem("0h 0m 0s"));
i++;
}
}
} else {
centralWidget->addWidget(romsNotFoundLabel);
}
connect(romsList, &QTableWidget::cellDoubleClicked, this, [&](int row, int) {
auto fileToLoad = fs::path(romsPath) / romsList->item(row, 0)->text().toStdString();
std::println("{}", fileToLoad.string());
LoadROM(fileToLoad.string());
});
installEventFilter(this);
restoreGeometry(settings.value("geometry").toByteArray());
@@ -23,6 +60,8 @@ KaizenGui::KaizenGui() noexcept : QMainWindow(nullptr), settings(QSettings::User
vulkanWidget = new RenderWidget();
vulkanWidget->hide();
centralWidget->addWidget(vulkanWidget);
cpuTypeLabel = new QLabel("Interpreter");
if (Options::GetCpuType() == n64::CachedInterpreter)
cpuTypeLabel->setText("Cached Interpreter");
@@ -39,7 +78,7 @@ KaizenGui::KaizenGui() noexcept : QMainWindow(nullptr), settings(QSettings::User
setWindowTitle("Kaizen " KAIZEN_VERSION_STR);
setMinimumSize(640, 480);
setCentralWidget(vulkanWidget);
setCentralWidget(centralWidget);
setAcceptDrops(true);
@@ -69,9 +108,10 @@ KaizenGui::KaizenGui() noexcept : QMainWindow(nullptr), settings(QSettings::User
auto open = fileMenu->addAction("Open");
open->setShortcut(QKeyCombination(Qt::CTRL, Qt::Key_O));
connect(open, &QAction::triggered, this, [&] {
auto fileToLoad = QFileDialog::getOpenFileName(this, "Select a Nintendo 64 ROM", QDir::currentPath(),
"N64 ROM (*.z64 *.n64 *.v64)")
.toStdString();
auto originPath = romsPath.empty() ? QDir::currentPath() : romsPath.c_str();
auto fileToLoad =
QFileDialog::getOpenFileName(this, "Select a Nintendo 64 ROM", originPath, "N64 ROM (*.z64 *.n64 *.v64)")
.toStdString();
if (!fileToLoad.empty())
LoadROM(fileToLoad);
});
@@ -83,6 +123,26 @@ KaizenGui::KaizenGui() noexcept : QMainWindow(nullptr), settings(QSettings::User
auto settingsMenu = emulationMenu->addAction("Settings");
settingsWindow = new SettingsWindow();
connect(settingsMenu, &QAction::triggered, settingsWindow, &SettingsWindow::show);
connect(settingsWindow->general, &GeneralSettings::romFolderSelected, this, [&] {
romsPath = Options::GetRomsPath();
if (!romsPath.empty()) {
int i = 0;
centralWidget->addWidget(romsList);
for (const auto &file : fs::recursive_directory_iterator{romsPath}) {
if (file.is_regular_file() &&
std::ranges::any_of(std::array{".n64", ".z64", ".v64"},
[&](const std::string &ext) { return file.path().extension() == ext; })) {
romsList->insertRow(i);
romsList->setItem(i, 0, new QTableWidgetItem(file.path().stem().string().c_str()));
romsList->setItem(i, 1, new QTableWidgetItem("Never"));
romsList->setItem(i, 2, new QTableWidgetItem("0h 0m 0s"));
i++;
}
}
} else {
centralWidget->addWidget(romsNotFoundLabel);
}
});
connect(settingsWindow->cpu, &CPUSettings::cpuTypeChanged, this, [&] {
core.cpuType = Options::GetCpuType();
@@ -102,8 +162,7 @@ KaizenGui::KaizenGui() noexcept : QMainWindow(nullptr), settings(QSettings::User
auto unlockFramerate = emulationMenu->addAction("Unlock framerate");
unlockFramerate->setCheckable(true);
connect(unlockFramerate, &QAction::triggered, this,
[&](bool checked) { core.parallel.SetFramerateUnlocked(checked); });
connect(unlockFramerate, &QAction::triggered, this, [&](bool checked) { unlockFrameratePressed = checked; });
pause->setDisabled(true);
pause->setShortcut(QKeyCombination(Qt::CTRL, Qt::Key_P));
@@ -126,7 +185,7 @@ KaizenGui::KaizenGui() noexcept : QMainWindow(nullptr), settings(QSettings::User
emulationMenu->addAction(stop);
connect(stop, &QAction::triggered, this, [&] {
Scheduler::GetInstance().EnqueueRelative(0, STOP);
vulkanWidget->show();
centralWidget->setCurrentWidget(romsList);
});
auto helpMenu = menuBar()->addMenu("Help");
@@ -154,6 +213,8 @@ KaizenGui::KaizenGui() noexcept : QMainWindow(nullptr), settings(QSettings::User
updateKeys();
updateAxis();
core.parallel.SetFramerateUnlocked(unlockFrameratePressed);
auto timeStart = SDL_GetTicks();
core.Run();
core.parallel.UpdateScreen();
@@ -208,7 +269,7 @@ void KaizenGui::LoadROM(const std::string &path) noexcept {
pause->setEnabled(true);
reset->setEnabled(true);
stop->setEnabled(true);
vulkanWidget->show();
centralWidget->setCurrentWidget(vulkanWidget);
setWindowTitle(("Kaizen " KAIZEN_VERSION_STR " - " + core.mem->rom.gameNameDB).c_str());
}