| 1 | //============================================================================ |
| 2 | // |
| 3 | // SSSS tt lll lll |
| 4 | // SS SS tt ll ll |
| 5 | // SS tttttt eeee ll ll aaaa |
| 6 | // SSSS tt ee ee ll ll aa |
| 7 | // SS tt eeeeee ll ll aaaaa -- "An Atari 2600 VCS Emulator" |
| 8 | // SS SS tt ee ll ll aa aa |
| 9 | // SSSS ttt eeeee llll llll aaaaa |
| 10 | // |
| 11 | // Copyright (c) 1995-2019 by Bradford W. Mott, Stephen Anthony |
| 12 | // and the Stella Team |
| 13 | // |
| 14 | // See the file "License.txt" for information on usage and redistribution of |
| 15 | // this file, and for a DISCLAIMER OF ALL WARRANTIES. |
| 16 | //============================================================================ |
| 17 | |
| 18 | #ifndef DEBUGGER_DIALOG_HXX |
| 19 | #define DEBUGGER_DIALOG_HXX |
| 20 | |
| 21 | class Debugger; |
| 22 | class OSystem; |
| 23 | class DialogContainer; |
| 24 | class ButtonWidget; |
| 25 | class CpuWidget; |
| 26 | class PromptWidget; |
| 27 | class RamWidget; |
| 28 | class RomWidget; |
| 29 | class TabWidget; |
| 30 | class EditTextWidget; |
| 31 | class TiaInfoWidget; |
| 32 | class TiaOutputWidget; |
| 33 | class TiaZoomWidget; |
| 34 | class CartDebugWidget; |
| 35 | class CartRamWidget; |
| 36 | |
| 37 | namespace Common { |
| 38 | struct Rect; |
| 39 | } |
| 40 | |
| 41 | #include "Dialog.hxx" |
| 42 | #include "MessageBox.hxx" |
| 43 | #include "OptionsDialog.hxx" |
| 44 | |
| 45 | class DebuggerDialog : public Dialog |
| 46 | { |
| 47 | public: |
| 48 | // Note: these sizes make sure that all major tabs are fully visible |
| 49 | // cart dependend information (e.g. DPC+) may require more space |
| 50 | enum { |
| 51 | kSmallFontMinW = 1090, kSmallFontMinH = 720, |
| 52 | kMediumFontMinW = 1160, kMediumFontMinH = 770, |
| 53 | kLargeFontMinW = 1160, kLargeFontMinH = 870 |
| 54 | }; |
| 55 | |
| 56 | DebuggerDialog(OSystem& osystem, DialogContainer& parent, |
| 57 | int x, int y, int w, int h); |
| 58 | virtual ~DebuggerDialog() = default; |
| 59 | |
| 60 | const GUI::Font& lfont() const { return *myLFont; } |
| 61 | const GUI::Font& nfont() const { return *myNFont; } |
| 62 | PromptWidget& prompt() const { return *myPrompt; } |
| 63 | TiaInfoWidget& tiaInfo() const { return *myTiaInfo; } |
| 64 | TiaOutputWidget& tiaOutput() const { return *myTiaOutput; } |
| 65 | TiaZoomWidget& tiaZoom() const { return *myTiaZoom; } |
| 66 | RomWidget& rom() const { return *myRom; } |
| 67 | CartDebugWidget& cartDebug() const { return *myCartDebug; } |
| 68 | CartRamWidget& cartRam() const { return *myCartRam; } |
| 69 | EditTextWidget& message() const { return *myMessageBox; } |
| 70 | ButtonWidget& rewindButton() const { return *myRewindButton; } |
| 71 | ButtonWidget& unwindButton() const { return *myUnwindButton; } |
| 72 | |
| 73 | void showFatalMessage(const string& msg); |
| 74 | |
| 75 | private: |
| 76 | void center() override { positionAt(0); } |
| 77 | void loadConfig() override; |
| 78 | void handleKeyDown(StellaKey key, StellaMod mod, bool repeated) override; |
| 79 | void handleCommand(CommandSender* sender, int cmd, int data, int id) override; |
| 80 | |
| 81 | void doStep(); |
| 82 | void doTrace(); |
| 83 | void doScanlineAdvance(); |
| 84 | void doAdvance(); |
| 85 | void doRewind(); |
| 86 | void doUnwind(); |
| 87 | void doRewind10(); |
| 88 | void doUnwind10(); |
| 89 | void doRewindAll(); |
| 90 | void doUnwindAll(); |
| 91 | void doExitDebugger(); |
| 92 | void doExitRom(); |
| 93 | |
| 94 | void createFont(); |
| 95 | void addTiaArea(); |
| 96 | void addTabArea(); |
| 97 | void addStatusArea(); |
| 98 | void addRomArea(); |
| 99 | |
| 100 | Common::Rect getTiaBounds() const; |
| 101 | Common::Rect getRomBounds() const; |
| 102 | Common::Rect getStatusBounds() const; |
| 103 | Common::Rect getTabBounds() const; |
| 104 | |
| 105 | private: |
| 106 | enum { |
| 107 | kDDStepCmd = 'DDst', |
| 108 | kDDTraceCmd = 'DDtr', |
| 109 | kDDAdvCmd = 'DDav', |
| 110 | kDDSAdvCmd = 'DDsv', |
| 111 | kDDRewindCmd = 'DDrw', |
| 112 | kDDUnwindCmd = 'DDuw', |
| 113 | kDDExitCmd = 'DDex', |
| 114 | kDDExitFatalCmd = 'DDer', |
| 115 | kDDOptionsCmd = 'DDop' |
| 116 | }; |
| 117 | |
| 118 | TabWidget *myTab, *myRomTab; |
| 119 | |
| 120 | PromptWidget* myPrompt; |
| 121 | TiaInfoWidget* myTiaInfo; |
| 122 | TiaOutputWidget* myTiaOutput; |
| 123 | TiaZoomWidget* myTiaZoom; |
| 124 | CpuWidget* myCpu; |
| 125 | RamWidget* myRam; |
| 126 | RomWidget* myRom; |
| 127 | CartDebugWidget* myCartInfo; |
| 128 | CartDebugWidget* myCartDebug; |
| 129 | CartRamWidget* myCartRam; |
| 130 | EditTextWidget* myMessageBox; |
| 131 | ButtonWidget* myRewindButton; |
| 132 | ButtonWidget* myUnwindButton; |
| 133 | |
| 134 | unique_ptr<GUI::MessageBox> myFatalError; |
| 135 | unique_ptr<OptionsDialog> myOptions; |
| 136 | |
| 137 | unique_ptr<GUI::Font> myLFont; // used for labels |
| 138 | unique_ptr<GUI::Font> myNFont; // used for normal text |
| 139 | bool myFirstLoad; |
| 140 | |
| 141 | private: |
| 142 | // Following constructors and assignment operators not supported |
| 143 | DebuggerDialog() = delete; |
| 144 | DebuggerDialog(const DebuggerDialog&) = delete; |
| 145 | DebuggerDialog(DebuggerDialog&&) = delete; |
| 146 | DebuggerDialog& operator=(const DebuggerDialog&) = delete; |
| 147 | DebuggerDialog& operator=(DebuggerDialog&&) = delete; |
| 148 | }; |
| 149 | |
| 150 | #endif |
| 151 | |