drag&drop and smaller changes

This commit is contained in:
2026-06-09 17:12:38 +02:00
parent c25e1d0617
commit b84537d589
4 changed files with 49 additions and 5 deletions
+42 -5
View File
@@ -5,30 +5,44 @@
#include <QCoreApplication> #include <QCoreApplication>
#include <QStatusBar> #include <QStatusBar>
#include <QTimer> #include <QTimer>
#include <QMimeData>
#include <resources/gamecontrollerdb.h> #include <resources/gamecontrollerdb.h>
#include <Options.hpp> #include <Options.hpp>
#include <Scheduler.hpp> #include <Scheduler.hpp>
KaizenGui::KaizenGui() noexcept : settings(QSettings::UserScope) { KaizenGui::KaizenGui() noexcept : QMainWindow(nullptr), settings(QSettings::UserScope) {
SDL_InitSubSystem(SDL_INIT_GAMEPAD); SDL_InitSubSystem(SDL_INIT_GAMEPAD);
hide(); hide();
restoreGeometry(settings.value("geometry").toByteArray());
restoreState(settings.value("windowState").toByteArray());
vulkanWidget = new RenderWidget(); vulkanWidget = new RenderWidget();
vulkanWidget->hide();
cpuTypeLabel = new QLabel("Interpreter"); cpuTypeLabel = new QLabel("Interpreter");
if (Options::GetCpuType() == 1) if (Options::GetCpuType() == 1)
cpuTypeLabel->setText("Cached Interpreter"); cpuTypeLabel->setText("Cached Interpreter");
idleSkipLabel = new QLabel("Idle skipping");
if (!Options::GetIdleSkip())
idleSkipLabel->hide();
fpsLabel = new QLabel("Not running"); fpsLabel = new QLabel("Not running");
statusBar()->addWidget(fpsLabel); statusBar()->addWidget(fpsLabel);
statusBar()->addWidget(cpuTypeLabel); statusBar()->addWidget(cpuTypeLabel);
statusBar()->addWidget(idleSkipLabel);
setWindowTitle("Kaizen " KAIZEN_VERSION_STR); setWindowTitle("Kaizen " KAIZEN_VERSION_STR);
setMinimumSize(640, 480); setMinimumSize(640, 480);
setCentralWidget(vulkanWidget); setCentralWidget(vulkanWidget);
setAcceptDrops(true);
statusBarTimer = new QTimer(); statusBarTimer = new QTimer();
statusBarTimer->setInterval(1000);
connect(statusBarTimer, &QTimer::timeout, this, [&] { connect(statusBarTimer, &QTimer::timeout, this, [&] {
pause->setText("Pause"); pause->setText("Pause");
@@ -60,6 +74,8 @@ KaizenGui::KaizenGui() noexcept : settings(QSettings::UserScope) {
}); });
auto exit = fileMenu->addAction("Exit"); auto exit = fileMenu->addAction("Exit");
connect(exit, &QAction::triggered, this, [&] { Scheduler::GetInstance().EnqueueRelative(0, STOP); });
connect(exit, &QAction::triggered, this, &QMainWindow::close);
auto emulationMenu = menuBar()->addMenu("Emulation"); auto emulationMenu = menuBar()->addMenu("Emulation");
auto settingsMenu = emulationMenu->addAction("Settings"); auto settingsMenu = emulationMenu->addAction("Settings");
settingsWindow = new SettingsWindow(); settingsWindow = new SettingsWindow();
@@ -71,6 +87,12 @@ KaizenGui::KaizenGui() noexcept : settings(QSettings::UserScope) {
cpuTypeLabel->setText("Interpreter"); cpuTypeLabel->setText("Interpreter");
}); });
connect(settingsWindow->cpu, &CPUSettings::idleSkipChanged, this, [&] {
idleSkipLabel->show();
if (!Options::GetIdleSkip())
idleSkipLabel->hide();
});
emulationMenu->addSeparator(); emulationMenu->addSeparator();
pause->setDisabled(true); pause->setDisabled(true);
@@ -88,7 +110,10 @@ KaizenGui::KaizenGui() noexcept : settings(QSettings::UserScope) {
stop->setDisabled(true); stop->setDisabled(true);
emulationMenu->addAction(stop); emulationMenu->addAction(stop);
connect(stop, &QAction::triggered, this, [&] { Scheduler::GetInstance().EnqueueRelative(0, STOP); }); connect(stop, &QAction::triggered, this, [&] {
Scheduler::GetInstance().EnqueueRelative(0, STOP);
vulkanWidget->show();
});
auto helpMenu = menuBar()->addMenu("Help"); auto helpMenu = menuBar()->addMenu("Help");
auto about = helpMenu->addAction("About"); auto about = helpMenu->addAction("About");
@@ -103,9 +128,6 @@ KaizenGui::KaizenGui() noexcept : settings(QSettings::UserScope) {
QMessageBox::about(this, "About", text.c_str()); QMessageBox::about(this, "About", text.c_str());
}); });
restoreGeometry(settings.value("geometry").toByteArray());
restoreState(settings.value("windowState").toByteArray());
show(); show();
emuThread = QThread::create([&] { emuThread = QThread::create([&] {
@@ -142,13 +164,28 @@ void KaizenGui::LoadROM(const std::string &path) noexcept {
pause->setEnabled(true); pause->setEnabled(true);
reset->setEnabled(true); reset->setEnabled(true);
stop->setEnabled(true); stop->setEnabled(true);
vulkanWidget->show();
setWindowTitle(("Kaizen " KAIZEN_VERSION_STR " - " + n64::Core::GetMem().rom.gameNameDB).c_str()); setWindowTitle(("Kaizen " KAIZEN_VERSION_STR " - " + n64::Core::GetMem().rom.gameNameDB).c_str());
} }
void KaizenGui::LoadTAS(const std::string &path) noexcept { n64::Core::GetInstance().LoadTAS(fs::path(path)); } void KaizenGui::LoadTAS(const std::string &path) noexcept { n64::Core::GetInstance().LoadTAS(fs::path(path)); }
void KaizenGui::closeEvent(QCloseEvent *event) { void KaizenGui::closeEvent(QCloseEvent *event) {
Scheduler::GetInstance().EnqueueRelative(0, STOP);
settings.setValue("geometry", saveGeometry()); settings.setValue("geometry", saveGeometry());
settings.setValue("windowState", saveState()); settings.setValue("windowState", saveState());
QMainWindow::closeEvent(event); QMainWindow::closeEvent(event);
} }
void KaizenGui::dropEvent(QDropEvent *event) {
if (event->mimeData()->hasUrls()) {
auto file = event->mimeData()->urls()[0].toLocalFile().toStdString();
LoadROM(file);
event->acceptProposedAction();
}
}
void KaizenGui::dragEnterEvent(QDragEnterEvent *event) {
if (event->mimeData()->hasUrls())
event->acceptProposedAction();
}
+5
View File
@@ -4,6 +4,8 @@
#include <SDL3/SDL_gamepad.h> #include <SDL3/SDL_gamepad.h>
#include <QMainWindow> #include <QMainWindow>
#include <QFileDialog> #include <QFileDialog>
#include <QDropEvent>
#include <QDragEnterEvent>
#include <Core.hpp> #include <Core.hpp>
class EmuThread; class EmuThread;
@@ -15,6 +17,8 @@ class KaizenGui final : QMainWindow {
~KaizenGui(); ~KaizenGui();
void closeEvent(QCloseEvent *) override; void closeEvent(QCloseEvent *) override;
void dropEvent(QDropEvent *) override;
void dragEnterEvent(QDragEnterEvent *) override;
bool fastForward = false; bool fastForward = false;
bool unlockFramerate = false; bool unlockFramerate = false;
@@ -28,6 +32,7 @@ class KaizenGui final : QMainWindow {
QTimer *statusBarTimer; QTimer *statusBarTimer;
QLabel *fpsLabel; QLabel *fpsLabel;
QLabel *cpuTypeLabel; QLabel *cpuTypeLabel;
QLabel *idleSkipLabel;
QAction *pause = new QAction("Pause"); QAction *pause = new QAction("Pause");
QAction *reset = new QAction("Reset"); QAction *reset = new QAction("Reset");
QAction *stop = new QAction("Stop"); QAction *stop = new QAction("Stop");
+1
View File
@@ -45,6 +45,7 @@ CPUSettings::CPUSettings() : settings(QSettings::UserScope) {
Options::SetIdleSkip(idleSkip->checkState()); Options::SetIdleSkip(idleSkip->checkState());
settings.setValue("cpu/idle_skip", idleSkip->checkState()); settings.setValue("cpu/idle_skip", idleSkip->checkState());
settings.sync(); settings.sync();
emit idleSkipChanged();
}); });
h->addWidget(idleSkip); h->addWidget(idleSkip);
+1
View File
@@ -18,4 +18,5 @@ class CPUSettings final : public QWidget {
explicit CPUSettings(); explicit CPUSettings();
signals: signals:
void cpuTypeChanged(); void cpuTypeChanged();
void idleSkipChanged();
}; };