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
12 #include <QApplication>
13 #include <QMainWindow>
16 #include <QStringList>
22 #include "menu_flags.h"
23 #include "csp_logger.h"
25 class DLL_PREFIX_I MOVIE_SAVER;
28 #define _MAX_DEBUGGER 8
31 CSP_MAINWIDGET_SAVE_MOVIE_STOP = 0,
32 CSP_MAINWIDGET_SAVE_MOVIE_15FPS = 1,
33 CSP_MAINWIDGET_SAVE_MOVIE_24FPS,
34 CSP_MAINWIDGET_SAVE_MOVIE_30FPS,
35 CSP_MAINWIDGET_SAVE_MOVIE_60FPS,
36 CSP_MAINWIDGET_SAVE_MOVIE_END,
39 #define MAX_RENDER_PLATFORMS 8
42 RENDER_PLATFORMS_OPENGL3_MAIN = 0,
43 RENDER_PLATFORMS_OPENGL2_MAIN,
44 RENDER_PLATFORMS_OPENGL_CORE,
62 class QGraphicsEllipseItem;
76 class Menu_BinaryClass;
77 class Menu_BubbleClass;
78 class Menu_CompactDiscClass;
79 class Menu_LaserdiscClass;
83 class DLL_PREFIX Ui_MainWindowBase : public QMainWindow
87 USING_FLAGS *using_flags;
89 CSP_Logger *csp_logger;
90 QMainWindow *MainWindow;
91 QApplication *CoreApplication;
93 CSP_DockDisks *driveData;
94 //QVBoxLayout *sidebarLayout;
96 GLDrawClass *graphicsView;
97 QWidget *pCentralWidget;
98 QVBoxLayout *pCentralLayout;
99 QStatusBar *statusbar;
101 QTimer *statusUpdateTimer;
103 QTimer *ledUpdateTimer;
105 int screen_mode_count;
110 QIcon RecordSoundIcon;
113 QIcon VolumeMutedIcon;
116 QIcon VolumeHighIcon;
118 void ConfigCpuSpeed(void);
119 void ConfigControlMenu(void);
120 void connectActions_ControlMenu(void);
121 void retranslateControlMenu(const char *SpecialResetTitle, bool WithSpecialReset);
122 void ConfigFloppyMenu(void);
123 void ConfigSoundMenu(void);
124 void CreateSoundMenu(void);
126 void CreateEmulatorMenu(void);
127 void ConfigEmulatorMenu(void);
129 void CreateFloppyMenu(int drv, int drv_base);
130 void CreateFloppyPulldownMenu(int drv);
131 void ConfigFloppyMenuSub(int drv);
132 void retranslateFloppyMenu(int drv, int basedrv);
135 void CreateBubbleMenu(int drv, int drv_base);
136 void CreateBubblePulldownMenu(int drv);
137 void ConfigBubbleMenuSub(int drv);
138 void retranslateBubbleMenu(int drv, int basedrv);
139 void ConfigBubbleMenu(void);
141 void CreateCMTMenu(int drive);
142 void retranslateCMTMenu(int drive);
143 void ConfigCMTMenu(void);
145 void ConfigQuickDiskMenu(void);
146 void retranslateQuickDiskMenu(int drv, int basedrv);
147 void ConfigQuickDiskMenuSub(int drv);
148 void CreateQuickDiskPulldownMenu(int drv);
149 void CreateQuickDiskMenu(int drv, int drv_base);
151 void CreateCartMenu(int drv, int drv_base);
152 void CreateCartPulldownMenu(int drv);
153 void ConfigCartMenuSub(int drv);
154 void ConfigCartMenu(void);
156 void CreateCDROMMenu(void);
157 void ConfigCDROMMenu(void);
158 void ConfigCDROMMenuSub(void);
159 void CreateCDROMPulldownMenu(void);
160 void retranslateCDROMMenu(void);
162 void CreateLaserdiscMenu(void);
163 void ConfigLaserdiscMenu(void);
164 void ConfigLaserdiscMenuSub(void);
165 void CreateLaserdiscPulldownMenu(void);
166 void retranslateLaserdiscMenu(void);
168 void ConfigBinaryMenu(void);
169 void retranslateBinaryMenu(int drv, int basedrv);
171 void retranslateSoundMenu(void);
173 void ConfigScreenMenu(void);
174 void ConfigScreenMenu_List(void);
175 void CreateScreenMenu(void);
176 void ConfigDeviceType(void);
177 void ConfigKeyboardType(void);
178 void ConfigJoystickType(void);
179 void ConfigMouseType(void);
180 void ConfigDriveType(void);
181 void ConfigSoundDeviceType(void);
182 void ConfigPrinterType(void);
184 void retranslateScreenMenu(void);
185 void retranslateMachineMenu(void);
187 class Action_Control *actionReset;
188 class Action_Control *actionSpecial_Reset;
189 class Action_Control *actionExit_Emulator;
192 QActionGroup *actionGroup_CpuType;
194 class Action_Control *actionCpuType[8];
195 void ConfigCPUTypes(int num);
197 QActionGroup *actionGroup_CpuSpeed;
198 class Action_Control *actionSpeed_x1;
199 class Action_Control *actionSpeed_x2;
200 class Action_Control *actionSpeed_x4;
201 class Action_Control *actionSpeed_x8;
202 class Action_Control *actionSpeed_x16;
206 QActionGroup *actionGroup_BootMode;
208 class Action_Control *actionBootMode[8];
209 void ConfigCPUBootMode(int num);
211 class Action_Control *actionPaste_from_Clipboard;
212 class Action_Control *actionStop_Pasting;
214 class Action_Control *actionSave_State[10];
215 class Action_Control *actionLoad_State[10];
216 QMenu *menuSave_State;
217 QMenu *menuLoad_State;
219 class Action_Control *actionDebugger[_MAX_DEBUGGER];
220 //class Action_Control *actionClose_Debuggers;
223 QStringList listCARTs[8];
225 QStringList listQDs[8];
227 QStringList listCMT[8];
228 bool cmt_write_protect[8];
229 QStringList listCDROM;
230 QStringList listLaserdisc;
231 QStringList listBINs[8];
233 class Action_Control *actionZoom;
234 class Action_Control *actionDisplay_Mode;
236 class Action_Control *actionScanLine;
238 class Action_Control *actionGLScanLineHoriz;
239 class Action_Control *actionGLScanLineVert;
240 class Action_Control *actionRotate;
242 class Action_Control *actionCRT_Filter;
243 class Action_Control *actionOpenGL_Filter;
245 QActionGroup *actionGroup_Stretch;
246 class Action_Control *actionDot_by_Dot;
247 class Action_Control *actionReferToX_Display;
248 class Action_Control *actionReferToY_Display;
249 class Action_Control *actionFill_Display;
251 class Action_Control *actionCapture_Screen;
253 QActionGroup *actionGroup_ScreenSize;
254 class Action_Control *actionScreenSize[32];
256 QActionGroup *actionGroup_RenderMode;
257 class Action_Control *action_SetRenderMode[8];
259 class Action_Control *actionAbout;
260 class Action_Control *actionHelp_README_BIOS;
261 class Action_Control *actionHelp_README;
262 class Action_Control *actionHelp_README_QT;
263 class Action_Control *actionHelp_README_MR_TANAM;
264 class Action_Control *actionHelp_README_Artane;
265 class Action_Control *actionHelp_README_Umaiboux;
266 class Action_Control *actionHelp_README_FAQ;
267 class Action_Control *actionHelp_README_FAQ_JP;
269 class Action_Control *actionHelp_README_FM7;
270 class Action_Control *actionHelp_README_FM7_JP;
272 class Action_Control *actionHelp_History;
273 class Action_Control *actionHelp_History_Relnote;
274 class Action_Control *actionHelp_History_ChangeLog;
275 class Action_Control *actionHelp_History_MR_TANAM;
277 class Action_Control *actionHelp_License;
278 class Action_Control *actionHelp_License_JP;
281 QActionGroup *actionGroup_Sound_Freq;
282 QActionGroup *actionGroup_Sound_Latency;
284 //class Action_Control *actionSoundCMT;
286 class Action_Control *action_Freq[8];
287 class Action_Control *action_Latency[6];
288 class Action_Control *actionStart_Record;
289 class Action_Control *actionStop_Record;
290 class Action_Control *actionStart_Record_Movie;
291 class Action_Control *actionStop_Record_Movie;
292 class Action_Control *action_VolumeDialog;
293 class Action_Control *actionSoundStrictRendering;
295 class Action_Control *actionMouseEnable;
296 class Action_Control *actionHelp_AboutQt;
299 QActionGroup *actionGroup_DeviceType;
300 QMenu *menuDeviceType;
301 class Action_Control *actionDeviceType[16];
303 QActionGroup *actionGroup_KeyboardType;
304 QMenu *menuKeyboardType;
305 class Action_Control *actionKeyboardType[16];
307 QActionGroup *actionGroup_JoystickType;
308 QMenu *menuJoystickType;
309 class Action_Control *actionJoystickType[16];
311 QActionGroup *actionGroup_MouseType;
312 QMenu *menuMouseType;
313 class Action_Control *actionMouseType[8];
315 QActionGroup *actionGroup_DriveType;
316 QMenu *menuDriveType;
317 class Action_Control *actionDriveType[8];
319 QActionGroup *actionGroup_SoundDevice;
320 QMenu *menuSoundDevice;
321 class Action_Control *actionSoundDevice[32]; //
323 QActionGroup *actionGroup_PrintDevice;
324 QMenu *menuPrintDevice;
325 class Action_Control *actionPrintDevice[16];
327 class Action_Control *action_SetupJoystick;
328 class Action_Control *action_SetupKeyboard;
329 class Action_Control *action_LogView;
331 class Action_Control *action_SoundFilesFDD;
332 class Action_Control *action_SoundFilesRelay;
333 //QMenu *menuLogToConsole;
334 //QMenu *menuLogToSyslog;
335 QMenu *menuDevLogToConsole;
336 QMenu *menuDevLogToSyslog;
337 QMenu *menu_SetRenderPlatform;
339 class Action_Control *action_SetRenderPlatform[MAX_RENDER_PLATFORMS];
340 QActionGroup *actionGroup_SetRenderPlatform;
342 class Action_Control *action_DispVirtualMedias;
343 class Action_Control *action_UseRomaKana;
344 class Action_Control *action_LogToSyslog;
345 class Action_Control *action_LogToConsole;
346 class Action_Control *action_LogRecord;
347 class Action_Control *action_DevLogToSyslog[CSP_LOG_TYPE_VM_DEVICE_END - CSP_LOG_TYPE_VM_DEVICE_0 + 1];
348 class Action_Control *action_DevLogToConsole[CSP_LOG_TYPE_VM_DEVICE_END - CSP_LOG_TYPE_VM_DEVICE_0 + 1];
349 class Action_Control *action_DevLogRecord[CSP_LOG_TYPE_VM_DEVICE_END - CSP_LOG_TYPE_VM_DEVICE_0 + 1];
351 class Action_Control *action_SetupMovie; // 15, 24, 30, 60
357 QMenu *menuCopy_Paste;
358 QMenu *menuCpu_Speed;
361 Menu_FDClass *menu_fds[16];
362 QStringList listFDs[16];
363 QStringList listD88[16];
365 Menu_QDClass *menu_QDs[8];
367 Menu_CMTClass *menu_CMT[8];
369 Menu_CompactDiscClass *menu_CDROM;
370 Menu_LaserdiscClass *menu_Laserdisc;
371 Menu_CartClass *menu_Cart[8];
372 Menu_BinaryClass *menu_BINs[8];
373 Menu_BubbleClass *menu_bubbles[8];
375 QStringList listBubbles[8];
376 QStringList listB77[8];
380 QMenu *menuStretch_Mode;
381 QMenu *menuScreenSize;
382 QMenu *menuScreen_Render;
385 QMenu *menuOutput_Frequency;
386 QMenu *menuSound_Latency;
389 QMenu *menuRecord_sound;
390 QMenu *menuRecord_as_movie;
393 QMenu *menuHelp_Readme;
394 QMenu *menuHelp_Histories;
396 QWidget *dummyStatusArea1;
397 QLabel *messagesStatusBar;
398 QWidget *dummyStatusArea2;
400 QLabel *cdrom_StatusBar;
401 QString osd_str_cdrom;
403 QLabel *laserdisc_StatusBar;
404 QString osd_str_laserdisc;
406 QLabel *bubble_StatusBar[8];
407 QString osd_str_bubble[8];
412 bool flags_led_bak[32];
413 QGraphicsView *led_graphicsView;
414 QGraphicsScene *led_gScene;
415 QGraphicsEllipseItem *led_leds[32];
416 uint32_t osd_led_data;
418 QClipboard *ClipBoard;
421 int Calc_OSD_Wfactor(void);
423 EmuThreadClass *hRunEmu;
424 class DrawThreadClass *hDrawEmu;
425 class JoyThreadClass *hRunJoy;
426 class MOVIE_SAVER *hSaveMovieThread;
429 bool ui_retranslate_completed;
431 Ui_MainWindowBase(USING_FLAGS *p, CSP_Logger *logger, QWidget *parent = 0);
432 ~Ui_MainWindowBase();
434 // Initializer : using from InitContext.
435 void setCoreApplication(QApplication *p);
436 void createContextMenu(void);
438 virtual void set_window(int mode);
439 // Belows are able to re-implement.
440 virtual void retranslateUi(void);
441 virtual void retranslateUI_Help(void);
442 virtual void retranslateCartMenu(int drv, int basedrv);
443 virtual void retranslateVolumeLabels(Ui_SoundDialog *);
444 virtual void retranslateEmulatorMenu(void);
445 virtual void retranselateUi_Depended_OSD(void);
447 virtual void initStatusBar(void);
449 void StopEmuThread(void);
450 virtual void LaunchEmuThread(void);
452 virtual void StopJoyThread(void);
453 virtual void LaunchJoyThread(void);
455 virtual void OnWindowResize(void);
456 virtual void OnWindowMove(void);
457 virtual void OnWindowRedraw(void);
459 // Getting important widgets.
460 QMainWindow *getWindow(void) { return MainWindow; }
461 QMenuBar *getMenuBar(void) { return menubar;}
462 GLDrawClass *getGraphicsView(void) { return graphicsView; }
463 QStatusBar *getStatusBar(void) { return statusbar;}
464 QImage *getBitmapImage(void) { return bitmapImage; }
466 virtual void OnMainWindowClosed(void);
467 // Basic Action Definition
468 void OnCpuPower(int mode);
469 bool get_wave_shaper(int drive);
470 bool get_direct_load_mzt(int drive);
471 virtual bool GetPowerState(void);
472 void set_logger(CSP_Logger *logger) { csp_logger = logger; }
475 void delete_emu_thread(void);
476 void doChangeMessage_EmuThread(QString str);
477 void do_emu_update_config(void);
478 virtual void delete_joy_thread(void);
479 virtual void do_set_window_title(QString s);
480 virtual void redraw_status_bar(void);
481 virtual void redraw_leds(void);
482 void do_recv_data_led(quint32 d);
484 void do_update_volume(int level);
485 void set_screen_aspect(int num);
486 void set_screen_size(int w, int h);
488 void OnSpecialReset(void);
489 virtual void do_set_mouse_enable(bool flag);
490 virtual void do_toggle_mouse(void);
491 void do_set_sound_device(int);
492 void do_emu_update_volume_balance(int num, int level);
493 void do_emu_update_volume_level(int num, int level);
494 void rise_log_viewer(void);
496 void rise_volume_dialog(void);
498 void rise_joystick_dialog(void);
500 void rise_keyboard_dialog(void);
501 virtual void rise_movie_dialog(void);
502 void do_stop_saving_movie(void);
503 void do_start_saving_movie(void);
504 void do_set_state_saving_movie(bool state);
506 virtual void OnOpenDebugger(int n);
507 virtual void OnCloseDebugger(void);
509 void set_screen_rotate(bool);
510 void set_gl_crt_filter(bool);
511 void set_cpu_power(int pw) {
514 virtual void on_actionExit_triggered();
516 void OnStartAutoKey(void);
517 void OnStopAutoKey(void);
520 void eject_cart(int);
521 void set_recent_cart(int, int);
523 int set_recent_cdrom(int drv, int num);
524 void do_eject_cdrom(int drv);
525 void do_open_cdrom(int drv, QString path);
527 int set_recent_laserdisc(int drv, int num);
528 void do_eject_laserdisc(int drv);
529 void do_open_laserdisc(int drv, QString path);
531 void CreateBinaryMenu(int drv, int drv_base);
532 void CreateBinaryPulldownMenu(int drv);
533 void ConfigBinaryMenuSub(int drv);
534 int set_recent_binary_load(int drv, int num);
535 int set_recent_binary_save(int drv, int num);
536 void _open_binary_load(int drive, const QString fname);
537 void _open_binary_save(int drive, const QString fname);
539 void open_quick_disk_dialog(int drv);
540 int set_recent_quick_disk(int drive, int num);
541 int write_protect_Qd(int drv, bool flag);
542 void _open_quick_disk(int drv, const QString fname);
543 void eject_Qd(int drv);
546 virtual void _open_disk(int drv, const QString fname);
547 void _open_cart(int drv, const QString fname);
548 void eject_cmt(int drv);
549 void do_change_boot_mode(int mode);
550 void do_change_cpu_type(int mode);
551 void do_write_protect_cmt(int drv, bool flag);
552 int set_recent_cmt(int drv, int num);
553 void set_wave_shaper(int drive, bool f);
554 void set_direct_load_from_mzt(int drive, bool f);
555 void do_open_write_cmt(int drive, QString);
556 void do_open_read_cmt(int drive, QString path);
558 void do_push_play_tape(int drive);
559 void do_push_stop_tape(int drive);
560 void do_push_fast_forward_tape(int drive);
561 void do_push_rewind_tape(int drive);
562 void do_push_apss_forward_tape(int drive);
563 void do_push_apss_rewind_tape(int drive);
564 void set_cmt_sound(bool);
566 int write_protect_fd(int drv, bool flag);
567 void eject_fd(int drv);
568 virtual void do_update_recent_disk(int);
569 virtual int set_d88_slot(int drive, int num);
570 virtual int set_recent_disk(int, int);
573 int write_protect_bubble(int drv, bool flag);
575 virtual int set_b77_slot(int drive, int num);
576 virtual void do_update_recent_bubble(int drv);
577 virtual int set_recent_bubble(int drv, int num);
579 virtual void _open_bubble(int drv, const QString fname);
580 virtual void eject_bubble(int drv);
582 void start_record_sound(bool rec);
584 void set_latency(int);
585 void set_sound_device(int);
586 void do_set_sound_strict_rendering(bool f);
588 void set_monitor_type(int);
589 void message_status_bar(QString);
590 void resize_statusbar(int w, int h);
591 virtual void do_release_emu_resources(void);
592 virtual void set_window_title();
593 void set_device_type(int);
594 void set_mouse_type(int);
595 void set_keyboard_type(int);
596 void set_joystick_type(int);
597 void set_drive_type(int);
598 void set_scan_line(bool);
599 void set_gl_scan_line_vert(bool);
600 void set_gl_scan_line_horiz(bool);
601 void set_printer_device(int);
602 void do_show_about(void);
603 void do_browse_document(QString);
604 void set_dipsw(int num, bool flag);
605 bool get_dipsw(int num);
607 void do_set_sound_files_fdd(bool f);
608 void do_set_sound_files_relay(bool f);
609 void do_set_conslog(bool);
610 void do_set_syslog(bool);
611 void do_update_device_node_name(int id, const _TCHAR *name);
612 void do_set_dev_log_to_console(int id, bool f);
613 void do_set_dev_log_to_syslog(int id, bool f);
614 void do_set_roma_kana(bool f);
615 void do_set_render_mode_std(void);
616 void do_set_render_mode_tv(void);
617 void do_select_render_platform(int num);
618 void do_set_visible_virtual_medias(bool f);
620 int message_changed(QString);
621 int quit_emu_thread();
622 int call_joy_thread(EMU *);
623 int quit_joy_thread();
624 int quit_draw_thread();
625 int sig_quit_movie_thread();
626 int sig_stop_saving_movie(void);
627 int sig_start_saving_movie(void);
628 int on_boot_mode(int);
629 int on_cpu_type(int);
630 int on_cpu_power(int);
631 int on_open_debugger(int);
632 int on_insert_fd(int);
633 int on_eject_fd(int);
634 int do_open_disk(int, QString);
636 int sig_quit_all(void);
637 int sig_vm_reset(void);
638 int sig_vm_specialreset(void);
639 int sig_check_grab_mouse(bool);
640 int sig_resize_uibar(int, int);
641 int sig_resize_screen(int, int);
642 int sig_update_screen(void);
643 int sig_emu_update_config(void);
644 int sig_emu_start_rec_sound(void);
645 int sig_emu_stop_rec_sound(void);
646 int sig_emu_set_display_size(int, int, int, int);
647 int sig_emu_update_volume_level(int, int);
648 int sig_emu_update_volume_balance(int, int);
650 int sig_write_protect_disk(int drv, bool flag);
651 int sig_open_disk(int, QString, int);
652 int sig_close_disk(int);
653 int sig_play_tape(int ,QString);
654 int sig_rec_tape(int, QString);
655 int sig_close_tape(int);
656 int sig_cmt_push_play(int);
657 int sig_cmt_push_stop(int);
658 int sig_cmt_push_fast_forward(int);
659 int sig_cmt_push_fast_rewind(int);
660 int sig_cmt_push_apss_forward(int);
661 int sig_cmt_push_apss_rewind(int);
662 int sig_write_protect_quickdisk(int drv, bool flag);
663 int sig_close_quickdisk(int drv);
664 int sig_open_quickdisk(int drv, QString path);
665 int sig_close_cart(int drv);
666 int sig_open_cart(int drv, QString path);
667 int sig_open_cdrom(QString path);
668 int sig_close_cdrom(void);
669 int sig_close_laserdisc(void);
670 int sig_open_laserdisc(QString path);
671 int sig_load_binary(int drv, QString path);
672 int sig_save_binary(int drv, QString path);
673 int sig_write_protect_bubble(int, bool);
674 int sig_open_bubble(int, QString , int);
675 int sig_close_bubble(int);
676 int sig_led_update(QRectF);
677 int sig_start_auto_key(QString);
678 int sig_stop_auto_key(void);
680 int quit_debugger_thread(void);
681 int sig_quit_widgets(void);
683 int sig_load_state(QString);
684 int sig_save_state(QString);