OSDN Git Service

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