OSDN Git Service

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