aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/qt_sdl/Window.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/qt_sdl/Window.h')
-rw-r--r--src/frontend/qt_sdl/Window.h239
1 files changed, 239 insertions, 0 deletions
diff --git a/src/frontend/qt_sdl/Window.h b/src/frontend/qt_sdl/Window.h
new file mode 100644
index 0000000..a84bc1d
--- /dev/null
+++ b/src/frontend/qt_sdl/Window.h
@@ -0,0 +1,239 @@
+/*
+ Copyright 2016-2023 melonDS team
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef WINDOW_H
+#define WINDOW_H
+
+#include "glad/glad.h"
+#include "FrontendUtil.h"
+#include "duckstation/gl/context.h"
+
+#include <QWidget>
+#include <QWindow>
+#include <QMainWindow>
+#include <QImage>
+#include <QActionGroup>
+#include <QTimer>
+#include <QMutex>
+#include <QScreen>
+#include <QCloseEvent>
+
+#include "Screen.h"
+
+
+class EmuThread;
+
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ explicit MainWindow(QWidget* parent = nullptr);
+ ~MainWindow();
+
+ bool hasOGL;
+ GL::Context* getOGLContext();
+
+ bool preloadROMs(QStringList file, QStringList gbafile, bool boot);
+ QStringList splitArchivePath(const QString& filename, bool useMemberSyntax);
+
+ void onAppStateChanged(Qt::ApplicationState state);
+
+protected:
+ void resizeEvent(QResizeEvent* event) override;
+ void changeEvent(QEvent* event) override;
+
+ void keyPressEvent(QKeyEvent* event) override;
+ void keyReleaseEvent(QKeyEvent* event) override;
+
+ void dragEnterEvent(QDragEnterEvent* event) override;
+ void dropEvent(QDropEvent* event) override;
+
+ void focusInEvent(QFocusEvent* event) override;
+ void focusOutEvent(QFocusEvent* event) override;
+
+signals:
+ void screenLayoutChange();
+
+private slots:
+ void onOpenFile();
+ void onClickRecentFile();
+ void onClearRecentFiles();
+ void onBootFirmware();
+ void onInsertCart();
+ void onEjectCart();
+ void onInsertGBACart();
+ void onInsertGBAAddon();
+ void onEjectGBACart();
+ void onSaveState();
+ void onLoadState();
+ void onUndoStateLoad();
+ void onImportSavefile();
+ void onQuit();
+
+ void onPause(bool checked);
+ void onReset();
+ void onStop();
+ void onFrameStep();
+ void onOpenPowerManagement();
+ void onOpenDateTime();
+ void onEnableCheats(bool checked);
+ void onSetupCheats();
+ void onCheatsDialogFinished(int res);
+ void onROMInfo();
+ void onRAMInfo();
+ void onOpenTitleManager();
+ void onMPNewInstance();
+
+ void onOpenEmuSettings();
+ void onEmuSettingsDialogFinished(int res);
+ void onOpenInputConfig();
+ void onInputConfigFinished(int res);
+ void onOpenVideoSettings();
+ void onOpenCameraSettings();
+ void onCameraSettingsFinished(int res);
+ void onOpenAudioSettings();
+ void onUpdateAudioSettings();
+ void onAudioSettingsFinished(int res);
+ void onOpenMPSettings();
+ void onMPSettingsFinished(int res);
+ void onOpenWifiSettings();
+ void onWifiSettingsFinished(int res);
+ void onOpenFirmwareSettings();
+ void onFirmwareSettingsFinished(int res);
+ void onOpenPathSettings();
+ void onPathSettingsFinished(int res);
+ void onOpenInterfaceSettings();
+ void onInterfaceSettingsFinished(int res);
+ void onUpdateMouseTimer();
+ void onChangeSavestateSRAMReloc(bool checked);
+ void onChangeScreenSize();
+ void onChangeScreenRotation(QAction* act);
+ void onChangeScreenGap(QAction* act);
+ void onChangeScreenLayout(QAction* act);
+ void onChangeScreenSwap(bool checked);
+ void onChangeScreenSizing(QAction* act);
+ void onChangeScreenAspect(QAction* act);
+ void onChangeIntegerScaling(bool checked);
+ void onChangeScreenFiltering(bool checked);
+ void onChangeShowOSD(bool checked);
+ void onChangeLimitFramerate(bool checked);
+ void onChangeAudioSync(bool checked);
+
+ void onTitleUpdate(QString title);
+
+ void onEmuStart();
+ void onEmuStop();
+
+ void onUpdateVideoSettings(bool glchange);
+
+ void onFullscreenToggled();
+ void onScreenEmphasisToggled();
+
+private:
+ virtual void closeEvent(QCloseEvent* event) override;
+
+ QStringList currentROM;
+ QStringList currentGBAROM;
+ QList<QString> recentFileList;
+ QMenu *recentMenu;
+ void updateRecentFilesMenu();
+
+ bool verifySetup();
+ QString pickFileFromArchive(QString archiveFileName);
+ QStringList pickROM(bool gba);
+ void updateCartInserted(bool gba);
+
+ void createScreenPanel();
+
+ bool pausedManually = false;
+
+ int oldW, oldH;
+ bool oldMax;
+
+public:
+ ScreenHandler* panel;
+ QWidget* panelWidget;
+
+ QAction* actOpenROM;
+ QAction* actBootFirmware;
+ QAction* actCurrentCart;
+ QAction* actInsertCart;
+ QAction* actEjectCart;
+ QAction* actCurrentGBACart;
+ QAction* actInsertGBACart;
+ QAction* actInsertGBAAddon[1];
+ QAction* actEjectGBACart;
+ QAction* actImportSavefile;
+ QAction* actSaveState[9];
+ QAction* actLoadState[9];
+ QAction* actUndoStateLoad;
+ QAction* actQuit;
+
+ QAction* actPause;
+ QAction* actReset;
+ QAction* actStop;
+ QAction* actFrameStep;
+ QAction* actPowerManagement;
+ QAction* actDateTime;
+ QAction* actEnableCheats;
+ QAction* actSetupCheats;
+ QAction* actROMInfo;
+ QAction* actRAMInfo;
+ QAction* actTitleManager;
+ QAction* actMPNewInstance;
+
+ QAction* actEmuSettings;
+#ifdef __APPLE__
+ QAction* actPreferences;
+#endif
+ QAction* actInputConfig;
+ QAction* actVideoSettings;
+ QAction* actCameraSettings;
+ QAction* actAudioSettings;
+ QAction* actMPSettings;
+ QAction* actWifiSettings;
+ QAction* actFirmwareSettings;
+ QAction* actPathSettings;
+ QAction* actInterfaceSettings;
+ QAction* actSavestateSRAMReloc;
+ QAction* actScreenSize[4];
+ QActionGroup* grpScreenRotation;
+ QAction* actScreenRotation[Frontend::screenRot_MAX];
+ QActionGroup* grpScreenGap;
+ QAction* actScreenGap[6];
+ QActionGroup* grpScreenLayout;
+ QAction* actScreenLayout[Frontend::screenLayout_MAX];
+ QAction* actScreenSwap;
+ QActionGroup* grpScreenSizing;
+ QAction* actScreenSizing[Frontend::screenSizing_MAX];
+ QAction* actIntegerScaling;
+ QActionGroup* grpScreenAspectTop;
+ QAction** actScreenAspectTop;
+ QActionGroup* grpScreenAspectBot;
+ QAction** actScreenAspectBot;
+ QAction* actScreenFiltering;
+ QAction* actShowOSD;
+ QAction* actLimitFramerate;
+ QAction* actAudioSync;
+};
+
+void ToggleFullscreen(MainWindow* mainWindow);
+
+#endif // WINDOW_H