drag&drop and smaller changes
This commit is contained in:
@@ -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();
|
||||||
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -18,4 +18,5 @@ class CPUSettings final : public QWidget {
|
|||||||
explicit CPUSettings();
|
explicit CPUSettings();
|
||||||
signals:
|
signals:
|
||||||
void cpuTypeChanged();
|
void cpuTypeChanged();
|
||||||
|
void idleSkipChanged();
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user