OSDN Git Service

[UI][Qt][MENU] Fix debugger action.
[csp-qt/common_source_project-fm7.git] / source / src / qt / gui / mainwidget_base.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_BASE_H
8 #define _CSP_QT_MAINWIDGET_BASE_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 #include <QStringList>
26 #include <QClipboard>
27 #else
28 #include <QtCore/QVariant>
29 #include <QtGui/QAction>
30 #include <QtGui/QApplication>
31 #include <QtGui/QButtonGroup>
32 #include <QtGui/QGraphicsView>
33 #include <QtGui/QHeaderView>
34 #include <QtGui/QMainWindow>
35 #include <QtGui/QMenu>
36 #include <QtGui/QMenuBar>
37 #include <QtGui/QStatusBar>
38 #include <QtGui/QWidget>
39 #include <QtGui/QIconSet>
40 #include <QLabel>
41 #endif
42
43 #include "simd_types.h"
44 #include "common.h"
45 #include "config.h"
46 //#include "emu.h"
47 //#include "vm.h"
48
49 #include "qt_main.h"
50 #define _MAX_DEBUGGER 8
51
52 QT_BEGIN_NAMESPACE
53
54 class Ui_SoundDialog;
55 class GLDrawClass;
56 class Action_Control;
57 class Menu_MetaClass;
58 class Menu_FDClass;
59 class Menu_CMTClass;
60 class Menu_CartClass;
61 class Menu_QDClass;
62 class Menu_BinaryClass;
63 class Menu_BubbleClass;
64 class Menu_CompactDiscClass;
65 class USING_FLAGS;
66
67 extern  USING_FLAGS *using_flags;
68
69 class Ui_MainWindowBase : public QMainWindow
70 {
71         Q_OBJECT
72  protected:
73         QMainWindow *MainWindow;
74         QApplication *CoreApplication;
75         
76         QWidget *centralwidget;
77         GLDrawClass *graphicsView;
78         QStatusBar  *statusbar;
79         QMenuBar    *menubar;
80         QTimer *statusUpdateTimer;
81
82         QTimer *ledUpdateTimer;
83
84         int screen_mode_count;
85         QIcon WindowIcon;
86         QIcon InsertIcon;
87         QIcon EjectIcon;
88         QIcon StopIcon;
89         QIcon RecordSoundIcon;
90         QIcon ResetIcon;
91         QIcon ExitIcon;
92         QIcon VolumeMutedIcon;
93         QIcon VolumeLowIcon;
94         QIcon VolumeMidIcon;
95         QIcon VolumeHighIcon;
96         
97         // Some Functions
98         void ConfigCpuSpeed(void);
99         void ConfigControlMenu(void);
100         void connectActions_ControlMenu(void);
101         void retranslateControlMenu(const char *SpecialResetTitle,  bool WithSpecialReset);
102         void ConfigFloppyMenu(void);
103         void ConfigSoundMenu(void);
104         void CreateSoundMenu(void);
105
106         void CreateEmulatorMenu(void);
107         void ConfigEmulatorMenu(void);
108         
109         void CreateFloppyMenu(int drv, int drv_base);
110         void CreateFloppyPulldownMenu(int drv);
111         void ConfigFloppyMenuSub(int drv);
112         void retranslateFloppyMenu(int drv, int basedrv);
113
114         // Bubble
115         void CreateBubbleMenu(int drv, int drv_base);
116         void CreateBubblePulldownMenu(int drv);
117         void ConfigBubbleMenuSub(int drv);
118         void retranslateBubbleMenu(int drv, int basedrv);
119         void ConfigBubbleMenu(void);
120         
121         void CreateCMTMenu(void);
122         void CreateCMTPulldownMenu(void);
123         void ConfigCMTMenuSub(void);
124         void retranslateCMTMenu(void);
125         void ConfigCMTMenu(void);
126    
127         void ConfigQuickDiskMenu(void);
128         void retranslateQuickDiskMenu(int drv, int basedrv);
129         void ConfigQuickDiskMenuSub(int drv);
130         void CreateQuickDiskPulldownMenu(int drv);
131         void CreateQuickDiskMenu(int drv, int drv_base);
132
133         void CreateCartMenu(int drv, int drv_base);
134         void CreateCartPulldownMenu(int drv);
135         void ConfigCartMenuSub(int drv);
136         void ConfigCartMenu(void);
137
138         void CreateCDROMMenu(void);
139         void ConfigCDROMMenu(void);
140         void ConfigCDROMMenuSub(void);
141         void CreateCDROMPulldownMenu(void);
142         void retranslateCDROMMenu(void);
143
144
145         void ConfigBinaryMenu(void);
146         void retranslateBinaryMenu(int drv, int basedrv);
147         
148         void retranslateSoundMenu(void);
149
150         void ConfigScreenMenu(void);
151         void ConfigScreenMenu_List(void);
152         void CreateScreenMenu(void);
153         void ConfigDeviceType(void);
154         void ConfigDriveType(void);
155         void ConfigSoundDeviceType(void);
156         void ConfigPrinterType(void);
157         
158         void retranslateScreenMenu(void);
159         void retranslateMachineMenu(void);
160
161         class Action_Control *actionReset;
162         class Action_Control *actionSpecial_Reset;
163         class Action_Control *actionExit_Emulator;
164
165         // Pls.Override
166         QActionGroup *actionGroup_CpuType;
167         QMenu *menuCpuType;
168         class Action_Control *actionCpuType[8];
169         void ConfigCPUTypes(int num);
170
171         QActionGroup *actionGroup_CpuSpeed;
172         class Action_Control *actionSpeed_x1;
173         class Action_Control *actionSpeed_x2;
174         class Action_Control *actionSpeed_x4;
175         class Action_Control *actionSpeed_x8;
176         class Action_Control *actionSpeed_x16;
177
178
179         // Pls.Override
180         QActionGroup *actionGroup_BootMode;
181         QMenu *menuBootMode;
182         class Action_Control *actionBootMode[8];
183         void ConfigCPUBootMode(int num);
184
185         class Action_Control *actionPaste_from_Clipboard;
186         class Action_Control *actionStop_Pasting;
187
188         class Action_Control *actionSave_State;
189         class Action_Control *actionLoad_State;
190         
191         class Action_Control *actionDebugger[_MAX_DEBUGGER];
192         //class Action_Control *actionClose_Debuggers;
193
194
195         QStringList listCARTs[8];
196
197         QStringList listQDs[8];
198         
199         QStringList listCMT;
200         bool cmt_write_protect;
201         QStringList listCDROM;
202         
203         class Action_Control *actionInsert_LD;
204         class Action_Control *actionEject_LD;
205         QActionGroup   *actionGroup_Opened_LD;
206         class Action_Control *actionRecent_Opened_LD;
207         class Action_Control *action_Recent_List_LD[MAX_HISTORY];
208         QStringList listLaserDisc;
209         
210         QStringList listBINs[8];
211         // Screen
212         class Action_Control *actionZoom;
213         class Action_Control *actionDisplay_Mode;
214
215         class Action_Control *actionScanLine;
216
217         class Action_Control *actionGLScanLineHoriz;
218         class Action_Control *actionGLScanLineVert;
219         class Action_Control *actionRotate;
220
221         class Action_Control *actionCRT_Filter;
222         class Action_Control *actionOpenGL_Filter;
223
224         QActionGroup *actionGroup_Stretch;
225         class Action_Control *actionDot_by_Dot;
226         class Action_Control *actionReferToX_Display;
227         class Action_Control *actionReferToY_Display;
228         class Action_Control *actionFill_Display;
229
230         class Action_Control *actionCapture_Screen;
231
232         QActionGroup *actionGroup_ScreenSize;
233         class Action_Control *actionScreenSize[32]; 
234         class Action_Control *actionAbout;
235         class Action_Control *actionHelp_README_BIOS;
236         class Action_Control *actionHelp_README;
237         class Action_Control *actionHelp_README_QT;
238         class Action_Control *actionHelp_README_MR_TANAM;
239         class Action_Control *actionHelp_README_Artane;
240         class Action_Control *actionHelp_README_FAQ;
241         class Action_Control *actionHelp_README_FAQ_JP;
242         
243         class Action_Control *actionHelp_README_FM7;
244         class Action_Control *actionHelp_README_FM7_JP;
245
246         class Action_Control *actionHelp_History;
247         class Action_Control *actionHelp_History_Relnote;
248         class Action_Control *actionHelp_History_ChangeLog;
249         class Action_Control *actionHelp_History_MR_TANAM;
250
251         class Action_Control *actionHelp_License;
252         class Action_Control *actionHelp_License_JP;
253         
254         
255         QActionGroup   *actionGroup_Sound_Freq;
256         QActionGroup   *actionGroup_Sound_Latency;
257
258         class Action_Control *actionSoundCMT;
259
260         class Action_Control *action_Freq[8];
261         class Action_Control *action_Latency[6];
262         class Action_Control *actionStart_Record;
263         class Action_Control *actionStop_Record;
264         class Action_Control *actionStart_Record_Movie;
265         class Action_Control *actionStop_Record_Movie;
266         class Action_Control *action_VolumeDialog;
267         
268
269         class Action_Control *actionMouseEnable;
270         class Action_Control *actionHelp_AboutQt;
271
272
273         QActionGroup *actionGroup_DeviceType;
274         QMenu *menuDeviceType;
275         class Action_Control *actionDeviceType[16];
276
277         QActionGroup *actionGroup_DriveType;
278         QMenu *menuDriveType;
279         class Action_Control *actionDriveType[8];
280
281         QActionGroup   *actionGroup_SoundDevice;
282         QMenu *menuSoundDevice;
283         class Action_Control *actionSoundDevice[32]; //
284
285         QActionGroup *actionGroup_PrintDevice;
286         QMenu *menuPrintDevice;
287         class Action_Control *actionPrintDevice[16];
288         // Emulator
289         class Action_Control *action_SetupJoystick;
290         class Action_Control *action_SetupKeyboard;
291         
292         // Menus    
293         QMenu *menuControl;
294         QMenu *menuState;
295         QMenu *menuCopy_Paste;
296         QMenu *menuCpu_Speed;
297         QMenu *menuDebugger;
298         
299         Menu_FDClass *menu_fds[16];
300         QStringList listFDs[16];
301         QStringList listD88[16];
302         
303         Menu_QDClass *menu_QDs[8];
304         
305         Menu_CMTClass *menu_CMT;
306         
307         Menu_CompactDiscClass *menu_CDROM;
308         
309         Menu_CartClass *menu_Cart[8];
310         
311         QMenu *menuLD;
312         QMenu *menuLD_Recent;
313         Menu_BinaryClass *menu_BINs[8];
314         
315         Menu_BubbleClass *menu_bubbles[8];
316         QStringList listBubbles[8];
317         QStringList listB77[8];
318
319         QMenu *menuScreen;
320
321         QMenu *menuStretch_Mode;
322         QMenu *menuScreenSize;
323   
324         QMenu *menuSound;
325         QMenu *menuOutput_Frequency;
326         QMenu *menuSound_Latency;
327         QMenu *menuMachine;
328         QMenu *menuRecord;
329         QMenu *menuRecord_sound;
330         QMenu *menuRecord_as_movie;
331         QMenu *menuEmulator;
332         QMenu *menuHELP;
333         QMenu *menuHelp_Readme;
334         QMenu *menuHelp_Histories;
335         // Status Bar
336         QWidget *dummyStatusArea1;
337         QLabel *messagesStatusBar;
338         QWidget *dummyStatusArea2;
339
340         QLabel *fd_StatusBar[16];
341         QString osd_str_fd[16];
342         
343         QLabel *qd_StatusBar[8];
344         QString osd_str_qd[8];
345         
346         QLabel *cmt_StatusBar;
347         QString osd_str_cmt;
348         
349         QLabel *cdrom_StatusBar;
350         QString osd_str_cdrom;
351         
352         QLabel *laserdisc_StatusBar;
353         QString osd_str_laserdisc;
354         
355         QLabel *bubble_StatusBar[8];
356         QString osd_str_bubble[8];
357         
358         QImage *bitmapImage;
359         
360         bool flags_led[32];
361         bool flags_led_bak[32];
362         QGraphicsView *led_graphicsView;
363         QGraphicsScene *led_gScene;
364         QGraphicsEllipseItem *led_leds[32];
365         uint32_t osd_led_data;
366         
367         QClipboard *ClipBoard;
368
369         // About Status bar
370         int Calc_OSD_Wfactor(void);
371         // Constructor
372         class EmuThreadClass *hRunEmu;
373         class DrawThreadClass *hDrawEmu;
374         class JoyThreadClass *hRunJoy;
375 public:
376         Ui_MainWindowBase(QWidget *parent = 0);
377         ~Ui_MainWindowBase();
378
379         // Initializer : using from InitContext.
380         void setCoreApplication(QApplication *p);
381         void createContextMenu(void);
382         void setupUi(void);
383         virtual void set_window(int mode);
384         // Belows are able to re-implement.
385         virtual void retranslateUi(void);
386         virtual void retranslateUI_Help(void);
387         virtual void retranslateCartMenu(int drv, int basedrv);
388         virtual void retranslateVolumeLabels(Ui_SoundDialog *);
389         virtual void retranslateEmulatorMenu(void);
390         // About Status bar
391         virtual void initStatusBar(void);
392         // EmuThread
393         void StopEmuThread(void);
394         virtual void LaunchEmuThread(void);
395         // JoyThread
396         virtual void StopJoyThread(void);
397         virtual void LaunchJoyThread(void);
398         // Screen
399         virtual void OnWindowResize(void);
400         virtual void OnWindowMove(void);
401         virtual void OnWindowRedraw(void);
402    
403         // Getting important widgets.
404         QMainWindow *getWindow(void) { return MainWindow; }
405         QMenuBar    *getMenuBar(void) { return menubar;}
406         GLDrawClass *getGraphicsView(void) { return graphicsView; }
407         QStatusBar *getStatusBar(void) { return statusbar;}
408         QImage *getBitmapImage(void) { return bitmapImage; }
409         
410         virtual void OnMainWindowClosed(void);
411         // Basic Action Definition
412         void OnCpuPower(int mode);
413         bool get_wave_shaper(void);
414         bool get_direct_load_mzt(void);
415         virtual bool GetPowerState(void);
416    
417         // Basic slots
418 public slots:
419         void delete_emu_thread(void);
420         void doChangeMessage_EmuThread(QString str);
421         void do_emu_update_config(void);
422         virtual void delete_joy_thread(void);
423         virtual void do_set_window_title(QString s);
424         virtual void redraw_status_bar(void);
425 //#ifdef USE_LED_DEVICE
426         virtual void redraw_leds(void);
427         void do_recv_data_led(quint32 d);
428 //#endif
429
430         void do_update_volume(int level);
431         void set_screen_aspect(int num);
432         void set_screen_size(int w, int h);
433         void OnReset(void);
434         void OnSpecialReset(void);
435         virtual void do_set_mouse_enable(bool flag);
436         virtual void do_toggle_mouse(void);
437         void do_set_sound_device(int);
438         void do_emu_update_volume_balance(int num, int level);
439         void do_emu_update_volume_level(int num, int level);
440         
441         void rise_volume_dialog(void);
442
443         void rise_joystick_dialog(void);
444
445         void rise_keyboard_dialog(void);
446
447         void OnLoadState(void);
448         void OnSaveState(void);
449         virtual void OnOpenDebugger(int n);
450         virtual void OnCloseDebugger(void);
451         
452         void set_screen_rotate(bool);
453         void set_crt_filter(bool);
454         void set_gl_crt_filter(bool);
455         void set_cpu_power(int pw) {
456                 OnCpuPower(pw);
457         }
458         virtual void on_actionExit_triggered();
459
460         void OnStartAutoKey(void);
461         void OnStopAutoKey(void);
462         
463         void do_change_osd_fd(int drv, QString tmpstr);
464
465         void eject_cart(int);
466         void set_recent_cart(int, int);
467
468         int set_recent_cdrom(int drv, int num);
469         void do_eject_cdrom(int drv);
470         void do_open_cdrom(int drv, QString path);
471         void do_change_osd_cdrom(QString tmpstr);
472 #if 0
473         int set_recent_laserdisc(int num); 
474         void do_eject_laserdisc(void); 
475         void do_open_laserdisc(QString path);
476         void do_change_osd_laserdisc(QString tmpstr);
477 #endif  
478         void CreateBinaryMenu(int drv, int drv_base);
479         void CreateBinaryPulldownMenu(int drv);
480         void ConfigBinaryMenuSub(int drv);
481         int set_recent_binary_load(int drv, int num);
482         int set_recent_binary_save(int drv, int num);
483         void _open_binary_load(int drive, const QString fname);
484         void _open_binary_save(int drive, const QString fname);
485
486         void open_quick_disk_dialog(int drv);
487         int set_recent_quick_disk(int drive, int num); 
488         int write_protect_Qd(int drv, bool flag);
489         void _open_quick_disk(int drv, const QString fname);
490         void eject_Qd(int drv);
491
492         void do_change_osd_qd(int drv, QString tmpstr);
493
494         virtual void _open_disk(int drv, const QString fname);
495         void _open_cart(int drv, const QString fname);
496         void eject_cmt(void);
497         void do_change_boot_mode(int mode);
498         void do_change_cpu_type(int mode);
499         void do_write_protect_cmt(int drv, bool flag);
500         int  set_recent_cmt(int drv, int num);
501         void set_wave_shaper(bool f);
502 //#if defined(_MZ80A) || defined(_MZ80K) || defined(_MZ1200) || defined(_MZ700) || defined(_MZ800) || defined(_MZ1500) || \
503 //      defined(_MZ80B) || defined(_MZ2000) || defined(_MZ2200)
504         void set_direct_load_from_mzt(bool f);
505 //#endif        
506         void do_open_write_cmt(QString);
507         void do_open_read_cmt(int dummy, QString path);
508         void do_change_osd_cmt(QString tmpstr);
509
510         void do_push_play_tape(void);
511         void do_push_stop_tape(void);
512         void do_display_tape_play(bool flag);
513         void do_push_fast_forward_tape(void);
514         void do_push_rewind_tape(void);
515         void do_push_apss_forward_tape(void);
516         void do_push_apss_rewind_tape(void);
517         void set_cmt_sound(bool);
518
519         int write_protect_fd(int drv, bool flag);
520         void eject_fd(int drv);
521         virtual void do_update_recent_disk(int);
522         virtual int set_d88_slot(int drive, int num);
523         virtual int set_recent_disk(int, int);
524
525         // Bubble Casette
526         int write_protect_bubble(int drv, bool flag);
527
528         virtual int set_b77_slot(int drive, int num);
529         virtual void do_update_recent_bubble(int drv);
530         virtual int set_recent_bubble(int drv, int num);
531         void do_change_osd_bubble(int drv, QString tmpstr);
532
533         virtual void _open_bubble(int drv, const QString fname);
534         virtual void eject_bubble(int drv);
535
536         void start_record_sound(bool rec);
537         void set_freq(int);
538         void set_latency(int);
539         void set_sound_device(int);
540         void set_monitor_type(int);
541         void message_status_bar(QString);
542         void resize_statusbar(int w, int h);
543         virtual void do_release_emu_resources(void);
544         virtual void set_window_title();
545         void set_device_type(int);
546         void set_drive_type(int);
547         void set_scan_line(bool);
548         void set_gl_scan_line_vert(bool);
549         void set_gl_scan_line_horiz(bool);
550         void set_dipsw(int num, bool flag) {
551                 if((num < 0) || (num >= 32)) return;
552                 if(flag) {
553                         config.dipswitch = config.dipswitch | (1 << num);
554                 } else {
555                         config.dipswitch = config.dipswitch & ~(1 << num);
556                 }
557         }
558         bool get_dipsw(int num) {
559                 if((num < 0) || (num >= 32)) return false;
560                 if(((1 << num) & config.dipswitch) == 0) return false;
561                 return true;
562         }
563         void set_printer_device(int);
564         void do_show_about(void);
565         void do_browse_document(QString);
566 signals:
567         int message_changed(QString);
568         int quit_emu_thread();
569         int call_joy_thread(EMU *);
570         int quit_joy_thread();
571         int quit_draw_thread();
572         int on_boot_mode(int);
573         int on_cpu_type(int);
574         int on_cpu_power(int);
575         int on_open_debugger(int);
576         int on_insert_fd(int);
577         int on_eject_fd(int);
578         int do_open_disk(int, QString);
579         int do_recent_cmt(bool);
580         int closed(void);
581         int sig_quit_all(void);
582         int sig_vm_reset(void);
583         int sig_vm_specialreset(void);
584         int sig_vm_loadstate(void);
585         int sig_vm_savestate(void);
586         int sig_check_grab_mouse(bool);
587         int sig_resize_uibar(int, int);
588         int sig_resize_screen(int, int);
589         int sig_update_screen(void);
590         int sig_emu_update_config(void);
591         int sig_emu_start_rec_sound(void);
592         int sig_emu_stop_rec_sound(void);
593         int sig_emu_set_display_size(int, int, int, int);
594         int sig_emu_update_volume_level(int, int);
595         int sig_emu_update_volume_balance(int, int);
596         
597         int sig_write_protect_disk(int drv, bool flag);
598         int sig_open_disk(int, QString, int);
599         int sig_close_disk(int);
600         int sig_play_tape(QString name);
601         int sig_rec_tape(QString name);
602         int sig_close_tape(void);
603         int sig_cmt_push_play(void);
604         int sig_cmt_push_stop(void);
605         int sig_cmt_push_fast_forward(void);
606         int sig_cmt_push_fast_rewind(void);
607         int sig_cmt_push_apss_forward(void);
608         int sig_cmt_push_apss_rewind(void);
609         int sig_write_protect_quickdisk(int drv, bool flag);
610         int sig_close_quickdisk(int drv);
611         int sig_open_quickdisk(int drv, QString path);
612         int sig_close_cart(int drv);
613         int sig_open_cart(int drv, QString path);
614         int sig_open_cdrom(QString path);
615         int sig_close_cdrom(void);
616         int sig_close_laser_disk(void);
617         int sig_open_laser_disk(QString path);
618         int sig_load_binary(int drv, QString path);
619         int sig_save_binary(int drv, QString path);
620         int sig_write_protect_bubble(int, bool);
621         int sig_open_bubble(int, QString , int);
622         int sig_close_bubble(int);
623         int sig_led_update(QRectF);
624         int sig_start_auto_key(QString);
625         int sig_stop_auto_key(void);
626         int quit_debugger_thread(void);
627 };
628 QT_END_NAMESPACE
629
630 #endif