1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3 
4 #include "ipc.h"
5 #include "searchwidget.h"
6 #include "cemuopts.h"
7 #include "lcdwidget.h"
8 #include "romselection.h"
9 #include "emuthread.h"
10 #include "keyhistorywidget.h"
11 #include "dockwidget.h"
12 #include "datawidget.h"
13 #include "keypad/qtkeypadbridge.h"
14 #include "debugger/hexwidget.h"
15 #include "debugger/disasm.h"
16 #include "capture/animated-png.h"
17 #include "../../core/vat.h"
18 #include "../../core/debug/debug.h"
19 
20 #include <QtWidgets/QProgressBar>
21 #include <QtWidgets/QShortcut>
22 #include <QtWidgets/QMainWindow>
23 #include <QtWidgets/QLabel>
24 #include <QtWidgets/QTableWidgetItem>
25 #include <QtWidgets/QPlainTextEdit>
26 #include <QtWidgets/QFileDialog>
27 #include <QtCore/QSettings>
28 #include <QtCore/QTimer>
29 #include <QtGui/QTextCursor>
30 #include <QtGui/QFont>
31 #include <QtWidgets/QMessageBox>
32 #include <QtCore/QTranslator>
33 #include <QtCore/QStandardPaths>
34 
35 #ifdef PNG_WRITE_APNG_SUPPORTED
36 class RecordingThread : public QThread {
37     Q_OBJECT
38 protected:
39     virtual void run() Q_DECL_OVERRIDE;
40 public:
41     QString m_filename;
42     bool m_optimize;
43 signals:
44     void done();
45 };
46 #endif
47 
48 namespace Ui { class MainWindow; }
49 
50 class MainWindow : public QMainWindow {
51     Q_OBJECT
52 
53 public:
54     explicit MainWindow(CEmuOpts &opts, QWidget *p = Q_NULLPTR);
55     ~MainWindow() Q_DECL_OVERRIDE;
56     void setup();
57     bool isInitialized();
58     bool isReload();
59     bool isResetAll();
60 
61 signals:
62     void setLcdFrameskip(int value);
63     void setLcdMode(bool spi);
64 
65 protected:
66     virtual void changeEvent(QEvent* event) Q_DECL_OVERRIDE;
67     virtual void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE;
68     virtual bool eventFilter(QObject *obj, QEvent *event) Q_DECL_OVERRIDE;
69     virtual void showEvent(QShowEvent *event) Q_DECL_OVERRIDE;
70     virtual void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
71     virtual void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE;
72     virtual void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE;
73 
74 private:
75     enum {
76         CONSOLE_ESC,
77         CONSOLE_BRACKET,
78         CONSOLE_PARSE,
79         CONSOLE_BGCOLOR,
80         CONSOLE_FGCOLOR,
81         CONSOLE_EQUALS,
82         CONSOLE_ENDVAL
83     };
84 
85     enum {
86         BREAK_REMOVE_COL,
87         BREAK_ENABLE_COL,
88         BREAK_ADDR_COL,
89         BREAK_NAME_COL
90     };
91 
92     enum {
93         WATCH_REMOVE_COL,
94         WATCH_READ_COL,
95         WATCH_WRITE_COL,
96         WATCH_LOW_COL,
97         WATCH_HIGH_COL,
98         WATCH_NAME_COL,
99     };
100 
101     enum {
102         PORT_REMOVE_COL,
103         PORT_READ_COL,
104         PORT_WRITE_COL,
105         PORT_FREEZE_COL,
106         PORT_ADDR_COL,
107         PORT_VALUE_COL,
108     };
109 
110     enum {
111         OP_ADDR_COL,
112         OP_NUMBER_COL,
113         OP_DATA_COL,
114         OP_STRING_COL,
115         OP_VALUE_COL
116     };
117 
118     enum {
119         FP_ADDR_COL,
120         FP_DATA_COL,
121         FP_STRING_COL,
122         FP_VALUE_COL
123     };
124 
125     enum {
126         OPS_ADDR_COL,
127         OPS_DATA_COL,
128         OPS_STRING_COL
129     };
130 
131     enum {
132         VAT_ADDR_COL,
133         VAT_VAT_ADDR_COL,
134         VAT_SIZE_COL,
135         VAT_NAME_COL,
136         VAT_TYPE_COL
137     };
138 
139     enum {
140         VAR_NAME_COL,
141         VAR_LOCATION_COL,
142         VAR_TYPE_COL,
143         VAR_SIZE_COL,
144         VAR_PREVIEW_COL
145     };
146 
147     enum {
148         RECENT_REMOVE_COL,
149         RECENT_RESEND_COL,
150         RECENT_SELECT_COL,
151         RECENT_PATH_COL
152     };
153 
154     enum {
155         SLOT_REMOVE_COL,
156         SLOT_LOAD_COL,
157         SLOT_SAVE_COL,
158         SLOT_EDIT_COL,
159         SLOT_NAME_COL
160     };
161 
162     enum {
163         TRANSLATE_INIT,
164         TRANSLATE_UPDATE,
165         TRANSLATE_ONLY
166     };
167 
168     enum {
169         FULLSCREEN_NONE,
170         FULLSCREEN_ALL,
171         FULLSCREEN_LCD
172     };
173 
174     // emu keypresses
175     void sendEmuKey(uint16_t key);
176     void sendEmuLetterKey(char letter);
177 
178     // console
179     void console(const QString &str, const QColor &colorFg = Qt::black, const QColor &colorBg = Qt::white, int type = EmuThread::ConsoleNorm);
180     void console(int type, const char *str, int size = -1);
181     void consoleStr();
182     void consoleClear();
183     void consoleModified();
184 
185     // Other
186     void romExport();
187     void ramExport();
188     void guiExport();
189     void ramImport();
190     void guiImport();
191 
192     // emu state
193     void emuSaved(bool success);
194     void emuBlocked(int req);
195 
196     // debug
197     void debugDisable();
198     void debugEnable();
199 
200     // translations
201     void translateExtras(int init);
202     void translateSwitch(const QString &lang);
203 
204     // state slots
205     void stateAdd(QString &name, QString &path);
206     void stateAddNew();
207     void stateRemove();
208     void stateEdit();
209     void stateSave();
210     void stateLoad();
211     void stateSaveInfo();
212     void stateLoadInfo();
213     int stateGet(QObject *obj, int col);
214 
215     // save / restore states
216     void stateToFile();
217     void stateToPath(const QString &path);
218     void stateFromFile();
219     void stateFromPath(const QString &path);
220 
221     // others
222     bool runSetup();
223     void showAbout();
224     void checkUpdate(bool info);
225 
226     // screenshots
227     void screenshot();
228     void screenshotSave(const QString &filter, const QString &suffix, const QString &temp);
229     void setFrameskip(int value);
230     void setOptimizeRecord(bool state);
231     void setSnapshotPath();
232 #ifdef PNG_WRITE_APNG_SUPPORTED
233     void recordAnimated();
234     void recordSave(const QString &file);
235     void recordControlUpdate();
236 #endif
237 
238     // debugger
239     void debugPopulate();
240     void debugGuiState(bool state);
241     void debugForce();
242     void debugInit();
243     void debugRaise();
244     void debugSync();
245     void debugToggle();
246     void debugExecute(uint32_t addr, uint8_t cmd);
247     void debugCommand(int reason, uint32_t data);
248     void debugZeroCycles();
249 
250     // battery
251     void batterySetCharging(bool state);
252     void batterySet(int value);
253 
254     // disassembly
255     void disasmUpdateAddr(int base, bool pane);
256     void disasmUpdate();
257     void disasmLine();
258     void disasmScroll(int value);
259 
260     // stack
261     void stackUpdate();
262     void stackLine();
263     void stackScroll(int value);
264 
265     // cpu state
266     bool adlState(int state);
267 
268     // stepping
269     void debugStep(int mode);
270     void stepIn();
271     void stepOver();
272     void stepNext();
273     void stepOut();
274 
275     // os view
276     void osUpdate();
277     void opModified(QTableWidgetItem *item);
278     void fpModified(QTableWidgetItem *item);
279 
280     // goto
281     void gotoPressed();
282     void gotoDisasmAddr(uint32_t addr);
283     void gotoMemAddr(uint32_t addr);
284 
285     void handleCtrlClickText(QPlainTextEdit *edit);
286     void handleCtrlClickLine(QLineEdit *edit);
287 
288     // breakpoints
289     void breakModified(QTableWidgetItem *item);
290     void breakSetPrev(QTableWidgetItem *current, QTableWidgetItem *previous);
291     int breakGetMask(int row);
292 
293     // breakpoint additions
294     bool breakAdd(const QString &label, uint32_t address, bool enabled, bool toggle, bool unset);
295     void breakAddGui();
296     void breakAddSlot();
297 
298     // breakpoint removal
299     void breakRemove(uint32_t addr);
300     void breakRemoveRow(int row);
301     void breakRemoveSelected();
302 
303     // watchpoints
304     void watchModified(QTableWidgetItem *item);
305     void watchSetPrev(QTableWidgetItem *current, QTableWidgetItem *previous);
306     void watchUpdate();
307     void watchUpdateRow(int row);
308     int watchGetMask(int row);
309 
310     // watchpoint additions
311     bool watchAdd(const QString &label, uint32_t low, uint32_t high, int mask, bool toggle, bool unset);
312     void watchAddGui();
313     void watchAddGuiR();
314     void watchAddGuiW();
315     void watchAddGuiRW();
316     void watchAddSlot();
317 
318     // watchpoint removal
319     void watchRemove(uint32_t addr);
320     void watchRemoveRow(int row);
321     void watchRemoveSelected();
322 
323     // ports
324     void portModified(QTableWidgetItem *item);
325     void portSetPrev(QTableWidgetItem *current, QTableWidgetItem *previous);
326     void portPopulate(int row);
327     int portGetMask(int row);
328 
329     // port additions
330     bool portAdd(uint16_t port, int mask, bool unset);
331     void portAddSlot();
332 
333     // port removal
334     void portRemoveSelected();
335     void portRemoveRow(int row);
336 
337     // labels
338     QString watchNextLabel();
339     QString breakNextLabel();
340     void updateLabels();
341 
342     // debug files
343     void debugImportFile(const QString &file);
344     void debugExportFile(const QString &file);
345     QString debugGetFile(bool save);
346 
347     // bootable images
348     bool bootImageImport(const QString &path);
349     bool bootImageCheck();
350     void bootImageExport();
351 
352     // equates
353     void setDebugAutoEquates(bool enable);
354     void equatesAddDialog();
355     void equatesAddFile(const QString &file);
356     void equatesAddEquate(const QString &name, uint32_t addr);
357     void equatesClear();
358     void equatesRefresh();
359     QString getAddressString(const QString &string, bool *ok);
360 
361     // keypad
362     void keymapLoad();
363     void keymapChanged();
364     void keymapCustomSelected();
365     void keypadChanged();
366     void setKeymap(const QString &value);
367     void setKeypadColor(unsigned int color);
368     void setCalcSkinTopFromType();
369 
370     // settings
371     void setRom(const QString &path);
372     void setImagePath();
373     void setCalcId();
374     void setFocusSetting(bool state);
375     void setStatusInterval(int value);
376     void setSkinToggle(bool state);
377     void setGuiSkip(int value);
378     void setLcdScale(int value);
379     void setLcdSpi(bool state);
380     void setLcdDma(bool state);
381     void setTop(bool state);
382     void setDockGroupDrag(bool state);
383     void setMenuBarState(bool state);
384     void setStatusBarState(bool state);
385     void setUIBoundaries(bool state);
386     void setPreRevisionI(bool state);
387     void setNormalOs(bool state);
388     void setRecentSave(bool state);
389     void setPortable(bool state);
390     void setAutoSave(bool state);
391     void setAutoUpdates(int value);
392     void saveSettings();
393     void saveDebug();
394     void setFont(int size);
395     void setUIDocks();
396     void setUIDockEditMode(bool mode);
397     void setUIEditMode(bool mode);
398     void setFullscreen(int value);
399     void iconsLoad();
400 
401     // speed settings
402     void setEmuSpeed(int value);
403     void setThrottle(int mode);
404     void showEmuSpeed(int speed);
405     void showFpsSpeed(double emuFps, double guiFps);
406     void showStatusMsg(const QString &str);
407 
408     // debug settings
409     void setDebugPath();
410     void setDebugAutoSave(bool state);
411     void setDebugDisasmDataCol(bool state);
412     void setDebugDisasmAddrCol(bool state);
413     void setDebugDisasmSpace(bool state);
414     void setDebugDisasmImplict(bool state);
415     void setDebugDisasmUppercase(bool state);
416     void setDebugDisasmBoldSymbols(bool state);
417     void setDebugIgnoreBreakpoints(bool state);
418     void setDebugResetTrigger(bool state);
419     void setDebugSoftCommands(bool state);
420 
421     // linking
422     QStringList varDialog(QFileDialog::AcceptMode mode, const QString &filter, const QString &suffix);
423     void varShow();
424     void varPressed(QTableWidgetItem *item);
425     void varLaunch(const calc_var_t *prgm);
426     void varSelect();
427     void varSaveSelected();
428     void varSaveSelectedFiles();
429     void varResend();
430     void varToggle();
431 
432     // recent
433     void recentLoadInfo();
434     void recentSaveInfo();
435 
436     // autotester
437     int autotesterOpen(const QString &jsonPath);
438     void autotesterUpdatePresets(int comboBoxIdx);
439     void autotesterErr(int errCode);
440     void autotesterTested(int status);
441     void autotesterLoad();
442     void autotesterReload();
443     void autotesterLaunch();
444     void autotesterRefreshCRC();
445 
446     // keybindings
447     void keymapExport();
448 
449     // memory
450     void flashUpdate();
451     void flashGotoPressed();
452     void flashSyncPressed();
453     void ramUpdate();
454     void ramGotoPressed();
455     void ramSyncPressed();
456     void memUpdate();
457     void setMemDocks();
458     void setVisualizerDocks();
459     void setKeyHistoryDocks();
460     void memLoadState();
461     void memSync(HexWidget *edit);
462     void memUpdateEdit(HexWidget *edit, bool force = false);
463     void memGotoEdit(HexWidget *edit);
464     void memGoto(HexWidget *edit, uint32_t addr);
465     void memSearchEdit(HexWidget *edit);
466     void memSyncEdit(HexWidget *edit);
467     void memAsciiToggle(HexWidget *edit);
468     void memDocksUpdate();
469     void addMemDock(const QString &magic, int bytes, bool ascii);
470     void addVisualizerDock(const QString &magic, const QString &config);
471     void addKeyHistoryDock(const QString &magic, int size);
472 
473     // versions
474     void setVersion();
475     void checkVersion();
476     bool isFirstRun();
477 
478     // options
479     void optSend(CEmuOpts &o);
480     void optLoadFiles(CEmuOpts &o);
481     void optAttemptLoad(CEmuOpts &o);
482 
483     // lcd
484     void lcdUpdate(double emuFps);
485     void lcdAdjust();
486     void lcdCopy();
487 
488     // resets and loads
489     void emuLoad(emu_data_t type);
490     void emuCheck(emu_state_t state, emu_data_t type);
491     void resetEmu();
492     void resetCEmu();
493     void resetGui();
494     void pauseEmu(Qt::ApplicationState state);
495 
496     // process communication
497     bool ipcSetup();
498     void ipcSpawn();
499     void ipcCloseConnected();
500     void ipcReceived();
501     void ipcSetId();
502     void ipcCli(QDataStream &stream);
503 
504     // context menus
505     void contextLcd(const QPoint &posa);
506     void contextConsole(const QPoint &posa);
507     void contextDisasm(const QPoint &posa);
508     void contextVars(const QPoint &posa);
509     void contextVat(const QPoint &posa);
510     void contextOp(const QPoint &posa);
511     void contextMem(const QPoint &posa);
512     void contextMemWidget(const QPoint &posa, uint32_t addr);
513 
514 #ifdef _WIN32
515     // Win32 Console Toggle
516     void toggleConsole();
517     void installToggleConsole();
518 #endif
519 
520     // Redistribute Docks
521     DockWidget *redistributeFindDock(const QPoint &pos);
522     bool redistributeDocks(const QPoint &pos, const QPoint &offset,
523                            Qt::CursorShape cursorShape,
524                            int (QSize::*dimension)() const,
525                            Qt::Orientation orientation);
526 
527     // Members
528     Ui::MainWindow *ui = Q_NULLPTR;
529     EmuThread emu;
530     CEmuOpts opts;
531     InterCom com;
532 
533     bool m_isInDarkMode = false;
534     const char* m_disasmOpcodeColor;
535 
536     int m_watchGUIMask = DBG_MASK_NONE;
537 
538     QTranslator m_appTranslator;
539     QLabel m_speedLabel;
540     QLabel m_fpsLabel;
541     QLabel m_msgLabel;
542     QTextCursor m_disasmOffset;
543     bool m_disasmOffsetSet;
544     bool m_disasmPane;
545     int32_t m_disasmAddr;
546     uint32_t m_stackAddr;
547 
548     QString m_searchStr;
549     int m_searchMode = SearchWidget::Hex;
550 
551     QDir m_dir;
552     QStringList m_equateFiles;
553 
554     bool m_uiEditMode;
555     bool m_portable = false;
556     bool m_nativeConsole = false;
557     bool m_shutdown = false;
558     bool m_recording = false;
559 
560     uint32_t m_prevDisasmAddr = 0;
561     QPalette m_cBack, m_cNone;
562 
563     QString m_prevWatchLow;
564     QString m_prevWatchHigh;
565     QString m_prevBreakAddr;
566     QString m_prevPortAddr;
567 
568     QShortcut *m_shortcutStepIn;
569     QShortcut *m_shortcutStepOver;
570     QShortcut *m_shortcutStepNext;
571     QShortcut *m_shortcutStepOut;
572     QShortcut *m_shortcutDebug;
573     QShortcut *m_shortcutFullscreen;
574     QShortcut *m_shortcutAsm;
575     QShortcut *m_shortcutResend;
576 
577     QAction *m_actionToggleUI;
578     QAction *m_actionAddMemory;
579     QAction *m_actionAddVisualizer;
580 
581     QIcon m_iconRun, m_iconStop;
582     QIcon m_iconSave, m_iconLoad;
583     QIcon m_iconEdit, m_iconRemove;
584     QIcon m_iconSearch, m_iconGoto;
585     QIcon m_iconSync, m_iconAddMem, m_iconLcd;
586     QIcon m_iconAscii, m_iconUiEdit;
587     QIcon m_iconCheck, m_iconCheckGray;
588     QTextCharFormat m_consoleFormat;
589 
590     QString m_gotoAddr;
591     QString m_flashGotoAddr;
592     QString m_RamGotoAddr;
593     QString m_memGotoAddr;
594 
595     QString m_pathConfig;
596     QMenu *m_menuDocks;
597     QMenu *m_menuDebug;
598 
599     KeyHistoryWidget *m_windowKeys = Q_NULLPTR;
600 
601     bool m_isSendingRom = false;
602     QString m_dragRom;
603 
604     bool m_needReload = false;
605     bool m_needFullReset = false;
606     bool m_keepSetup = false;
607     bool m_guiAdd = false;
608     bool m_initPassed = true;
609     bool m_useSoftCom = false;
610     bool m_pauseOnFocus;
611     bool m_loadedBootImage = false;
612     bool m_optimizeRecording;
613     bool m_portableActivated = false;
614     bool m_ignoreDmaCycles;
615     bool m_normalOs;
616     bool m_setup = false;
617     int m_fullscreen = FULLSCREEN_NONE;
618     uint32_t m_runUntilAddr;
619 
620     QProgressBar *m_progressBar;
621     QStringList m_docksMemory;
622     QList<int> m_docksMemoryBytes;
623     QList<bool> m_docksMemoryAscii;
624     QStringList m_docksKeyHistory;
625     QList<int> m_docksKeyHistorySize;
626     QStringList m_docksVisualizer;
627     QStringList m_docksVisualizerConfig;
628     QList<DockWidget*> m_dockPtrs;
629     QSettings *m_config = Q_NULLPTR;
630     HexWidget *m_memWidget = Q_NULLPTR;
631 
632     QString m_pathRom;
633     QString m_pathRam;
634     QString m_pathImage;
635     QTimer m_timerEmu;
636     QTimer m_timerFps;
637     bool m_timerEmuTriggerable = true;
638     bool m_timerFpsTriggerable = true;
639     bool m_timerEmuTriggered = false;
640     bool m_timerFpsTriggered = false;
641 
642     QFont varPreviewCEFont;
643     QFont varPreviewItalicFont;
644 
645     static const char *m_varExtensions[];
646 
647     // Settings definitions
648     static const QString SETTING_DEBUGGER_TEXT_SIZE;
649     static const QString SETTING_DEBUGGER_DISASM_SPACE;
650     static const QString SETTING_DEBUGGER_RESTORE_ON_OPEN;
651     static const QString SETTING_DEBUGGER_SAVE_ON_CLOSE;
652     static const QString SETTING_DEBUGGER_RESET_OPENS;
653     static const QString SETTING_DEBUGGER_ENABLE_SOFT;
654     static const QString SETTING_DEBUGGER_BOLD_SYMBOLS;
655     static const QString SETTING_DEBUGGER_DATA_COL;
656     static const QString SETTING_DEBUGGER_ADDR_COL;
657     static const QString SETTING_DEBUGGER_IMPLICT;
658     static const QString SETTING_DEBUGGER_UPPERCASE;
659     static const QString SETTING_DEBUGGER_IMAGE_PATH;
660     static const QString SETTING_DEBUGGER_FLASH_BYTES;
661     static const QString SETTING_DEBUGGER_RAM_BYTES;
662     static const QString SETTING_DEBUGGER_FLASH_ASCII;
663     static const QString SETTING_DEBUGGER_RAM_ASCII;
664     static const QString SETTING_DEBUGGER_BREAK_IGNORE;
665     static const QString SETTING_DEBUGGER_IGNORE_DMA;
666     static const QString SETTING_DEBUGGER_AUTO_EQUATES;
667     static const QString SETTING_DEBUGGER_PRE_I;
668     static const QString SETTING_DEBUGGER_NORM_OS;
669     static const QString SETTING_SCREEN_FRAMESKIP;
670     static const QString SETTING_SCREEN_SCALE;
671     static const QString SETTING_SCREEN_SKIN;
672     static const QString SETTING_SCREEN_SPI;
673     static const QString SETTING_KEYPAD_KEYMAP;
674     static const QString SETTING_KEYPAD_COLOR;
675     static const QString SETTING_WINDOW_FULLSCREEN;
676     static const QString SETTING_WINDOW_GROUP_DRAG;
677     static const QString SETTING_WINDOW_STATE;
678     static const QString SETTING_WINDOW_GEOMETRY;
679     static const QString SETTING_WINDOW_SEPARATOR;
680     static const QString SETTING_WINDOW_MENUBAR;
681     static const QString SETTING_WINDOW_STATUSBAR;
682     static const QString SETTING_WINDOW_POSITION;
683     static const QString SETTING_WINDOW_MEMORY_DOCKS;
684     static const QString SETTING_WINDOW_MEMORY_DOCK_BYTES;
685     static const QString SETTING_WINDOW_MEMORY_DOCK_ASCII;
686     static const QString SETTING_WINDOW_VISUALIZER_DOCKS;
687     static const QString SETTING_WINDOW_VISUALIZER_CONFIG;
688     static const QString SETTING_WINDOW_KEYHISTORY_DOCKS;
689     static const QString SETTING_WINDOW_KEYHISTORY_CONFIG;
690     static const QString SETTING_CAPTURE_FRAMESKIP;
691     static const QString SETTING_CAPTURE_OPTIMIZE;
692     static const QString SETTING_SLOT_NAMES;
693     static const QString SETTING_SLOT_PATHS;
694     static const QString SETTING_IMAGE_PATH;
695     static const QString SETTING_ROM_PATH;
696     static const QString SETTING_STATUS_INTERVAL;
697     static const QString SETTING_FIRST_RUN;
698     static const QString SETTING_UI_EDIT_MODE;
699     static const QString SETTING_PAUSE_FOCUS;
700     static const QString SETTING_SAVE_ON_CLOSE;
701     static const QString SETTING_RESTORE_ON_OPEN;
702     static const QString SETTING_EMUSPEED;
703     static const QString SETTING_AUTOUPDATE;
704     static const QString SETTING_ALWAYS_ON_TOP;
705     static const QString SETTING_NATIVE_CONSOLE;
706     static const QString SETTING_CURRENT_DIR;
707     static const QString SETTING_ENABLE_WIN_CONSOLE;
708     static const QString SETTING_RECENT_SAVE;
709     static const QString SETTING_RECENT_PATHS;
710     static const QString SETTING_RECENT_SELECT;
711 
712     static const QString SETTING_KEYPAD_NATURAL;
713     static const QString SETTING_KEYPAD_CEMU;
714     static const QString SETTING_KEYPAD_TILEM;
715     static const QString SETTING_KEYPAD_WABBITEMU;
716     static const QString SETTING_KEYPAD_JSTIFIED;
717     static const QString SETTING_KEYPAD_CUSTOM;
718     static const QString SETTING_KEYPAD_CUSTOM_PATH;
719 
720     static const QString SETTING_PREFERRED_LANG;
721     static const QString SETTING_VERSION;
722 
723     static const QString SETTING_DEFAULT_CONFIG_FILE;
724     static const QString SETTING_DEFAULT_ROM_FILE;
725     static const QString SETTING_DEFAULT_IMAGE_FILE;
726     static const QString SETTING_DEFAULT_DEBUG_FILE;
727 
728     static const QString TXT_YES;
729     static const QString TXT_NO;
730     static const QString TXT_NAN;
731     static const QString DEBUG_UNSET_ADDR;
732     static const QString DEBUG_UNSET_PORT;
733 
734     QString TITLE_DEBUG;
735     QString TITLE_DOCKS;
736 
737     QString TXT_MEM_DOCK;
738     QString TXT_VISUALIZER_DOCK;
739     QString TXT_KEYHISTORY_DOCK;
740 
741     QString TXT_CLEAR_HISTORY;
742     QString TXT_SIZE;
743 
744     QString TXT_CONSOLE;
745     QString TXT_SETTINGS;
746     QString TXT_VARIABLES;
747     QString TXT_CAPTURE;
748     QString TXT_STATE;
749     QString TXT_KEYPAD;
750 
751     QString TXT_DEBUG_CONTROL;
752     QString TXT_CPU_STATUS;
753     QString TXT_DISASSEMBLY;
754     QString TXT_MEMORY;
755     QString TXT_TIMERS;
756     QString TXT_BREAKPOINTS;
757     QString TXT_WATCHPOINTS;
758     QString TXT_PORTMON;
759     QString TXT_OS_VIEW;
760     QString TXT_OS_STACKS;
761     QString TXT_MISC;
762     QString TXT_AUTOTESTER;
763 
764     QString MSG_INFORMATION;
765     QString MSG_WARNING;
766     QString MSG_ERROR;
767     QString MSG_ADD_MEMORY;
768     QString MSG_ADD_VISUALIZER;
769     QString MSG_EDIT_UI;
770 
771     QTableWidget *m_breakpoints = Q_NULLPTR;
772     QTableWidget *m_watchpoints = Q_NULLPTR;
773     QTableWidget *m_ports = Q_NULLPTR;
774     DataWidget *m_disasm = Q_NULLPTR;
775 
776 #ifdef _WIN32
777     QAction *actionToggleConsole;
778     QString TXT_TOGGLE_CONSOLE;
779 #endif
780 };
781 
782 #endif
783