all repos — mgba @ 0ef07f7c26d440aa216925b1d6ad4886fa3fde50

mGBA Game Boy Advance Emulator

src/platform/qt/Window.h (view raw)

  1#ifndef QGBA_WINDOW
  2#define QGBA_WINDOW
  3
  4#include <QAudioOutput>
  5#include <QMainWindow>
  6
  7extern "C" {
  8#include "gba.h"
  9}
 10
 11#include "GDBController.h"
 12#include "Display.h"
 13#include "InputController.h"
 14#include "LoadSaveState.h"
 15
 16struct GBAOptions;
 17struct GBAArguments;
 18
 19namespace QGBA {
 20
 21class ConfigController;
 22class GameController;
 23class LogView;
 24class VideoView;
 25class WindowBackground;
 26
 27class Window : public QMainWindow {
 28Q_OBJECT
 29
 30public:
 31	Window(ConfigController* config, QWidget* parent = nullptr);
 32	virtual ~Window();
 33
 34	GameController* controller() { return m_controller; }
 35
 36	void setConfig(ConfigController*);
 37	void argumentsPassed(GBAArguments*);
 38
 39signals:
 40	void startDrawing(const uint32_t*, GBAThread*);
 41	void shutdown();
 42	void audioBufferSamplesChanged(int samples);
 43	void fpsTargetChanged(float target);
 44
 45public slots:
 46	void selectROM();
 47	void selectBIOS();
 48	void selectPatch();
 49	void toggleFullScreen();
 50	void loadConfig();
 51	void saveConfig();
 52
 53	void openKeymapWindow();
 54
 55#ifdef USE_FFMPEG
 56	void openVideoWindow();
 57#endif
 58
 59#ifdef USE_GDB_STUB
 60	void gdbOpen();
 61#endif
 62
 63protected:
 64	virtual void keyPressEvent(QKeyEvent* event) override;
 65	virtual void keyReleaseEvent(QKeyEvent* event) override;
 66	virtual void resizeEvent(QResizeEvent*) override;
 67	virtual void closeEvent(QCloseEvent*) override;
 68
 69private slots:
 70	void gameStarted(GBAThread*);
 71	void gameStopped();
 72	void redoLogo();
 73
 74private:
 75	void setupMenu(QMenuBar*);
 76	void openStateWindow(LoadSave);
 77
 78	void attachWidget(QWidget* widget);
 79	void detachWidget(QWidget* widget);
 80
 81	GameController* m_controller;
 82	Display* m_display;
 83	QList<QAction*> m_gameActions;
 84	LogView* m_logView;
 85	LoadSaveState* m_stateWindow;
 86	WindowBackground* m_screenWidget;
 87	QPixmap m_logo;
 88	ConfigController* m_config;
 89	InputController m_inputController;
 90
 91#ifdef USE_FFMPEG
 92	VideoView* m_videoView;
 93#endif
 94
 95#ifdef USE_GDB_STUB
 96	GDBController* m_gdbController;
 97#endif
 98};
 99
100class WindowBackground : public QLabel {
101Q_OBJECT
102
103public:
104	WindowBackground(QWidget* parent = 0);
105
106	void setSizeHint(const QSize& size);
107	virtual QSize sizeHint() const override;
108
109private:
110	QSize m_sizeHint;
111};
112
113}
114
115#endif