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 QStatusBar *statusbar;
99 QTimer *statusUpdateTimer;
101 QTimer *ledUpdateTimer;
103 int screen_mode_count;
108 QIcon RecordSoundIcon;
111 QIcon VolumeMutedIcon;
114 QIcon VolumeHighIcon;
116 void ConfigCpuSpeed(void);
117 void ConfigControlMenu(void);
118 void connectActions_ControlMenu(void);
119 void retranslateControlMenu(const char *SpecialResetTitle, bool WithSpecialReset);
120 void ConfigFloppyMenu(void);
121 void ConfigSoundMenu(void);
122 void CreateSoundMenu(void);
124 void CreateEmulatorMenu(void);
125 void ConfigEmulatorMenu(void);
127 void CreateFloppyMenu(int drv, int drv_base);
128 void CreateFloppyPulldownMenu(int drv);
129 void ConfigFloppyMenuSub(int drv);
130 void retranslateFloppyMenu(int drv, int basedrv);
133 void CreateBubbleMenu(int drv, int drv_base);
134 void CreateBubblePulldownMenu(int drv);
135 void ConfigBubbleMenuSub(int drv);
136 void retranslateBubbleMenu(int drv, int basedrv);
137 void ConfigBubbleMenu(void);
139 void CreateCMTMenu(int drive);
140 void retranslateCMTMenu(int drive);
141 void ConfigCMTMenu(void);
143 void ConfigQuickDiskMenu(void);
144 void retranslateQuickDiskMenu(int drv, int basedrv);
145 void ConfigQuickDiskMenuSub(int drv);
146 void CreateQuickDiskPulldownMenu(int drv);
147 void CreateQuickDiskMenu(int drv, int drv_base);
149 void CreateCartMenu(int drv, int drv_base);
150 void CreateCartPulldownMenu(int drv);
151 void ConfigCartMenuSub(int drv);
152 void ConfigCartMenu(void);
154 void CreateCDROMMenu(void);
155 void ConfigCDROMMenu(void);
156 void ConfigCDROMMenuSub(void);
157 void CreateCDROMPulldownMenu(void);
158 void retranslateCDROMMenu(void);
160 void CreateLaserdiscMenu(void);
161 void ConfigLaserdiscMenu(void);
162 void ConfigLaserdiscMenuSub(void);
163 void CreateLaserdiscPulldownMenu(void);
164 void retranslateLaserdiscMenu(void);
166 void ConfigBinaryMenu(void);
167 void retranslateBinaryMenu(int drv, int basedrv);
169 void retranslateSoundMenu(void);
171 void ConfigScreenMenu(void);
172 void ConfigScreenMenu_List(void);
173 void CreateScreenMenu(void);
174 void ConfigDeviceType(void);
175 void ConfigMouseType(void);
176 void ConfigDriveType(void);
177 void ConfigSoundDeviceType(void);
178 void ConfigPrinterType(void);
180 void retranslateScreenMenu(void);
181 void retranslateMachineMenu(void);
183 class Action_Control *actionReset;
184 class Action_Control *actionSpecial_Reset;
185 class Action_Control *actionExit_Emulator;
188 QActionGroup *actionGroup_CpuType;
190 class Action_Control *actionCpuType[8];
191 void ConfigCPUTypes(int num);
193 QActionGroup *actionGroup_CpuSpeed;
194 class Action_Control *actionSpeed_x1;
195 class Action_Control *actionSpeed_x2;
196 class Action_Control *actionSpeed_x4;
197 class Action_Control *actionSpeed_x8;
198 class Action_Control *actionSpeed_x16;
202 QActionGroup *actionGroup_BootMode;
204 class Action_Control *actionBootMode[8];
205 void ConfigCPUBootMode(int num);
207 class Action_Control *actionPaste_from_Clipboard;
208 class Action_Control *actionStop_Pasting;
210 class Action_Control *actionSave_State[10];
211 class Action_Control *actionLoad_State[10];
212 QMenu *menuSave_State;
213 QMenu *menuLoad_State;
215 class Action_Control *actionDebugger[_MAX_DEBUGGER];
216 //class Action_Control *actionClose_Debuggers;
219 QStringList listCARTs[8];
221 QStringList listQDs[8];
223 QStringList listCMT[8];
224 bool cmt_write_protect[8];
225 QStringList listCDROM;
226 QStringList listLaserdisc;
227 QStringList listBINs[8];
229 class Action_Control *actionZoom;
230 class Action_Control *actionDisplay_Mode;
232 class Action_Control *actionScanLine;
234 class Action_Control *actionGLScanLineHoriz;
235 class Action_Control *actionGLScanLineVert;
236 class Action_Control *actionRotate;
238 class Action_Control *actionCRT_Filter;
239 class Action_Control *actionOpenGL_Filter;
241 QActionGroup *actionGroup_Stretch;
242 class Action_Control *actionDot_by_Dot;
243 class Action_Control *actionReferToX_Display;
244 class Action_Control *actionReferToY_Display;
245 class Action_Control *actionFill_Display;
247 class Action_Control *actionCapture_Screen;
249 QActionGroup *actionGroup_ScreenSize;
250 class Action_Control *actionScreenSize[32];
252 QActionGroup *actionGroup_RenderMode;
253 class Action_Control *action_SetRenderMode[8];
255 class Action_Control *actionAbout;
256 class Action_Control *actionHelp_README_BIOS;
257 class Action_Control *actionHelp_README;
258 class Action_Control *actionHelp_README_QT;
259 class Action_Control *actionHelp_README_MR_TANAM;
260 class Action_Control *actionHelp_README_Artane;
261 class Action_Control *actionHelp_README_Umaiboux;
262 class Action_Control *actionHelp_README_FAQ;
263 class Action_Control *actionHelp_README_FAQ_JP;
265 class Action_Control *actionHelp_README_FM7;
266 class Action_Control *actionHelp_README_FM7_JP;
268 class Action_Control *actionHelp_History;
269 class Action_Control *actionHelp_History_Relnote;
270 class Action_Control *actionHelp_History_ChangeLog;
271 class Action_Control *actionHelp_History_MR_TANAM;
273 class Action_Control *actionHelp_License;
274 class Action_Control *actionHelp_License_JP;
277 QActionGroup *actionGroup_Sound_Freq;
278 QActionGroup *actionGroup_Sound_Latency;
280 //class Action_Control *actionSoundCMT;
282 class Action_Control *action_Freq[8];
283 class Action_Control *action_Latency[6];
284 class Action_Control *actionStart_Record;
285 class Action_Control *actionStop_Record;
286 class Action_Control *actionStart_Record_Movie;
287 class Action_Control *actionStop_Record_Movie;
288 class Action_Control *action_VolumeDialog;
289 class Action_Control *actionSoundStrictRendering;
291 class Action_Control *actionMouseEnable;
292 class Action_Control *actionHelp_AboutQt;
295 QActionGroup *actionGroup_DeviceType;
296 QMenu *menuDeviceType;
297 class Action_Control *actionDeviceType[16];
299 QActionGroup *actionGroup_MouseType;
300 QMenu *menuMouseType;
301 class Action_Control *actionMouseType[8];
303 QActionGroup *actionGroup_DriveType;
304 QMenu *menuDriveType;
305 class Action_Control *actionDriveType[8];
307 QActionGroup *actionGroup_SoundDevice;
308 QMenu *menuSoundDevice;
309 class Action_Control *actionSoundDevice[32]; //
311 QActionGroup *actionGroup_PrintDevice;
312 QMenu *menuPrintDevice;
313 class Action_Control *actionPrintDevice[16];
315 class Action_Control *action_SetupJoystick;
316 class Action_Control *action_SetupKeyboard;
317 class Action_Control *action_LogView;
319 class Action_Control *action_SoundFilesFDD;
320 class Action_Control *action_SoundFilesRelay;
321 //QMenu *menuLogToConsole;
322 //QMenu *menuLogToSyslog;
323 QMenu *menuDevLogToConsole;
324 QMenu *menuDevLogToSyslog;
325 QMenu *menu_SetRenderPlatform;
327 class Action_Control *action_SetRenderPlatform[MAX_RENDER_PLATFORMS];
328 QActionGroup *actionGroup_SetRenderPlatform;
330 class Action_Control *action_UseRomaKana;
331 class Action_Control *action_LogToSyslog;
332 class Action_Control *action_LogToConsole;
333 class Action_Control *action_LogRecord;
334 class Action_Control *action_DevLogToSyslog[CSP_LOG_TYPE_VM_DEVICE_END - CSP_LOG_TYPE_VM_DEVICE_0 + 1];
335 class Action_Control *action_DevLogToConsole[CSP_LOG_TYPE_VM_DEVICE_END - CSP_LOG_TYPE_VM_DEVICE_0 + 1];
336 class Action_Control *action_DevLogRecord[CSP_LOG_TYPE_VM_DEVICE_END - CSP_LOG_TYPE_VM_DEVICE_0 + 1];
338 class Action_Control *action_SetupMovie; // 15, 24, 30, 60
344 QMenu *menuCopy_Paste;
345 QMenu *menuCpu_Speed;
348 Menu_FDClass *menu_fds[16];
349 QStringList listFDs[16];
350 QStringList listD88[16];
352 Menu_QDClass *menu_QDs[8];
354 Menu_CMTClass *menu_CMT[8];
356 Menu_CompactDiscClass *menu_CDROM;
357 Menu_LaserdiscClass *menu_Laserdisc;
358 Menu_CartClass *menu_Cart[8];
359 Menu_BinaryClass *menu_BINs[8];
360 Menu_BubbleClass *menu_bubbles[8];
362 QStringList listBubbles[8];
363 QStringList listB77[8];
367 QMenu *menuStretch_Mode;
368 QMenu *menuScreenSize;
369 QMenu *menuScreen_Render;
372 QMenu *menuOutput_Frequency;
373 QMenu *menuSound_Latency;
376 QMenu *menuRecord_sound;
377 QMenu *menuRecord_as_movie;
380 QMenu *menuHelp_Readme;
381 QMenu *menuHelp_Histories;
383 QWidget *dummyStatusArea1;
384 QLabel *messagesStatusBar;
385 QWidget *dummyStatusArea2;
387 QLabel *cdrom_StatusBar;
388 QString osd_str_cdrom;
390 QLabel *laserdisc_StatusBar;
391 QString osd_str_laserdisc;
393 QLabel *bubble_StatusBar[8];
394 QString osd_str_bubble[8];
399 bool flags_led_bak[32];
400 QGraphicsView *led_graphicsView;
401 QGraphicsScene *led_gScene;
402 QGraphicsEllipseItem *led_leds[32];
403 uint32_t osd_led_data;
405 QClipboard *ClipBoard;
408 int Calc_OSD_Wfactor(void);
410 EmuThreadClass *hRunEmu;
411 class DrawThreadClass *hDrawEmu;
412 class JoyThreadClass *hRunJoy;
413 class MOVIE_SAVER *hSaveMovieThread;
416 bool ui_retranslate_completed;
418 Ui_MainWindowBase(USING_FLAGS *p, CSP_Logger *logger, QWidget *parent = 0);
419 ~Ui_MainWindowBase();
421 // Initializer : using from InitContext.
422 void setCoreApplication(QApplication *p);
423 void createContextMenu(void);
425 virtual void set_window(int mode);
426 // Belows are able to re-implement.
427 virtual void retranslateUi(void);
428 virtual void retranslateUI_Help(void);
429 virtual void retranslateCartMenu(int drv, int basedrv);
430 virtual void retranslateVolumeLabels(Ui_SoundDialog *);
431 virtual void retranslateEmulatorMenu(void);
432 virtual void retranselateUi_Depended_OSD(void);
434 virtual void initStatusBar(void);
436 void StopEmuThread(void);
437 virtual void LaunchEmuThread(void);
439 virtual void StopJoyThread(void);
440 virtual void LaunchJoyThread(void);
442 virtual void OnWindowResize(void);
443 virtual void OnWindowMove(void);
444 virtual void OnWindowRedraw(void);
446 // Getting important widgets.
447 QMainWindow *getWindow(void) { return MainWindow; }
448 QMenuBar *getMenuBar(void) { return menubar;}
449 GLDrawClass *getGraphicsView(void) { return graphicsView; }
450 QStatusBar *getStatusBar(void) { return statusbar;}
451 QImage *getBitmapImage(void) { return bitmapImage; }
453 virtual void OnMainWindowClosed(void);
454 // Basic Action Definition
455 void OnCpuPower(int mode);
456 bool get_wave_shaper(int drive);
457 bool get_direct_load_mzt(int drive);
458 virtual bool GetPowerState(void);
459 void set_logger(CSP_Logger *logger) { csp_logger = logger; }
462 void delete_emu_thread(void);
463 void doChangeMessage_EmuThread(QString str);
464 void do_emu_update_config(void);
465 virtual void delete_joy_thread(void);
466 virtual void do_set_window_title(QString s);
467 virtual void redraw_status_bar(void);
468 virtual void redraw_leds(void);
469 void do_recv_data_led(quint32 d);
471 void do_update_volume(int level);
472 void set_screen_aspect(int num);
473 void set_screen_size(int w, int h);
475 void OnSpecialReset(void);
476 virtual void do_set_mouse_enable(bool flag);
477 virtual void do_toggle_mouse(void);
478 void do_set_sound_device(int);
479 void do_emu_update_volume_balance(int num, int level);
480 void do_emu_update_volume_level(int num, int level);
481 void rise_log_viewer(void);
483 void rise_volume_dialog(void);
485 void rise_joystick_dialog(void);
487 void rise_keyboard_dialog(void);
488 virtual void rise_movie_dialog(void);
489 void do_stop_saving_movie(void);
490 void do_start_saving_movie(void);
491 void do_set_state_saving_movie(bool state);
493 virtual void OnOpenDebugger(int n);
494 virtual void OnCloseDebugger(void);
496 void set_screen_rotate(bool);
497 void set_gl_crt_filter(bool);
498 void set_cpu_power(int pw) {
501 virtual void on_actionExit_triggered();
503 void OnStartAutoKey(void);
504 void OnStopAutoKey(void);
507 void eject_cart(int);
508 void set_recent_cart(int, int);
510 int set_recent_cdrom(int drv, int num);
511 void do_eject_cdrom(int drv);
512 void do_open_cdrom(int drv, QString path);
514 int set_recent_laserdisc(int drv, int num);
515 void do_eject_laserdisc(int drv);
516 void do_open_laserdisc(int drv, QString path);
518 void CreateBinaryMenu(int drv, int drv_base);
519 void CreateBinaryPulldownMenu(int drv);
520 void ConfigBinaryMenuSub(int drv);
521 int set_recent_binary_load(int drv, int num);
522 int set_recent_binary_save(int drv, int num);
523 void _open_binary_load(int drive, const QString fname);
524 void _open_binary_save(int drive, const QString fname);
526 void open_quick_disk_dialog(int drv);
527 int set_recent_quick_disk(int drive, int num);
528 int write_protect_Qd(int drv, bool flag);
529 void _open_quick_disk(int drv, const QString fname);
530 void eject_Qd(int drv);
533 virtual void _open_disk(int drv, const QString fname);
534 void _open_cart(int drv, const QString fname);
535 void eject_cmt(int drv);
536 void do_change_boot_mode(int mode);
537 void do_change_cpu_type(int mode);
538 void do_write_protect_cmt(int drv, bool flag);
539 int set_recent_cmt(int drv, int num);
540 void set_wave_shaper(int drive, bool f);
541 void set_direct_load_from_mzt(int drive, bool f);
542 void do_open_write_cmt(int drive, QString);
543 void do_open_read_cmt(int drive, QString path);
545 void do_push_play_tape(int drive);
546 void do_push_stop_tape(int drive);
547 void do_push_fast_forward_tape(int drive);
548 void do_push_rewind_tape(int drive);
549 void do_push_apss_forward_tape(int drive);
550 void do_push_apss_rewind_tape(int drive);
551 void set_cmt_sound(bool);
553 int write_protect_fd(int drv, bool flag);
554 void eject_fd(int drv);
555 virtual void do_update_recent_disk(int);
556 virtual int set_d88_slot(int drive, int num);
557 virtual int set_recent_disk(int, int);
560 int write_protect_bubble(int drv, bool flag);
562 virtual int set_b77_slot(int drive, int num);
563 virtual void do_update_recent_bubble(int drv);
564 virtual int set_recent_bubble(int drv, int num);
566 virtual void _open_bubble(int drv, const QString fname);
567 virtual void eject_bubble(int drv);
569 void start_record_sound(bool rec);
571 void set_latency(int);
572 void set_sound_device(int);
573 void do_set_sound_strict_rendering(bool f);
575 void set_monitor_type(int);
576 void message_status_bar(QString);
577 void resize_statusbar(int w, int h);
578 virtual void do_release_emu_resources(void);
579 virtual void set_window_title();
580 void set_device_type(int);
581 void set_mouse_type(int);
582 void set_drive_type(int);
583 void set_scan_line(bool);
584 void set_gl_scan_line_vert(bool);
585 void set_gl_scan_line_horiz(bool);
586 void set_printer_device(int);
587 void do_show_about(void);
588 void do_browse_document(QString);
589 void set_dipsw(int num, bool flag);
590 bool get_dipsw(int num);
592 void do_set_sound_files_fdd(bool f);
593 void do_set_sound_files_relay(bool f);
594 void do_set_conslog(bool);
595 void do_set_syslog(bool);
596 void do_update_device_node_name(int id, const _TCHAR *name);
597 void do_set_dev_log_to_console(int id, bool f);
598 void do_set_dev_log_to_syslog(int id, bool f);
599 void do_set_roma_kana(bool f);
600 void do_set_render_mode_std(void);
601 void do_set_render_mode_tv(void);
602 void do_select_render_platform(int num);
605 int message_changed(QString);
606 int quit_emu_thread();
607 int call_joy_thread(EMU *);
608 int quit_joy_thread();
609 int quit_draw_thread();
610 int sig_quit_movie_thread();
611 int sig_stop_saving_movie(void);
612 int sig_start_saving_movie(void);
613 int on_boot_mode(int);
614 int on_cpu_type(int);
615 int on_cpu_power(int);
616 int on_open_debugger(int);
617 int on_insert_fd(int);
618 int on_eject_fd(int);
619 int do_open_disk(int, QString);
621 int sig_quit_all(void);
622 int sig_vm_reset(void);
623 int sig_vm_specialreset(void);
624 int sig_check_grab_mouse(bool);
625 int sig_resize_uibar(int, int);
626 int sig_resize_screen(int, int);
627 int sig_update_screen(void);
628 int sig_emu_update_config(void);
629 int sig_emu_start_rec_sound(void);
630 int sig_emu_stop_rec_sound(void);
631 int sig_emu_set_display_size(int, int, int, int);
632 int sig_emu_update_volume_level(int, int);
633 int sig_emu_update_volume_balance(int, int);
635 int sig_write_protect_disk(int drv, bool flag);
636 int sig_open_disk(int, QString, int);
637 int sig_close_disk(int);
638 int sig_play_tape(int ,QString);
639 int sig_rec_tape(int, QString);
640 int sig_close_tape(int);
641 int sig_cmt_push_play(int);
642 int sig_cmt_push_stop(int);
643 int sig_cmt_push_fast_forward(int);
644 int sig_cmt_push_fast_rewind(int);
645 int sig_cmt_push_apss_forward(int);
646 int sig_cmt_push_apss_rewind(int);
647 int sig_write_protect_quickdisk(int drv, bool flag);
648 int sig_close_quickdisk(int drv);
649 int sig_open_quickdisk(int drv, QString path);
650 int sig_close_cart(int drv);
651 int sig_open_cart(int drv, QString path);
652 int sig_open_cdrom(QString path);
653 int sig_close_cdrom(void);
654 int sig_close_laserdisc(void);
655 int sig_open_laserdisc(QString path);
656 int sig_load_binary(int drv, QString path);
657 int sig_save_binary(int drv, QString path);
658 int sig_write_protect_bubble(int, bool);
659 int sig_open_bubble(int, QString , int);
660 int sig_close_bubble(int);
661 int sig_led_update(QRectF);
662 int sig_start_auto_key(QString);
663 int sig_stop_auto_key(void);
665 int quit_debugger_thread(void);
666 int sig_quit_widgets(void);
668 int sig_load_state(QString);
669 int sig_save_state(QString);