3 * Modified by K.Ohta <whatisthis.sowhat _at_ gmail.com>
4 * Please use this file as templete.
7 #ifndef _CSP_QT_MAINWIDGET_BASE_H
8 #define _CSP_QT_MAINWIDGET_BASE_H
13 #include <QApplication>
14 #include <QButtonGroup>
15 #include <QGraphicsView>
16 #include <QHeaderView>
17 #include <QMainWindow>
24 #include <QGraphicsEllipseItem>
25 #include <QStringList>
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>
43 #include "simd_types.h"
46 #include "menu_flags.h"
53 #define _MAX_DEBUGGER 8
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,
74 class Menu_BinaryClass;
75 class Menu_BubbleClass;
76 class Menu_CompactDiscClass;
77 class Menu_LaserdiscClass;
81 class DLL_PREFIX Ui_MainWindowBase : public QMainWindow
85 USING_FLAGS *using_flags;
87 QMainWindow *MainWindow;
88 QApplication *CoreApplication;
90 QWidget *centralwidget;
91 GLDrawClass *graphicsView;
92 QStatusBar *statusbar;
94 QTimer *statusUpdateTimer;
96 QTimer *ledUpdateTimer;
98 int screen_mode_count;
103 QIcon RecordSoundIcon;
106 QIcon VolumeMutedIcon;
109 QIcon VolumeHighIcon;
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);
119 void CreateEmulatorMenu(void);
120 void ConfigEmulatorMenu(void);
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);
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);
134 void CreateCMTMenu(void);
135 void CreateCMTPulldownMenu(void);
136 void ConfigCMTMenuSub(void);
137 void retranslateCMTMenu(void);
138 void ConfigCMTMenu(void);
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);
146 void CreateCartMenu(int drv, int drv_base);
147 void CreateCartPulldownMenu(int drv);
148 void ConfigCartMenuSub(int drv);
149 void ConfigCartMenu(void);
151 void CreateCDROMMenu(void);
152 void ConfigCDROMMenu(void);
153 void ConfigCDROMMenuSub(void);
154 void CreateCDROMPulldownMenu(void);
155 void retranslateCDROMMenu(void);
157 void CreateLaserdiscMenu(void);
158 void ConfigLaserdiscMenu(void);
159 void ConfigLaserdiscMenuSub(void);
160 void CreateLaserdiscPulldownMenu(void);
161 void retranslateLaserdiscMenu(void);
163 void ConfigBinaryMenu(void);
164 void retranslateBinaryMenu(int drv, int basedrv);
166 void retranslateSoundMenu(void);
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);
176 void retranslateScreenMenu(void);
177 void retranslateMachineMenu(void);
179 class Action_Control *actionReset;
180 class Action_Control *actionSpecial_Reset;
181 class Action_Control *actionExit_Emulator;
184 QActionGroup *actionGroup_CpuType;
186 class Action_Control *actionCpuType[8];
187 void ConfigCPUTypes(int num);
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;
198 QActionGroup *actionGroup_BootMode;
200 class Action_Control *actionBootMode[8];
201 void ConfigCPUBootMode(int num);
203 class Action_Control *actionPaste_from_Clipboard;
204 class Action_Control *actionStop_Pasting;
206 class Action_Control *actionSave_State;
207 class Action_Control *actionLoad_State;
209 class Action_Control *actionDebugger[_MAX_DEBUGGER];
210 //class Action_Control *actionClose_Debuggers;
213 QStringList listCARTs[8];
215 QStringList listQDs[8];
218 bool cmt_write_protect;
219 QStringList listCDROM;
220 QStringList listLaserdisc;
221 QStringList listBINs[8];
223 class Action_Control *actionZoom;
224 class Action_Control *actionDisplay_Mode;
226 class Action_Control *actionScanLine;
228 class Action_Control *actionGLScanLineHoriz;
229 class Action_Control *actionGLScanLineVert;
230 class Action_Control *actionRotate;
232 class Action_Control *actionCRT_Filter;
233 class Action_Control *actionOpenGL_Filter;
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;
241 class Action_Control *actionCapture_Screen;
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;
254 class Action_Control *actionHelp_README_FM7;
255 class Action_Control *actionHelp_README_FM7_JP;
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;
262 class Action_Control *actionHelp_License;
263 class Action_Control *actionHelp_License_JP;
266 QActionGroup *actionGroup_Sound_Freq;
267 QActionGroup *actionGroup_Sound_Latency;
269 class Action_Control *actionSoundCMT;
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;
280 class Action_Control *actionMouseEnable;
281 class Action_Control *actionHelp_AboutQt;
284 QActionGroup *actionGroup_DeviceType;
285 QMenu *menuDeviceType;
286 class Action_Control *actionDeviceType[16];
288 QActionGroup *actionGroup_DriveType;
289 QMenu *menuDriveType;
290 class Action_Control *actionDriveType[8];
292 QActionGroup *actionGroup_SoundDevice;
293 QMenu *menuSoundDevice;
294 class Action_Control *actionSoundDevice[32]; //
296 QActionGroup *actionGroup_PrintDevice;
297 QMenu *menuPrintDevice;
298 class Action_Control *actionPrintDevice[16];
300 class Action_Control *action_SetupJoystick;
301 class Action_Control *action_SetupKeyboard;
302 class Action_Control *action_LogView;
304 QMenu *menuLogToConsole;
305 QMenu *menuLogToSyslog;
306 QMenu *menuDevLogToConsole;
307 QMenu *menuDevLogToSyslog;
309 class Action_Control *action_LogToSyslog;
310 class Action_Control *action_LogToConsole;
311 class Action_Control *action_LogRecord;
312 class Action_Control *action_DevLogToSyslog[256 - 32];
313 class Action_Control *action_DevLogToConsole[256 - 32];
314 class Action_Control *action_DevLogRecord[256 - 32];
316 class Action_Control *action_SetupMovie; // 15, 24, 30, 60
321 QMenu *menuCopy_Paste;
322 QMenu *menuCpu_Speed;
325 Menu_FDClass *menu_fds[16];
326 QStringList listFDs[16];
327 QStringList listD88[16];
329 Menu_QDClass *menu_QDs[8];
331 Menu_CMTClass *menu_CMT;
333 Menu_CompactDiscClass *menu_CDROM;
334 Menu_LaserdiscClass *menu_Laserdisc;
335 Menu_CartClass *menu_Cart[8];
336 Menu_BinaryClass *menu_BINs[8];
337 Menu_BubbleClass *menu_bubbles[8];
339 QStringList listBubbles[8];
340 QStringList listB77[8];
344 QMenu *menuStretch_Mode;
345 QMenu *menuScreenSize;
348 QMenu *menuOutput_Frequency;
349 QMenu *menuSound_Latency;
352 QMenu *menuRecord_sound;
353 QMenu *menuRecord_as_movie;
356 QMenu *menuHelp_Readme;
357 QMenu *menuHelp_Histories;
359 QWidget *dummyStatusArea1;
360 QLabel *messagesStatusBar;
361 QWidget *dummyStatusArea2;
363 QLabel *fd_StatusBar[16];
364 QString osd_str_fd[16];
366 QLabel *qd_StatusBar[8];
367 QString osd_str_qd[8];
369 QLabel *cmt_StatusBar;
372 QLabel *cdrom_StatusBar;
373 QString osd_str_cdrom;
375 QLabel *laserdisc_StatusBar;
376 QString osd_str_laserdisc;
378 QLabel *bubble_StatusBar[8];
379 QString osd_str_bubble[8];
384 bool flags_led_bak[32];
385 QGraphicsView *led_graphicsView;
386 QGraphicsScene *led_gScene;
387 QGraphicsEllipseItem *led_leds[32];
388 uint32_t osd_led_data;
390 QClipboard *ClipBoard;
393 int Calc_OSD_Wfactor(void);
395 class EmuThreadClass *hRunEmu;
396 class DrawThreadClass *hDrawEmu;
397 class JoyThreadClass *hRunJoy;
398 class MOVIE_SAVER *hSaveMovieThread;
401 bool ui_retranslate_completed;
403 Ui_MainWindowBase(USING_FLAGS *p, QWidget *parent = 0);
404 ~Ui_MainWindowBase();
406 // Initializer : using from InitContext.
407 void setCoreApplication(QApplication *p);
408 void createContextMenu(void);
410 virtual void set_window(int mode);
411 // Belows are able to re-implement.
412 virtual void retranslateUi(void);
413 virtual void retranslateUI_Help(void);
414 virtual void retranslateCartMenu(int drv, int basedrv);
415 virtual void retranslateVolumeLabels(Ui_SoundDialog *);
416 virtual void retranslateEmulatorMenu(void);
418 virtual void initStatusBar(void);
420 void StopEmuThread(void);
421 virtual void LaunchEmuThread(void);
423 virtual void StopJoyThread(void);
424 virtual void LaunchJoyThread(void);
426 virtual void OnWindowResize(void);
427 virtual void OnWindowMove(void);
428 virtual void OnWindowRedraw(void);
430 // Getting important widgets.
431 QMainWindow *getWindow(void) { return MainWindow; }
432 QMenuBar *getMenuBar(void) { return menubar;}
433 GLDrawClass *getGraphicsView(void) { return graphicsView; }
434 QStatusBar *getStatusBar(void) { return statusbar;}
435 QImage *getBitmapImage(void) { return bitmapImage; }
437 virtual void OnMainWindowClosed(void);
438 // Basic Action Definition
439 void OnCpuPower(int mode);
440 bool get_wave_shaper(void);
441 bool get_direct_load_mzt(void);
442 virtual bool GetPowerState(void);
446 void delete_emu_thread(void);
447 void doChangeMessage_EmuThread(QString str);
448 void do_emu_update_config(void);
449 virtual void delete_joy_thread(void);
450 virtual void do_set_window_title(QString s);
451 virtual void redraw_status_bar(void);
452 virtual void redraw_leds(void);
453 void do_recv_data_led(quint32 d);
455 void do_update_volume(int level);
456 void set_screen_aspect(int num);
457 void set_screen_size(int w, int h);
459 void OnSpecialReset(void);
460 virtual void do_set_mouse_enable(bool flag);
461 virtual void do_toggle_mouse(void);
462 void do_set_sound_device(int);
463 void do_emu_update_volume_balance(int num, int level);
464 void do_emu_update_volume_level(int num, int level);
465 void rise_log_viewer(void);
467 void rise_volume_dialog(void);
469 void rise_joystick_dialog(void);
471 void rise_keyboard_dialog(void);
472 virtual void rise_movie_dialog(void);
473 void do_stop_saving_movie(void);
474 void do_start_saving_movie(void);
475 void do_set_state_saving_movie(bool state);
476 void OnLoadState(void);
477 void OnSaveState(void);
480 virtual void OnOpenDebugger(int n);
481 virtual void OnCloseDebugger(void);
483 void set_screen_rotate(bool);
484 void set_crt_filter(bool);
485 void set_gl_crt_filter(bool);
486 void set_cpu_power(int pw) {
489 virtual void on_actionExit_triggered();
491 void OnStartAutoKey(void);
492 void OnStopAutoKey(void);
494 void do_change_osd_fd(int drv, QString tmpstr);
496 void eject_cart(int);
497 void set_recent_cart(int, int);
499 int set_recent_cdrom(int drv, int num);
500 void do_eject_cdrom(int drv);
501 void do_open_cdrom(int drv, QString path);
502 void do_change_osd_cdrom(QString tmpstr);
504 int set_recent_laserdisc(int drv, int num);
505 void do_eject_laserdisc(int drv);
506 void do_open_laserdisc(int drv, QString path);
507 void do_change_osd_laserdisc(QString tmpstr);
509 void CreateBinaryMenu(int drv, int drv_base);
510 void CreateBinaryPulldownMenu(int drv);
511 void ConfigBinaryMenuSub(int drv);
512 int set_recent_binary_load(int drv, int num);
513 int set_recent_binary_save(int drv, int num);
514 void _open_binary_load(int drive, const QString fname);
515 void _open_binary_save(int drive, const QString fname);
517 void open_quick_disk_dialog(int drv);
518 int set_recent_quick_disk(int drive, int num);
519 int write_protect_Qd(int drv, bool flag);
520 void _open_quick_disk(int drv, const QString fname);
521 void eject_Qd(int drv);
523 void do_change_osd_qd(int drv, QString tmpstr);
525 virtual void _open_disk(int drv, const QString fname);
526 void _open_cart(int drv, const QString fname);
527 void eject_cmt(void);
528 void do_change_boot_mode(int mode);
529 void do_change_cpu_type(int mode);
530 void do_write_protect_cmt(int drv, bool flag);
531 int set_recent_cmt(int drv, int num);
532 void set_wave_shaper(bool f);
533 //#if defined(_MZ80A) || defined(_MZ80K) || defined(_MZ1200) || defined(_MZ700) || defined(_MZ800) || defined(_MZ1500) || \
534 // defined(_MZ80B) || defined(_MZ2000) || defined(_MZ2200)
535 void set_direct_load_from_mzt(bool f);
537 void do_open_write_cmt(QString);
538 void do_open_read_cmt(int dummy, QString path);
539 void do_change_osd_cmt(QString tmpstr);
541 void do_push_play_tape(void);
542 void do_push_stop_tape(void);
543 void do_display_tape_play(bool flag);
544 void do_push_fast_forward_tape(void);
545 void do_push_rewind_tape(void);
546 void do_push_apss_forward_tape(void);
547 void do_push_apss_rewind_tape(void);
548 void set_cmt_sound(bool);
550 int write_protect_fd(int drv, bool flag);
551 void eject_fd(int drv);
552 virtual void do_update_recent_disk(int);
553 virtual int set_d88_slot(int drive, int num);
554 virtual int set_recent_disk(int, int);
557 int write_protect_bubble(int drv, bool flag);
559 virtual int set_b77_slot(int drive, int num);
560 virtual void do_update_recent_bubble(int drv);
561 virtual int set_recent_bubble(int drv, int num);
562 void do_change_osd_bubble(int drv, QString tmpstr);
564 virtual void _open_bubble(int drv, const QString fname);
565 virtual void eject_bubble(int drv);
567 void start_record_sound(bool rec);
569 void set_latency(int);
570 void set_sound_device(int);
571 void set_monitor_type(int);
572 void message_status_bar(QString);
573 void resize_statusbar(int w, int h);
574 virtual void do_release_emu_resources(void);
575 virtual void set_window_title();
576 void set_device_type(int);
577 void set_drive_type(int);
578 void set_scan_line(bool);
579 void set_gl_scan_line_vert(bool);
580 void set_gl_scan_line_horiz(bool);
581 void set_dipsw(int num, bool flag) {
582 if((num < 0) || (num >= 32)) return;
584 using_flags->get_config_ptr()->dipswitch = using_flags->get_config_ptr()->dipswitch | (1 << num);
586 using_flags->get_config_ptr()->dipswitch = using_flags->get_config_ptr()->dipswitch & ~(1 << num);
589 bool get_dipsw(int num) {
590 if((num < 0) || (num >= 32)) return false;
591 if(((1 << num) & using_flags->get_config_ptr()->dipswitch) == 0) return false;
594 void set_printer_device(int);
595 void do_show_about(void);
596 void do_browse_document(QString);
597 void do_set_conslog(bool);
598 void do_set_syslog(bool);
599 void do_update_device_node_name(int id, const _TCHAR *name);
600 void do_set_dev_log_to_console(int id, bool f);
603 int message_changed(QString);
604 int quit_emu_thread();
605 int call_joy_thread(EMU *);
606 int quit_joy_thread();
607 int quit_draw_thread();
608 int sig_quit_movie_thread();
609 int sig_stop_saving_movie(void);
610 int sig_start_saving_movie(void);
611 int on_boot_mode(int);
612 int on_cpu_type(int);
613 int on_cpu_power(int);
614 int on_open_debugger(int);
615 int on_insert_fd(int);
616 int on_eject_fd(int);
617 int do_open_disk(int, QString);
618 int do_recent_cmt(bool);
620 int sig_quit_all(void);
621 int sig_vm_reset(void);
622 int sig_vm_specialreset(void);
623 int sig_vm_loadstate(void);
624 int sig_vm_savestate(void);
625 int sig_check_grab_mouse(bool);
626 int sig_resize_uibar(int, int);
627 int sig_resize_screen(int, int);
628 int sig_update_screen(void);
629 int sig_emu_update_config(void);
630 int sig_emu_start_rec_sound(void);
631 int sig_emu_stop_rec_sound(void);
632 int sig_emu_set_display_size(int, int, int, int);
633 int sig_emu_update_volume_level(int, int);
634 int sig_emu_update_volume_balance(int, int);
636 int sig_write_protect_disk(int drv, bool flag);
637 int sig_open_disk(int, QString, int);
638 int sig_close_disk(int);
639 int sig_play_tape(QString name);
640 int sig_rec_tape(QString name);
641 int sig_close_tape(void);
642 int sig_cmt_push_play(void);
643 int sig_cmt_push_stop(void);
644 int sig_cmt_push_fast_forward(void);
645 int sig_cmt_push_fast_rewind(void);
646 int sig_cmt_push_apss_forward(void);
647 int sig_cmt_push_apss_rewind(void);
648 int sig_write_protect_quickdisk(int drv, bool flag);
649 int sig_close_quickdisk(int drv);
650 int sig_open_quickdisk(int drv, QString path);
651 int sig_close_cart(int drv);
652 int sig_open_cart(int drv, QString path);
653 int sig_open_cdrom(QString path);
654 int sig_close_cdrom(void);
655 int sig_close_laserdisc(void);
656 int sig_open_laserdisc(QString path);
657 int sig_load_binary(int drv, QString path);
658 int sig_save_binary(int drv, QString path);
659 int sig_write_protect_bubble(int, bool);
660 int sig_open_bubble(int, QString , int);
661 int sig_close_bubble(int);
662 int sig_led_update(QRectF);
663 int sig_start_auto_key(QString);
664 int sig_stop_auto_key(void);
666 int quit_debugger_thread(void);
667 int sig_quit_widgets(void);