OSDN Git Service

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