1 class CanvasObject : public QWidget {
2 public:
3   void dragEnterEvent(QDragEnterEvent*);
4   void dropEvent(QDropEvent*);
5   void keyPressEvent(QKeyEvent*);
6   void keyReleaseEvent(QKeyEvent*);
7 };
8 
9 class CanvasWidget : public CanvasObject {
10 public:
11   QPaintEngine* paintEngine() const;
12   void mouseReleaseEvent(QMouseEvent*);
13   void paintEvent(QPaintEvent*);
14 };
15 
16 class MainWindow : public QbWindow {
17   Q_OBJECT
18 
19 public:
20   QMenuBar *menuBar;
21   QStatusBar *statusBar;
22   QVBoxLayout *layout;
23   QMenu *system;
24     QAction *system_load;
25     QMenu *system_loadSpecial;
26       QAction *system_loadSpecial_bsxSlotted;
27       QAction *system_loadSpecial_bsx;
28       QAction *system_loadSpecial_sufamiTurbo;
29       QAction *system_loadSpecial_superGameBoy;
30     QbCheckAction *system_power;
31     QAction *system_reset;
32     QMenu *system_port1;
33       QbRadioAction *system_port1_none;
34       QbRadioAction *system_port1_gamepad;
35       QbRadioAction *system_port1_asciipad;
36       QbRadioAction *system_port1_multitap;
37       QbRadioAction *system_port1_mouse;
38     QMenu *system_port2;
39       QbRadioAction *system_port2_none;
40       QbRadioAction *system_port2_gamepad;
41       QbRadioAction *system_port2_asciipad;
42       QbRadioAction *system_port2_multitap;
43       QbRadioAction *system_port2_mouse;
44       QbRadioAction *system_port2_superscope;
45       QbRadioAction *system_port2_justifier;
46       QbRadioAction *system_port2_justifiers;
47     QAction *system_exit;
48   QMenu *settings;
49     QMenu *settings_videoMode;
50       QbRadioAction *settings_videoMode_1x;
51       QbRadioAction *settings_videoMode_2x;
52       QbRadioAction *settings_videoMode_3x;
53       QbRadioAction *settings_videoMode_4x;
54       QbRadioAction *settings_videoMode_5x;
55       QbCheckAction *settings_videoMode_correctAspectRatio;
56       QbRadioAction *settings_videoMode_ntsc;
57       QbRadioAction *settings_videoMode_pal;
58     QMenu *settings_videoFilter;
59       QAction *settings_videoFilter_configure;
60       QbRadioAction *settings_videoFilter_none;
61       array<QbRadioAction*> settings_videoFilter_list;
62     QbCheckAction *settings_smoothVideo;
63     QbCheckAction *settings_muteAudio;
64     QMenu *settings_emulationSpeed;
65       QbRadioAction *settings_emulationSpeed_slowest;
66       QbRadioAction *settings_emulationSpeed_slow;
67       QbRadioAction *settings_emulationSpeed_normal;
68       QbRadioAction *settings_emulationSpeed_fast;
69       QbRadioAction *settings_emulationSpeed_fastest;
70       QbCheckAction *settings_emulationSpeed_syncVideo;
71       QbCheckAction *settings_emulationSpeed_syncAudio;
72     QAction *settings_configuration;
73   QMenu *tools;
74     QMenu *tools_movies;
75       QAction *tools_movies_play;
76       QAction *tools_movies_stop;
77       QAction *tools_movies_recordFromPowerOn;
78       QAction *tools_movies_recordFromHere;
79     QAction *tools_captureScreenshot;
80     QAction *tools_dialog;
81     QAction *tools_debugger;
82   QMenu *help;
83     QAction *help_documentation;
84     QAction *help_license;
85     QAction *help_about;
86 
87   CanvasObject *canvasContainer;
88   QVBoxLayout *canvasLayout;
89   CanvasWidget *canvas;
90   QLabel *systemState;
91 
92   void syncUi();
93   bool isActive();
94   void closeEvent(QCloseEvent*);
95   MainWindow();
96 
97 public slots:
98   void loadCartridge();
99   void loadBsxSlottedCartridge();
100   void loadBsxCartridge();
101   void loadSufamiTurboCartridge();
102   void loadSuperGameBoyCartridge();
103   void power();
104   void reset();
105   void setPort1None();
106   void setPort1Gamepad();
107   void setPort1Asciipad();
108   void setPort1Multitap();
109   void setPort1Mouse();
110   void setPort2None();
111   void setPort2Gamepad();
112   void setPort2Asciipad();
113   void setPort2Multitap();
114   void setPort2Mouse();
115   void setPort2SuperScope();
116   void setPort2Justifier();
117   void setPort2Justifiers();
118   void quit();
119   void setVideoMode1x();
120   void setVideoMode2x();
121   void setVideoMode3x();
122   void setVideoMode4x();
123   void setVideoMode5x();
124   void toggleAspectCorrection();
125   void setVideoNtsc();
126   void setVideoPal();
127   void configureFilter();
128   void setFilter();
129   void toggleSmoothVideo();
130   void muteAudio();
131   void setSpeedSlowest();
132   void setSpeedSlow();
133   void setSpeedNormal();
134   void setSpeedFast();
135   void setSpeedFastest();
136   void syncVideo();
137   void syncAudio();
138   void showConfigWindow();
139   void playMovie();
140   void stopMovie();
141   void recordMovieFromPowerOn();
142   void recordMovieFromHere();
143   void saveScreenshot();
144   void showDebugger();
145   void showToolsDialog();
146   void showDocumentation();
147   void showLicense();
148   void showAbout();
149 };
150 
151 extern MainWindow *mainWindow;
152