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 <QStatusBar>
#include <QTimer>
#include <QMimeData>
#include <resources/gamecontrollerdb.h>
#include <Options.hpp>
#include <Scheduler.hpp>
KaizenGui::KaizenGui() noexcept : settings(QSettings::UserScope) {
KaizenGui::KaizenGui() noexcept : QMainWindow(nullptr), settings(QSettings::UserScope) {
SDL_InitSubSystem(SDL_INIT_GAMEPAD);
hide();
restoreGeometry(settings.value("geometry").toByteArray());
restoreState(settings.value("windowState").toByteArray());
vulkanWidget = new RenderWidget();
vulkanWidget->hide();
cpuTypeLabel = new QLabel("Interpreter");
if (Options::GetCpuType() == 1)
cpuTypeLabel->setText("Cached Interpreter");
idleSkipLabel = new QLabel("Idle skipping");
if (!Options::GetIdleSkip())
idleSkipLabel->hide();
fpsLabel = new QLabel("Not running");
statusBar()->addWidget(fpsLabel);
statusBar()->addWidget(cpuTypeLabel);
statusBar()->addWidget(idleSkipLabel);
setWindowTitle("Kaizen " KAIZEN_VERSION_STR);
setMinimumSize(640, 480);
setCentralWidget(vulkanWidget);
setAcceptDrops(true);
statusBarTimer = new QTimer();
statusBarTimer->setInterval(1000);
connect(statusBarTimer, &QTimer::timeout, this, [&] {
pause->setText("Pause");
@@ -60,6 +74,8 @@ KaizenGui::KaizenGui() noexcept : settings(QSettings::UserScope) {
});
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 settingsMenu = emulationMenu->addAction("Settings");
settingsWindow = new SettingsWindow();
@@ -71,6 +87,12 @@ KaizenGui::KaizenGui() noexcept : settings(QSettings::UserScope) {
cpuTypeLabel->setText("Interpreter");
});
connect(settingsWindow->cpu, &CPUSettings::idleSkipChanged, this, [&] {
idleSkipLabel->show();
if (!Options::GetIdleSkip())
idleSkipLabel->hide();
});
emulationMenu->addSeparator();
pause->setDisabled(true);
@@ -88,7 +110,10 @@ KaizenGui::KaizenGui() noexcept : settings(QSettings::UserScope) {
stop->setDisabled(true);
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 about = helpMenu->addAction("About");
@@ -103,9 +128,6 @@ KaizenGui::KaizenGui() noexcept : settings(QSettings::UserScope) {
QMessageBox::about(this, "About", text.c_str());
});
restoreGeometry(settings.value("geometry").toByteArray());
restoreState(settings.value("windowState").toByteArray());
show();
emuThread = QThread::create([&] {
@@ -142,13 +164,28 @@ void KaizenGui::LoadROM(const std::string &path) noexcept {
pause->setEnabled(true);
reset->setEnabled(true);
stop->setEnabled(true);
vulkanWidget->show();
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::closeEvent(QCloseEvent *event) {
Scheduler::GetInstance().EnqueueRelative(0, STOP);
settings.setValue("geometry", saveGeometry());
settings.setValue("windowState", saveState());
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 <QMainWindow>
#include <QFileDialog>
#include <QDropEvent>
#include <QDragEnterEvent>
#include <Core.hpp>
class EmuThread;
@@ -15,6 +17,8 @@ class KaizenGui final : QMainWindow {
~KaizenGui();
void closeEvent(QCloseEvent *) override;
void dropEvent(QDropEvent *) override;
void dragEnterEvent(QDragEnterEvent *) override;
bool fastForward = false;
bool unlockFramerate = false;
@@ -28,6 +32,7 @@ class KaizenGui final : QMainWindow {
QTimer *statusBarTimer;
QLabel *fpsLabel;
QLabel *cpuTypeLabel;
QLabel *idleSkipLabel;
QAction *pause = new QAction("Pause");
QAction *reset = new QAction("Reset");
QAction *stop = new QAction("Stop");
+1
View File
@@ -45,6 +45,7 @@ CPUSettings::CPUSettings() : settings(QSettings::UserScope) {
Options::SetIdleSkip(idleSkip->checkState());
settings.setValue("cpu/idle_skip", idleSkip->checkState());
settings.sync();
emit idleSkipChanged();
});
h->addWidget(idleSkip);
+1
View File
@@ -18,4 +18,5 @@ class CPUSettings final : public QWidget {
explicit CPUSettings();
signals:
void cpuTypeChanged();
void idleSkipChanged();
};