OSDN Git Service

5f2a4e463469093e7a8c66283cf75a8f7e5687a2
[csp-qt/common_source_project-fm7.git] / source / src / qt / gui / mainwidget.h
1 /*
2  * MainWidget : Defines
3  * Modified by K.Ohta <whatisthis.sowhat _at_ gmail.com>
4  * Please use this file as templete.
5  */
6
7 #ifndef _CSP_QT_MAINWIDGET_H
8 #define _CSP_QT_MAINWIDGET_H
9
10 #if defined(_USE_QT5)
11 #include <QVariant>
12 #include <QAction>
13 #include <QApplication>
14 #include <QButtonGroup>
15 #include <QGraphicsView>
16 #include <QHeaderView>
17 #include <QMainWindow>
18 #include <QMenu>
19 #include <QMenuBar>
20 #include <QStatusBar>
21 #include <QWidget>
22 #include <QIcon>
23 #include <QLabel>
24 #include <QGraphicsEllipseItem>
25 #else
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>
38 #include <QLabel>
39 #endif
40
41 #include "simd_types.h"
42 #include "common.h"
43 #include "config.h"
44 #include "emu.h"
45 #include "vm.h"
46
47 #include "qt_main.h"
48
49 QT_BEGIN_NAMESPACE
50
51 class Ui_SoundDialog;
52 class GLDrawClass;
53 class Action_Control;
54
55 #ifndef _SCREEN_MODE_NUM
56 #define _SCREEN_MODE_NUM 32
57 #endif
58
59 class Ui_MainWindow : public QMainWindow
60 {
61         Q_OBJECT
62  protected:
63         QMainWindow *MainWindow;
64         QApplication *CoreApplication;
65         
66         QWidget *centralwidget;
67         GLDrawClass *graphicsView;
68         QStatusBar  *statusbar;
69         QMenuBar    *menubar;
70         QTimer *statusUpdateTimer;
71 #ifdef SUPPORT_DUMMY_DEVICE_LED
72         QTimer *ledUpdateTimer;
73 #endif
74         QIcon WindowIcon;
75         int screen_mode_count;
76         
77         // Some Functions
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);
85
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);
98    
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);
104
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);
110
111         void ConfigBinaryMenu(void);
112         void retranslateBinaryMenu(int drv, int basedrv);
113         
114         void retranslateSoundMenu(void);
115         virtual void retranslateVolumeLabels(Ui_SoundDialog *);
116         
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);
123         
124         void retranslateScreenMenu(void);
125         class Action_Control *actionReset;
126         class Action_Control *actionSpecial_Reset;
127         class Action_Control *actionExit_Emulator;
128 #ifdef USE_CPU_TYPE
129         // Pls.Override
130         QActionGroup *actionGroup_CpuType;
131         QMenu *menuCpuType;
132         class Action_Control *actionCpuType[8];
133         void ConfigCPUTypes(int num);
134 #endif
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;
141
142 #ifdef USE_BOOT_MODE
143         // Pls.Override
144         QActionGroup *actionGroup_BootMode;
145         QMenu *menuBootMode;
146         class Action_Control *actionBootMode[8];
147         void ConfigCPUBootMode(int num);
148 #endif    
149         class Action_Control *actionPaste_from_Clipboard;
150         class Action_Control *actionStop_Pasting;
151 #ifdef USE_STATE
152         class Action_Control *actionSave_State;
153         class Action_Control *actionLoad_State;
154 #endif
155 #ifdef USE_DEBUGGER
156         class Action_Control *actionDebugger_1;
157         class Action_Control *actionDebugger_2;
158         class Action_Control *actionDebugger_3;
159         //class Action_Control *actionClose_Debuggers;
160 #endif
161
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];
168 #endif
169
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];
176         
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];
184         
185         class Action_Control *actionProtection_ON_FD[8];
186         class Action_Control *actionProtection_OFF_FD[8];
187 #endif
188
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];
198 #endif
199 #ifdef USE_TAPE    
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;
216 #endif    
217         class Action_Control *actionRecording;
218         class Action_Control *actionProtection_ON_CMT;
219         class Action_Control *actionProtection_OFF_CMT;
220         bool write_protect;
221 #endif    
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];
228 #endif
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];
236 #endif
237         // Screen
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;
245 #endif   
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;
251
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;
257 #ifdef DATAREC_SOUND
258         class Action_Control *actionSoundCMT;
259 #endif
260
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;
268         
269         class Action_Control *actionMouseEnable;
270
271         class Action_Control *actionHelp_AboutQt;
272
273 #ifdef USE_DEVICE_TYPE
274         QActionGroup *actionGroup_DeviceType;
275         QMenu *menuDeviceType;
276         class Action_Control *actionDeviceType[USE_DEVICE_TYPE];
277 #endif   
278 #ifdef USE_DRIVE_TYPE
279         QActionGroup *actionGroup_DriveType;
280         QMenu *menuDriveType;
281         class Action_Control *actionDriveType[USE_DRIVE_TYPE];
282 #endif   
283 #ifdef USE_SOUND_DEVICE_TYPE
284         QActionGroup   *actionGroup_SoundDevice;
285         QMenu *menuSoundDevice;
286         class Action_Control *actionSoundDevice[USE_SOUND_DEVICE_TYPE]; //
287 #endif  
288 #ifdef USE_MULTIPLE_SOUNDCARDS
289         class Action_Control *actionSoundMultipleSpeakers;
290 #endif
291         // Menus    
292         QMenu *menuControl;
293         QMenu *menuState;
294         QMenu *menuCopy_Paste;
295         QMenu *menuCpu_Speed;
296         QMenu *menuDebugger;
297 #if defined(USE_CART1) || defined(USE_CART2)
298         QMenu *menuCART[8];
299         QMenu *menuCART_Recent[8];
300 #endif
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)
303         QMenu *menuFD[8];
304         QMenu *menuFD_Recent[8];
305         QMenu *menuFD_D88[8];
306         QMenu *menuWrite_Protection_FD[8];
307 #endif
308 #if defined(USE_QD1) || defined(USE_QD2)
309         QMenu *menuQD[2];
310         QMenu *menuQD_Recent[2];
311         QMenu *menuWrite_Protection_QD[2];
312 #endif
313 #ifdef USE_TAPE    
314         QMenu *menuCMT;
315         QMenu *menuCMT_Recent;
316         QMenu *menuWrite_Protection_CMT;
317 #endif
318 #ifdef USE_LASER_DISC    
319         QMenu *menuLD;
320         QMenu *menuLD_Recent;
321 #endif
322 #if defined(USE_BINARY_FILE1)
323         QMenu *menuBIN[8];
324         QMenu *menuBIN_Recent[8];
325 #endif
326         QMenu *menuScreen;
327         QMenu *menuStretch_Mode;
328         QMenu *menuScreenSize;
329   
330         QMenu *menuSound;
331         QMenu *menuOutput_Frequency;
332         QMenu *menuSound_Latency;
333         QMenu *menuMachine;
334         QMenu *menuRecord;
335         QMenu *menuRecord_sound;
336         QMenu *menuRecord_as_movie;
337         QMenu *menuEmulator;
338         QMenu *menuHELP;
339         // Status Bar
340         QWidget *dummyStatusArea1;
341         QLabel *messagesStatusBar;
342         QWidget *dummyStatusArea2;
343 #ifdef USE_FD1
344         QLabel *fd_StatusBar[8];
345 #endif
346 #ifdef USE_QD1
347         QLabel *qd_StatusBar[8];
348 #endif
349 #ifdef USE_TAPE
350         QLabel *cmt_StatusBar;
351 #endif
352 #ifdef USE_BITMAP
353         QImage *bitmapImage;
354 #endif
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];
361 #endif
362         // About Status bar
363         virtual void initStatusBar(void);
364         // Constructor
365         class EmuThreadClass *hRunEmu;
366         class DrawThreadClass *hDrawEmu;
367         class JoyThreadClass *hRunJoy;
368 public:
369         Ui_MainWindow(QWidget *parent = 0);
370         ~Ui_MainWindow();
371         // Initializer : using from InitContext.
372         void setCoreApplication(QApplication *p);
373         
374         void createContextMenu(void);
375         void setupUi(void);
376         void set_window(int mode);
377         // Belows are able to re-implement.
378         virtual void retranslateUi(void);
379         // EmuThread
380         void StopEmuThread(void);
381         void LaunchEmuThread(void);
382         
383         void StopJoyThread(void);
384         void LaunchJoyThread(void);
385    
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;}
391 #ifdef USE_BITMAP
392         QImage *getBitmapImage(void) { return bitmapImage; }
393 #endif
394         
395         void OnMainWindowClosed(void);
396         // Basic Action Definition
397         void OnCpuPower(int mode);
398         //#ifdef USE_TAPE    
399         bool get_wave_shaper(void);
400         bool get_direct_load_mzt(void);
401         //#endif
402 #ifdef USE_POWER_OFF
403         bool GetPowerState(void);
404 #endif
405    
406         // Basic slots
407 public slots:
408         void delete_emu_thread(void);
409         void doChangeMessage_EmuThread(QString str);
410
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);
415 #endif
416         void set_screen_aspect(int num);
417         void set_screen_size(int w, int h);
418         void OnReset(void);
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);
426 #endif
427 #ifdef USE_STATE
428         void OnLoadState(void);
429         void OnSaveState(void);
430 #endif
431 #ifdef USE_DEBUGGER
432         void OnOpenDebugger(int n);
433         void OnCloseDebugger(void);
434 #endif
435 #ifdef USE_SCREEN_ROTATE
436         void set_screen_rotate(bool);
437 #endif
438 #ifdef USE_CRT_FILTER   
439         void set_crt_filter(bool);
440 #endif
441         void set_gl_crt_filter(bool);
442         void set_cpu_power(int pw) {
443                 OnCpuPower(pw);
444         }
445         void on_actionExit_triggered() {
446                 save_config();
447                 OnMainWindowClosed();
448         }
449 #ifdef USE_AUTO_KEY
450         void OnStartAutoKey(void);
451         void OnStopAutoKey(void);
452 #endif
453
454 #ifdef USE_FD1
455         void open_disk_dialog(int drv);
456 #endif
457 #ifdef USE_CART1
458         void open_cart_dialog(int);
459         void eject_cart(int);
460         void set_recent_cart(int, int);
461 #endif
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);
470 #endif
471
472 //#ifdef USE_QD1
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);
478 //#endif
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);
483 #ifdef USE_BOOT_MODE
484         void do_change_boot_mode(int mode);
485 #endif
486 #ifdef USE_CPU_TYPE
487         void do_change_cpu_type(int mode);
488 #endif
489 #ifdef USE_TAPE
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);
503 # endif
504 #endif
505 #ifdef DATAREC_SOUND
506         void set_cmt_sound(bool);
507 #endif
508         int write_protect_fd(int drv, bool flag);
509         void eject_fd(int drv);
510 #ifdef USE_FD1
511         int set_d88_slot(int drive, int num);
512         int set_recent_disk(int, int);
513 #endif
514         void start_record_sound(bool rec);
515         void set_freq(int);
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);
524 # endif
525 # if defined(USE_DRIVE_TYPE)
526         void set_drive_type(int);
527 # endif
528 # if defined(USE_SCANLINE)
529         void set_scan_line(bool);
530 # endif
531
532 #if defined(USE_DIPSWITCH)
533         void set_dipsw(int num, bool flag) {
534                 if((num < 0) || (num >= 32)) return;
535                 if(flag) {
536                         config.dipswitch = config.dipswitch | (1 << num);
537                 } else {
538                         config.dipswitch = config.dipswitch & ~(1 << num);
539                 }
540         }
541         bool get_dipsw(int num) {
542                 if((num < 0) || (num >= 32)) return false;
543                 if(((1 << num) & config.dipswitch) == 0) return false;
544                 return true;
545         }
546 #endif
547    
548       
549 signals:
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);
563         int closed(void);
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);
573 #endif  
574 #ifdef USE_DEBUGGER
575         int quit_debugger_thread(void);
576 #endif
577 };
578 QT_END_NAMESPACE
579
580 #endif