OSDN Git Service

[UI][Qt] More separate to one lib a lot.
[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 *actionClose_Debuggers;
194
195
196         QStringList listCARTs[8];
197
198         QStringList listQDs[8];
199         
200         QStringList listCMT;
201         bool cmt_write_protect;
202         QStringList listCDROM;
203         
204         class Action_Control *actionInsert_LD;
205         class Action_Control *actionEject_LD;
206         QActionGroup   *actionGroup_Opened_LD;
207         class Action_Control *actionRecent_Opened_LD;
208         class Action_Control *action_Recent_List_LD[MAX_HISTORY];
209         QStringList listLaserDisc;
210         
211         QStringList listBINs[8];
212         // Screen
213         class Action_Control *actionZoom;
214         class Action_Control *actionDisplay_Mode;
215
216         class Action_Control *actionScanLine;
217
218         class Action_Control *actionGLScanLineHoriz;
219         class Action_Control *actionGLScanLineVert;
220         class Action_Control *actionRotate;
221
222         class Action_Control *actionCRT_Filter;
223         class Action_Control *actionOpenGL_Filter;
224
225         QActionGroup *actionGroup_Stretch;
226         class Action_Control *actionDot_by_Dot;
227         class Action_Control *actionReferToX_Display;
228         class Action_Control *actionReferToY_Display;
229         class Action_Control *actionFill_Display;
230
231         class Action_Control *actionCapture_Screen;
232
233         QActionGroup *actionGroup_ScreenSize;
234         class Action_Control *actionScreenSize[32]; 
235         class Action_Control *actionAbout;
236         class Action_Control *actionHelp_README_BIOS;
237         class Action_Control *actionHelp_README;
238         class Action_Control *actionHelp_README_QT;
239         class Action_Control *actionHelp_README_MR_TANAM;
240         class Action_Control *actionHelp_README_Artane;
241         class Action_Control *actionHelp_README_FAQ;
242         class Action_Control *actionHelp_README_FAQ_JP;
243         
244         class Action_Control *actionHelp_README_FM7;
245         class Action_Control *actionHelp_README_FM7_JP;
246
247         class Action_Control *actionHelp_History;
248         class Action_Control *actionHelp_History_Relnote;
249         class Action_Control *actionHelp_History_ChangeLog;
250         class Action_Control *actionHelp_History_MR_TANAM;
251
252         class Action_Control *actionHelp_License;
253         class Action_Control *actionHelp_License_JP;
254         
255         
256         QActionGroup   *actionGroup_Sound_Freq;
257         QActionGroup   *actionGroup_Sound_Latency;
258
259         class Action_Control *actionSoundCMT;
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
270         class Action_Control *actionMouseEnable;
271         class Action_Control *actionHelp_AboutQt;
272
273
274         QActionGroup *actionGroup_DeviceType;
275         QMenu *menuDeviceType;
276         class Action_Control *actionDeviceType[16];
277
278         QActionGroup *actionGroup_DriveType;
279         QMenu *menuDriveType;
280         class Action_Control *actionDriveType[8];
281
282         QActionGroup   *actionGroup_SoundDevice;
283         QMenu *menuSoundDevice;
284         class Action_Control *actionSoundDevice[32]; //
285
286         QActionGroup *actionGroup_PrintDevice;
287         QMenu *menuPrintDevice;
288         class Action_Control *actionPrintDevice[16];
289         // Emulator
290         class Action_Control *action_SetupJoystick;
291         class Action_Control *action_SetupKeyboard;
292         
293         // Menus    
294         QMenu *menuControl;
295         QMenu *menuState;
296         QMenu *menuCopy_Paste;
297         QMenu *menuCpu_Speed;
298         QMenu *menuDebugger;
299         
300         Menu_FDClass *menu_fds[16];
301         QStringList listFDs[16];
302         QStringList listD88[16];
303         
304         Menu_QDClass *menu_QDs[8];
305         
306         Menu_CMTClass *menu_CMT;
307         
308         Menu_CompactDiscClass *menu_CDROM;
309         
310         Menu_CartClass *menu_Cart[8];
311         
312         QMenu *menuLD;
313         QMenu *menuLD_Recent;
314         Menu_BinaryClass *menu_BINs[8];
315         
316         Menu_BubbleClass *menu_bubbles[8];
317         QStringList listBubbles[8];
318         QStringList listB77[8];
319
320         QMenu *menuScreen;
321
322         QMenu *menuStretch_Mode;
323         QMenu *menuScreenSize;
324   
325         QMenu *menuSound;
326         QMenu *menuOutput_Frequency;
327         QMenu *menuSound_Latency;
328         QMenu *menuMachine;
329         QMenu *menuRecord;
330         QMenu *menuRecord_sound;
331         QMenu *menuRecord_as_movie;
332         QMenu *menuEmulator;
333         QMenu *menuHELP;
334         QMenu *menuHelp_Readme;
335         QMenu *menuHelp_Histories;
336         // Status Bar
337         QWidget *dummyStatusArea1;
338         QLabel *messagesStatusBar;
339         QWidget *dummyStatusArea2;
340
341         QLabel *fd_StatusBar[16];
342         QString osd_str_fd[16];
343         
344         QLabel *qd_StatusBar[8];
345         QString osd_str_qd[8];
346         
347         QLabel *cmt_StatusBar;
348         QString osd_str_cmt;
349         
350         QLabel *cdrom_StatusBar;
351         QString osd_str_cdrom;
352         
353         QLabel *laserdisc_StatusBar;
354         QString osd_str_laserdisc;
355         
356         QLabel *bubble_StatusBar[8];
357         QString osd_str_bubble[8];
358         
359         QImage *bitmapImage;
360         
361         bool flags_led[32];
362         bool flags_led_bak[32];
363         QGraphicsView *led_graphicsView;
364         QGraphicsScene *led_gScene;
365         QGraphicsEllipseItem *led_leds[32];
366         uint32_t osd_led_data;
367         
368         QClipboard *ClipBoard;
369
370         // About Status bar
371         int Calc_OSD_Wfactor(void);
372         // Constructor
373         class EmuThreadClass *hRunEmu;
374         class DrawThreadClass *hDrawEmu;
375         class JoyThreadClass *hRunJoy;
376 public:
377         Ui_MainWindowBase(QWidget *parent = 0);
378         ~Ui_MainWindowBase();
379
380         // Initializer : using from InitContext.
381         void setCoreApplication(QApplication *p);
382         void createContextMenu(void);
383         void setupUi(void);
384         virtual void set_window(int mode);
385         // Belows are able to re-implement.
386         virtual void retranslateUi(void);
387         virtual void retranslateUI_Help(void);
388         virtual void retranslateCartMenu(int drv, int basedrv);
389         virtual void retranslateVolumeLabels(Ui_SoundDialog *);
390         virtual void retranslateEmulatorMenu(void);
391         // About Status bar
392         virtual void initStatusBar(void);
393         // EmuThread
394         void StopEmuThread(void);
395         virtual void LaunchEmuThread(void);
396         // JoyThread
397         virtual void StopJoyThread(void);
398         virtual void LaunchJoyThread(void);
399         // Screen
400         virtual void OnWindowResize(void);
401         virtual void OnWindowMove(void);
402         virtual void OnWindowRedraw(void);
403    
404         // Getting important widgets.
405         QMainWindow *getWindow(void) { return MainWindow; }
406         QMenuBar    *getMenuBar(void) { return menubar;}
407         GLDrawClass *getGraphicsView(void) { return graphicsView; }
408         QStatusBar *getStatusBar(void) { return statusbar;}
409         QImage *getBitmapImage(void) { return bitmapImage; }
410         
411         virtual void OnMainWindowClosed(void);
412         // Basic Action Definition
413         void OnCpuPower(int mode);
414         bool get_wave_shaper(void);
415         bool get_direct_load_mzt(void);
416         virtual bool GetPowerState(void);
417    
418         // Basic slots
419 public slots:
420         void delete_emu_thread(void);
421         void doChangeMessage_EmuThread(QString str);
422         void do_emu_update_config(void);
423         virtual void delete_joy_thread(void);
424         virtual void do_set_window_title(QString s);
425         virtual void redraw_status_bar(void);
426 //#ifdef USE_LED_DEVICE
427         virtual void redraw_leds(void);
428         void do_recv_data_led(quint32 d);
429 //#endif
430
431         void do_update_volume(int level);
432         void set_screen_aspect(int num);
433         void set_screen_size(int w, int h);
434         void OnReset(void);
435         void OnSpecialReset(void);
436         virtual void do_set_mouse_enable(bool flag);
437         virtual void do_toggle_mouse(void);
438         void do_set_sound_device(int);
439         void do_emu_update_volume_balance(int num, int level);
440         void do_emu_update_volume_level(int num, int level);
441         
442         void rise_volume_dialog(void);
443
444         void rise_joystick_dialog(void);
445
446         void rise_keyboard_dialog(void);
447
448         void OnLoadState(void);
449         void OnSaveState(void);
450         virtual void OnOpenDebugger(int n);
451         virtual void OnCloseDebugger(void);
452         
453         void set_screen_rotate(bool);
454         void set_crt_filter(bool);
455         void set_gl_crt_filter(bool);
456         void set_cpu_power(int pw) {
457                 OnCpuPower(pw);
458         }
459         virtual void on_actionExit_triggered();
460
461         void OnStartAutoKey(void);
462         void OnStopAutoKey(void);
463         
464         void do_change_osd_fd(int drv, QString tmpstr);
465
466         void eject_cart(int);
467         void set_recent_cart(int, int);
468
469         int set_recent_cdrom(int drv, int num);
470         void do_eject_cdrom(int drv);
471         void do_open_cdrom(int drv, QString path);
472         void do_change_osd_cdrom(QString tmpstr);
473 #if 0
474         int set_recent_laserdisc(int num); 
475         void do_eject_laserdisc(void); 
476         void do_open_laserdisc(QString path);
477         void do_change_osd_laserdisc(QString tmpstr);
478 #endif  
479         void CreateBinaryMenu(int drv, int drv_base);
480         void CreateBinaryPulldownMenu(int drv);
481         void ConfigBinaryMenuSub(int drv);
482         int set_recent_binary_load(int drv, int num);
483         int set_recent_binary_save(int drv, int num);
484         void _open_binary_load(int drive, const QString fname);
485         void _open_binary_save(int drive, const QString fname);
486
487         void open_quick_disk_dialog(int drv);
488         int set_recent_quick_disk(int drive, int num); 
489         int write_protect_Qd(int drv, bool flag);
490         void _open_quick_disk(int drv, const QString fname);
491         void eject_Qd(int drv);
492
493         void do_change_osd_qd(int drv, QString tmpstr);
494
495         virtual void _open_disk(int drv, const QString fname);
496         void _open_cart(int drv, const QString fname);
497         void eject_cmt(void);
498         void do_change_boot_mode(int mode);
499         void do_change_cpu_type(int mode);
500         void do_write_protect_cmt(int drv, bool flag);
501         int  set_recent_cmt(int drv, int num);
502         void set_wave_shaper(bool f);
503 //#if defined(_MZ80A) || defined(_MZ80K) || defined(_MZ1200) || defined(_MZ700) || defined(_MZ800) || defined(_MZ1500) || \
504 //      defined(_MZ80B) || defined(_MZ2000) || defined(_MZ2200)
505         void set_direct_load_from_mzt(bool f);
506 //#endif        
507         void do_open_write_cmt(QString);
508         void do_open_read_cmt(int dummy, QString path);
509         void do_change_osd_cmt(QString tmpstr);
510
511         void do_push_play_tape(void);
512         void do_push_stop_tape(void);
513         void do_display_tape_play(bool flag);
514         void do_push_fast_forward_tape(void);
515         void do_push_rewind_tape(void);
516         void do_push_apss_forward_tape(void);
517         void do_push_apss_rewind_tape(void);
518         void set_cmt_sound(bool);
519
520         int write_protect_fd(int drv, bool flag);
521         void eject_fd(int drv);
522         virtual void do_update_recent_disk(int);
523         virtual int set_d88_slot(int drive, int num);
524         virtual int set_recent_disk(int, int);
525
526         // Bubble Casette
527         int write_protect_bubble(int drv, bool flag);
528
529         virtual int set_b77_slot(int drive, int num);
530         virtual void do_update_recent_bubble(int drv);
531         virtual int set_recent_bubble(int drv, int num);
532         void do_change_osd_bubble(int drv, QString tmpstr);
533
534         virtual void _open_bubble(int drv, const QString fname);
535         virtual void eject_bubble(int drv);
536
537         void start_record_sound(bool rec);
538         void set_freq(int);
539         void set_latency(int);
540         void set_sound_device(int);
541         void set_monitor_type(int);
542         void message_status_bar(QString);
543         void resize_statusbar(int w, int h);
544         virtual void do_release_emu_resources(void);
545         virtual void set_window_title();
546         void set_device_type(int);
547         void set_drive_type(int);
548         void set_scan_line(bool);
549         void set_gl_scan_line_vert(bool);
550         void set_gl_scan_line_horiz(bool);
551         void set_dipsw(int num, bool flag) {
552                 if((num < 0) || (num >= 32)) return;
553                 if(flag) {
554                         config.dipswitch = config.dipswitch | (1 << num);
555                 } else {
556                         config.dipswitch = config.dipswitch & ~(1 << num);
557                 }
558         }
559         bool get_dipsw(int num) {
560                 if((num < 0) || (num >= 32)) return false;
561                 if(((1 << num) & config.dipswitch) == 0) return false;
562                 return true;
563         }
564         void set_printer_device(int);
565         void do_show_about(void);
566         void do_browse_document(QString);
567 signals:
568         int message_changed(QString);
569         int quit_emu_thread();
570         int call_joy_thread(EMU *);
571         int quit_joy_thread();
572         int quit_draw_thread();
573         int on_boot_mode(int);
574         int on_cpu_type(int);
575         int on_cpu_power(int);
576         int on_open_debugger(int);
577         int on_insert_fd(int);
578         int on_eject_fd(int);
579         int do_open_disk(int, QString);
580         int do_recent_cmt(bool);
581         int closed(void);
582         int sig_quit_all(void);
583         int sig_vm_reset(void);
584         int sig_vm_specialreset(void);
585         int sig_vm_loadstate(void);
586         int sig_vm_savestate(void);
587         int sig_check_grab_mouse(bool);
588         int sig_resize_uibar(int, int);
589         int sig_resize_screen(int, int);
590         int sig_update_screen(void);
591         int sig_emu_update_config(void);
592         int sig_emu_start_rec_sound(void);
593         int sig_emu_stop_rec_sound(void);
594         int sig_emu_set_display_size(int, int, int, int);
595         int sig_emu_update_volume_level(int, int);
596         int sig_emu_update_volume_balance(int, int);
597         
598         int sig_write_protect_disk(int drv, bool flag);
599         int sig_open_disk(int, QString, int);
600         int sig_close_disk(int);
601         int sig_play_tape(QString name);
602         int sig_rec_tape(QString name);
603         int sig_close_tape(void);
604         int sig_cmt_push_play(void);
605         int sig_cmt_push_stop(void);
606         int sig_cmt_push_fast_forward(void);
607         int sig_cmt_push_fast_rewind(void);
608         int sig_cmt_push_apss_forward(void);
609         int sig_cmt_push_apss_rewind(void);
610         int sig_write_protect_quickdisk(int drv, bool flag);
611         int sig_close_quickdisk(int drv);
612         int sig_open_quickdisk(int drv, QString path);
613         int sig_close_cart(int drv);
614         int sig_open_cart(int drv, QString path);
615         int sig_open_cdrom(QString path);
616         int sig_close_cdrom(void);
617         int sig_close_laser_disk(void);
618         int sig_open_laser_disk(QString path);
619         int sig_load_binary(int drv, QString path);
620         int sig_save_binary(int drv, QString path);
621         int sig_write_protect_bubble(int, bool);
622         int sig_open_bubble(int, QString , int);
623         int sig_close_bubble(int);
624         int sig_led_update(QRectF);
625         int sig_start_auto_key(QString);
626         int sig_stop_auto_key(void);
627         int quit_debugger_thread(void);
628 };
629 QT_END_NAMESPACE
630
631 #endif