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