game list in progress
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user