3 * Modified by K.Ohta <whatisthis.sowhat _at_ gmail.com>
4 * Please use this file as templete.
7 #ifndef _CSP_QT_MAINWIDGET_H
8 #define _CSP_QT_MAINWIDGET_H
13 #include <QApplication>
14 #include <QButtonGroup>
15 #include <QGraphicsView>
16 #include <QHeaderView>
17 #include <QMainWindow>
24 #include <QGraphicsEllipseItem>
26 #include <QtCore/QVariant>
27 #include <QtGui/QAction>
28 #include <QtGui/QApplication>
29 #include <QtGui/QButtonGroup>
30 #include <QtGui/QGraphicsView>
31 #include <QtGui/QHeaderView>
32 #include <QtGui/QMainWindow>
33 #include <QtGui/QMenu>
34 #include <QtGui/QMenuBar>
35 #include <QtGui/QStatusBar>
36 #include <QtGui/QWidget>
37 #include <QtGui/QIconSet>
41 #include "simd_types.h"
55 #ifndef _SCREEN_MODE_NUM
56 #define _SCREEN_MODE_NUM 32
59 class Ui_MainWindow : public QMainWindow
63 QMainWindow *MainWindow;
64 QApplication *CoreApplication;
66 QWidget *centralwidget;
67 GLDrawClass *graphicsView;
68 QStatusBar *statusbar;
70 QTimer *statusUpdateTimer;
71 #ifdef SUPPORT_DUMMY_DEVICE_LED
72 QTimer *ledUpdateTimer;
75 int screen_mode_count;
78 void ConfigCpuSpeed(void);
79 void ConfigControlMenu(void);
80 void connectActions_ControlMenu(void);
81 void retranslateControlMenu(const char *SpecialResetTitle, bool WithSpecialReset);
82 void ConfigFloppyMenu(void);
83 void ConfigSoundMenu(void);
84 void CreateSoundMenu(void);
86 void OnWindowResize(void);
87 void OnWindowMove(void);
88 void OnWindowRedraw(void);
89 void CreateFloppyMenu(int drv, int drv_base);
90 void CreateFloppyPulldownMenu(int drv);
91 void ConfigFloppyMenuSub(int drv);
92 void retranslateFloppyMenu(int drv, int basedrv);
93 void CreateCMTMenu(void);
94 void CreateCMTPulldownMenu(void);
95 void ConfigCMTMenuSub(void);
96 void retranslateCMTMenu(void);
97 void ConfigCMTMenu(void);
99 void ConfigQuickDiskMenu(void);
100 void retranslateQuickDiskMenu(int drv, int basedrv);
101 void ConfigQuickDiskMenuSub(int drv);
102 void CreateQuickDiskPulldownMenu(int drv);
103 void CreateQuickDiskMenu(int drv, int drv_base);
105 void CreateCartMenu(int drv, int drv_base);
106 void CreateCartPulldownMenu(int drv);
107 void ConfigCartMenuSub(int drv);
108 void ConfigCartMenu(void);
109 virtual void retranslateCartMenu(int drv, int basedrv);
111 void ConfigBinaryMenu(void);
112 void retranslateBinaryMenu(int drv, int basedrv);
114 void retranslateSoundMenu(void);
115 virtual void retranslateVolumeLabels(Ui_SoundDialog *);
117 void ConfigScreenMenu(void);
118 void ConfigScreenMenu_List(void);
119 void CreateScreenMenu(void);
120 void ConfigDeviceType(void);
121 void ConfigDriveType(void);
122 void ConfigSoundDeviceType(void);
124 void retranslateScreenMenu(void);
125 class Action_Control *actionReset;
126 class Action_Control *actionSpecial_Reset;
127 class Action_Control *actionExit_Emulator;
130 QActionGroup *actionGroup_CpuType;
132 class Action_Control *actionCpuType[8];
133 void ConfigCPUTypes(int num);
135 QActionGroup *actionGroup_CpuSpeed;
136 class Action_Control *actionSpeed_x1;
137 class Action_Control *actionSpeed_x2;
138 class Action_Control *actionSpeed_x4;
139 class Action_Control *actionSpeed_x8;
140 class Action_Control *actionSpeed_x16;
144 QActionGroup *actionGroup_BootMode;
146 class Action_Control *actionBootMode[8];
147 void ConfigCPUBootMode(int num);
149 class Action_Control *actionPaste_from_Clipboard;
150 class Action_Control *actionStop_Pasting;
152 class Action_Control *actionSave_State;
153 class Action_Control *actionLoad_State;
156 class Action_Control *actionDebugger_1;
157 class Action_Control *actionDebugger_2;
158 class Action_Control *actionDebugger_3;
159 //class Action_Control *actionClose_Debuggers;
162 #if defined(USE_CART1) || defined(USE_CART2)
163 QActionGroup *actionGroup_Opened_CART[2];
164 class Action_Control *actionRecent_Opened_CART[2];
165 class Action_Control *action_Recent_List_CART[2][MAX_HISTORY];
166 class Action_Control *actionInsert_CART[2];
167 class Action_Control *actionEject_CART[2];
170 #if defined(USE_FD1) || defined(USE_FD2) || defined(USE_FD3) || defined(USE_FD4) || \
171 defined(USE_FD5) || defined(USE_FD6) || defined(USE_FD7) || defined(USE_FD8)
172 QActionGroup *actionGroup_Opened_FD[8];
173 QActionGroup *actionGroup_Protect_FD[8];
174 class Action_Control *actionRecent_Opened_FD[8];
175 class Action_Control *action_Recent_List_FD[8][MAX_HISTORY];
177 QActionGroup *actionGroup_D88_Image_FD[8];
178 class Action_Control *actionSelect_D88_Image_FD[8];
179 class Action_Control *action_D88_ListImage_FD[8][64];
180 class Action_Control *actionInsert_FD[8];
181 class Action_Control *actionEject_FD[8];
182 class Action_Control *actionIgnoreCRC[8];
183 class Action_Control *actionCorrectDiskTiming[8];
185 class Action_Control *actionProtection_ON_FD[8];
186 class Action_Control *actionProtection_OFF_FD[8];
189 #if defined(USE_QD1) || defined(USE_QD2)
190 QActionGroup *actionGroup_Opened_QD[2];
191 QActionGroup *actionGroup_Protect_QD[2];
192 class Action_Control *actionRecent_Opened_QD[2];
193 class Action_Control *action_Recent_List_QD[2][MAX_HISTORY];
194 class Action_Control *actionInsert_QD[2];
195 class Action_Control *actionEject_QD[2];
196 class Action_Control *actionProtection_ON_QD[2];
197 class Action_Control *actionProtection_OFF_QD[2];
200 QActionGroup *actionGroup_Opened_CMT;
201 QActionGroup *actionGroup_Protect_CMT;
202 class Action_Control *actionWaveShaper;
203 class Action_Control *actionDirectLoadMZT;
204 class Action_Control *actionRecent_Opened_CMT;
205 class Action_Control *action_Recent_List_CMT[MAX_HISTORY];
206 class Action_Control *actionInsert_CMT;
207 class Action_Control *actionEject_CMT;
208 #ifdef USE_TAPE_BUTTON
209 QActionGroup *actionGroup_PlayTape;
210 class Action_Control *actionPlay_Start;
211 class Action_Control *actionPlay_Stop;
212 class Action_Control *actionPlay_FastForward;
213 class Action_Control *actionPlay_Rewind;
214 class Action_Control *actionPlay_Apss_Forward;
215 class Action_Control *actionPlay_Apss_Rewind;
217 class Action_Control *actionRecording;
218 class Action_Control *actionProtection_ON_CMT;
219 class Action_Control *actionProtection_OFF_CMT;
222 #if defined(USE_LASER_DISC)
223 class Action_Control *actionInsert_LD;
224 class Action_Control *actionEject_LD;
225 QActionGroup *actionGroup_Opened_LD;
226 class Action_Control *actionRecent_Opened_LD;
227 class Action_Control *action_Recent_List_LD[MAX_HISTORY];
229 #if defined(USE_BINARY_FILE1)
230 QActionGroup *actionGroup_Opened_BIN[8];
231 QActionGroup *actionGroup_Protect_BIN[8]; // Is needed?
232 class Action_Control *actionRecent_Opened_BIN[8];
233 class Action_Control *action_Recent_List_BIN[8][MAX_HISTORY];
234 class Action_Control *actionLoad_BIN[8];
235 class Action_Control *actionSave_BIN[8];
238 QActionGroup *actionGroup_Stretch;
239 class Action_Control *actionZoom;
240 class Action_Control *actionDisplay_Mode;
241 class Action_Control *actionScanLine;
242 class Action_Control *actionRotate;
243 #ifdef USE_CRT_FILTER
244 class Action_Control *actionCRT_Filter;
246 class Action_Control *actionOpenGL_Filter;
247 class Action_Control *actionDot_by_Dot;
248 class Action_Control *actionKeep_Aspect;
249 class Action_Control *actionFill_Display;
250 class Action_Control *actionCapture_Screen;
252 QActionGroup *actionGroup_ScreenSize;
253 class Action_Control *actionScreenSize[_SCREEN_MODE_NUM];
254 class Action_Control *actionAbout;
255 QActionGroup *actionGroup_Sound_Freq;
256 QActionGroup *actionGroup_Sound_Latency;
258 class Action_Control *actionSoundCMT;
261 class Action_Control *action_Freq[8];
262 class Action_Control *action_Latency[6];
263 class Action_Control *actionStart_Record;
264 class Action_Control *actionStop_Record;
265 class Action_Control *actionStart_Record_Movie;
266 class Action_Control *actionStop_Record_Movie;
267 class Action_Control *action_VolumeDialog;
269 class Action_Control *actionMouseEnable;
271 class Action_Control *actionHelp_AboutQt;
273 #ifdef USE_DEVICE_TYPE
274 QActionGroup *actionGroup_DeviceType;
275 QMenu *menuDeviceType;
276 class Action_Control *actionDeviceType[USE_DEVICE_TYPE];
278 #ifdef USE_DRIVE_TYPE
279 QActionGroup *actionGroup_DriveType;
280 QMenu *menuDriveType;
281 class Action_Control *actionDriveType[USE_DRIVE_TYPE];
283 #ifdef USE_SOUND_DEVICE_TYPE
284 QActionGroup *actionGroup_SoundDevice;
285 QMenu *menuSoundDevice;
286 class Action_Control *actionSoundDevice[USE_SOUND_DEVICE_TYPE]; //
288 #ifdef USE_MULTIPLE_SOUNDCARDS
289 class Action_Control *actionSoundMultipleSpeakers;
294 QMenu *menuCopy_Paste;
295 QMenu *menuCpu_Speed;
297 #if defined(USE_CART1) || defined(USE_CART2)
299 QMenu *menuCART_Recent[8];
301 #if defined(USE_FD1) || defined(USE_FD2) || defined(USE_FD3) || defined(USE_FD4) || \
302 defined(USE_FD5) || defined(USE_FD6) || defined(USE_FD7) || defined(USE_FD8)
304 QMenu *menuFD_Recent[8];
305 QMenu *menuFD_D88[8];
306 QMenu *menuWrite_Protection_FD[8];
308 #if defined(USE_QD1) || defined(USE_QD2)
310 QMenu *menuQD_Recent[2];
311 QMenu *menuWrite_Protection_QD[2];
315 QMenu *menuCMT_Recent;
316 QMenu *menuWrite_Protection_CMT;
318 #ifdef USE_LASER_DISC
320 QMenu *menuLD_Recent;
322 #if defined(USE_BINARY_FILE1)
324 QMenu *menuBIN_Recent[8];
327 QMenu *menuStretch_Mode;
328 QMenu *menuScreenSize;
331 QMenu *menuOutput_Frequency;
332 QMenu *menuSound_Latency;
335 QMenu *menuRecord_sound;
336 QMenu *menuRecord_as_movie;
340 QWidget *dummyStatusArea1;
341 QLabel *messagesStatusBar;
342 QWidget *dummyStatusArea2;
344 QLabel *fd_StatusBar[8];
347 QLabel *qd_StatusBar[8];
350 QLabel *cmt_StatusBar;
355 #ifdef SUPPORT_DUMMY_DEVICE_LED
356 bool flags_led[SUPPORT_DUMMY_DEVICE_LED];
357 bool flags_led_bak[SUPPORT_DUMMY_DEVICE_LED];
358 QGraphicsView *led_graphicsView;
359 QGraphicsScene *led_gScene;
360 QGraphicsEllipseItem *led_leds[SUPPORT_DUMMY_DEVICE_LED];
363 virtual void initStatusBar(void);
365 class EmuThreadClass *hRunEmu;
366 class DrawThreadClass *hDrawEmu;
367 class JoyThreadClass *hRunJoy;
369 Ui_MainWindow(QWidget *parent = 0);
371 // Initializer : using from InitContext.
372 void setCoreApplication(QApplication *p);
374 void createContextMenu(void);
376 void set_window(int mode);
377 // Belows are able to re-implement.
378 virtual void retranslateUi(void);
380 void StopEmuThread(void);
381 void LaunchEmuThread(void);
383 void StopJoyThread(void);
384 void LaunchJoyThread(void);
386 // Getting important widgets.
387 QMainWindow *getWindow(void) { return MainWindow; }
388 QMenuBar *getMenuBar(void) { return menubar;}
389 GLDrawClass *getGraphicsView(void) { return graphicsView; }
390 QStatusBar *getStatusBar(void) { return statusbar;}
392 QImage *getBitmapImage(void) { return bitmapImage; }
395 void OnMainWindowClosed(void);
396 // Basic Action Definition
397 void OnCpuPower(int mode);
399 bool get_wave_shaper(void);
400 bool get_direct_load_mzt(void);
403 bool GetPowerState(void);
408 void delete_emu_thread(void);
409 void doChangeMessage_EmuThread(QString str);
411 void delete_joy_thread(void);
412 virtual void redraw_status_bar(void);
413 #ifdef SUPPORT_DUMMY_DEVICE_LED
414 virtual void redraw_leds(void);
416 void set_screen_aspect(int num);
417 void set_screen_size(int w, int h);
419 void OnSpecialReset(void);
420 void do_set_mouse_enable(bool flag);
421 void do_toggle_mouse(void);
422 void do_set_sound_device(int);
423 void rise_volume_dialog(void);
424 #ifdef USE_MULTIPLE_SOUNDCARDS
425 void set_multiple_speakers(bool flag);
428 void OnLoadState(void);
429 void OnSaveState(void);
432 void OnOpenDebugger(int n);
433 void OnCloseDebugger(void);
435 #ifdef USE_SCREEN_ROTATE
436 void set_screen_rotate(bool);
438 #ifdef USE_CRT_FILTER
439 void set_crt_filter(bool);
441 void set_gl_crt_filter(bool);
442 void set_cpu_power(int pw) {
445 void on_actionExit_triggered() {
447 OnMainWindowClosed();
450 void OnStartAutoKey(void);
451 void OnStopAutoKey(void);
455 void open_disk_dialog(int drv);
458 void open_cart_dialog(int);
459 void eject_cart(int);
460 void set_recent_cart(int, int);
462 #if defined(USE_BINARY_FILE1)
463 void open_binary_dialog(int drive, bool load);
464 void CreateBinaryMenu(int drv, int drv_base);
465 void CreateBinaryPulldownMenu(int drv);
466 void ConfigBinaryMenuSub(int drv);
467 int set_recent_binary_load(int drv, int num);
468 int set_recent_binary_save(int drv, int num);
469 void _open_binary(int drive, const QString fname, bool load);
473 void open_quick_disk_dialog(int drv);
474 int set_recent_quick_disk(int drive, int num);
475 int write_protect_Qd(int drv, bool flag);
476 void _open_quick_disk(int drv, const QString fname);
477 void eject_Qd(int drv);
479 void _open_disk(int drv, const QString fname);
480 void _open_cart(int drv, const QString fname);
481 void _open_cmt(bool mode,const QString path);
482 void eject_cmt(void);
484 void do_change_boot_mode(int mode);
487 void do_change_cpu_type(int mode);
490 void open_cmt_dialog(bool play);
491 void do_write_protect_cmt(bool flag);
492 int set_recent_cmt(int num);
493 void set_wave_shaper(bool f);
494 void set_direct_load_from_mzt(bool f);
495 # ifdef USE_TAPE_BUTTON
496 void do_push_play_tape(void);
497 void do_push_stop_tape(void);
498 void do_display_tape_play(bool flag);
499 void do_push_fast_forward_tape(void);
500 void do_push_rewind_tape(void);
501 void do_push_apss_forward_tape(void);
502 void do_push_apss_rewind_tape(void);
506 void set_cmt_sound(bool);
508 int write_protect_fd(int drv, bool flag);
509 void eject_fd(int drv);
511 int set_d88_slot(int drive, int num);
512 int set_recent_disk(int, int);
514 void start_record_sound(bool rec);
516 void set_latency(int);
517 void set_sound_device(int);
518 void set_monitor_type(int);
519 void message_status_bar(QString);
520 void resize_statusbar(int w, int h);
521 void do_release_emu_resources(void);
522 # if defined(USE_DEVICE_TYPE)
523 void set_device_type(int);
525 # if defined(USE_DRIVE_TYPE)
526 void set_drive_type(int);
528 # if defined(USE_SCANLINE)
529 void set_scan_line(bool);
532 #if defined(USE_DIPSWITCH)
533 void set_dipsw(int num, bool flag) {
534 if((num < 0) || (num >= 32)) return;
536 config.dipswitch = config.dipswitch | (1 << num);
538 config.dipswitch = config.dipswitch & ~(1 << num);
541 bool get_dipsw(int num) {
542 if((num < 0) || (num >= 32)) return false;
543 if(((1 << num) & config.dipswitch) == 0) return false;
550 int message_changed(QString);
551 int quit_emu_thread();
552 int call_joy_thread(EMU *);
553 int quit_joy_thread();
554 int quit_draw_thread();
555 int on_boot_mode(int);
556 int on_cpu_type(int);
557 int on_cpu_power(int);
558 int on_open_debugger(int);
559 int on_insert_fd(int);
560 int on_eject_fd(int);
561 int do_open_disk(int, QString);
562 int do_recent_cmt(bool);
564 int sig_quit_all(void);
565 int sig_vm_reset(void);
566 int sig_vm_specialreset(void);
567 int sig_vm_loadstate(void);
568 int sig_vm_savestate(void);
569 int sig_check_grab_mouse(bool);
570 int sig_resize_uibar(int, int);
571 #ifdef SUPPORT_DUMMY_DEVICE_LED
572 int sig_led_update(QRectF);
575 int quit_debugger_thread(void);