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 DEVELOPER_DIALOG_HXX
19#define DEVELOPER_DIALOG_HXX
20
21class OSystem;
22class GuiObject;
23class TabWidget;
24class CheckboxWidget;
25class EditTextWidget;
26class PopUpWidget;
27class RadioButtonGroup;
28class RadioButtonWidget;
29class SliderWidget;
30class StaticTextWidget;
31class ColorWidget;
32
33namespace GUI {
34 class Font;
35}
36
37#include "bspf.hxx"
38#include "Dialog.hxx"
39
40class DeveloperDialog : public Dialog
41{
42 public:
43 DeveloperDialog(OSystem& osystem, DialogContainer& parent,
44 const GUI::Font& font, int max_w, int max_h);
45 virtual ~DeveloperDialog() = default;
46
47 private:
48 void handleCommand(CommandSender* sender, int cmd, int data, int id) override;
49
50 void loadConfig() override;
51 void saveConfig() override;
52 void setDefaults() override;
53
54 private:
55 enum
56 {
57 kPlrSettings = 'DVpl',
58 kDevSettings = 'DVdv',
59 kConsole = 'DVco',
60 kRandRAMID = 'DVrm',
61 kRandCPUID = 'DVcp',
62 kTIAType = 'DVtt',
63 kTVJitter = 'DVjt',
64 kTVJitterChanged = 'DVjr',
65 kPPinCmd = 'DVpn',
66 kTimeMachine = 'DTtm',
67 kSizeChanged = 'DTsz',
68 kUncompressedChanged = 'DTuc',
69 kIntervalChanged = 'DTin',
70 kHorizonChanged = 'DThz',
71 kP0ColourChangedCmd = 'GOp0',
72 kM0ColourChangedCmd = 'GOm0',
73 kP1ColourChangedCmd = 'GOp1',
74 kM1ColourChangedCmd = 'GOm1',
75 kPFColourChangedCmd = 'GOpf',
76 kBLColourChangedCmd = 'GObl',
77 #ifdef DEBUGGER_SUPPORT
78 kDFontSizeChanged = 'UIfs',
79 #endif
80 };
81 enum SettingsSet { player = 0, developer = 1 };
82
83 // MUST be aligned with RewindManager!
84 static const int NUM_INTERVALS = 7;
85 static const int NUM_HORIZONS = 8;
86
87 static const int DEBUG_COLORS = 6;
88
89 TabWidget* myTab;
90 // Emulator widgets
91 RadioButtonGroup* mySettingsGroupEmulation;
92 CheckboxWidget* myFrameStatsWidget;
93 PopUpWidget* myConsoleWidget;
94 StaticTextWidget* myLoadingROMLabel;
95 CheckboxWidget* myRandomBankWidget;
96 CheckboxWidget* myRandomizeRAMWidget;
97 StaticTextWidget* myRandomizeCPULabel;
98 CheckboxWidget* myRandomizeCPUWidget[5];
99 CheckboxWidget* myUndrivenPinsWidget;
100#ifdef DEBUGGER_SUPPORT
101 CheckboxWidget* myRWPortBreakWidget;
102 CheckboxWidget* myWRPortBreakWidget;
103#endif
104 CheckboxWidget* myThumbExceptionWidget;
105 CheckboxWidget* myEEPROMAccessWidget;
106
107 // TIA widgets
108 RadioButtonGroup* mySettingsGroupTia;
109 PopUpWidget* myTIATypeWidget;
110 StaticTextWidget* myInvPhaseLabel;
111 CheckboxWidget* myPlInvPhaseWidget;
112 CheckboxWidget* myMsInvPhaseWidget;
113 CheckboxWidget* myBlInvPhaseWidget;
114 StaticTextWidget* myPlayfieldLabel;
115 CheckboxWidget* myPFBitsWidget;
116 CheckboxWidget* myPFColorWidget;
117 StaticTextWidget* mySwapLabel;
118 CheckboxWidget* myPlSwapWidget;
119 CheckboxWidget* myBlSwapWidget;
120
121 // Video widgets
122 RadioButtonGroup* mySettingsGroupVideo;
123 CheckboxWidget* myTVJitterWidget;
124 SliderWidget* myTVJitterRecWidget;
125 StaticTextWidget* myTVJitterRecLabelWidget;
126 CheckboxWidget* myColorLossWidget;
127 CheckboxWidget* myDebugColorsWidget;
128 PopUpWidget* myDbgColour[DEBUG_COLORS];
129 ColorWidget* myDbgColourSwatch[DEBUG_COLORS];
130
131 // States widgets
132 RadioButtonGroup* mySettingsGroupTM;
133 CheckboxWidget* myTimeMachineWidget;
134 SliderWidget* myStateSizeWidget;
135 SliderWidget* myUncompressedWidget;
136 PopUpWidget* myStateIntervalWidget;
137 PopUpWidget* myStateHorizonWidget;
138 RadioButtonGroup* mySaveOnExitGroup;
139
140#ifdef DEBUGGER_SUPPORT
141 // Debugger UI widgets
142 SliderWidget* myDebuggerWidthSlider;
143 SliderWidget* myDebuggerHeightSlider;
144 PopUpWidget* myDebuggerFontSize;
145 PopUpWidget* myDebuggerFontStyle;
146 CheckboxWidget* myGhostReadsTrapWidget;
147#endif
148
149 bool mySettings;
150 // Emulator sets
151 bool myFrameStats[2];
152 int myConsole[2];
153 bool myRandomBank[2];
154 bool myRandomizeRAM[2];
155 string myRandomizeCPU[2];
156 bool myColorLoss[2];
157 bool myTVJitter[2];
158 int myTVJitterRec[2];
159 bool myDebugColors[2];
160 bool myUndrivenPins[2];
161#ifdef DEBUGGER_SUPPORT
162 bool myRWPortBreak[2];
163 bool myWRPortBreak[2];
164#endif
165 bool myThumbException[2];
166 bool myEEPROMAccess[2];
167 // TIA sets
168 string myTIAType[2];
169 bool myPlInvPhase[2];
170 bool myMsInvPhase[2];
171 bool myBlInvPhase[2];
172 bool myPFBits[2];
173 bool myPFColor[2];
174 bool myPlSwap[2];
175 bool myBlSwap[2];
176 // States sets
177 bool myTimeMachine[2];
178 int myStateSize[2];
179 int myUncompressed[2];
180 string myStateInterval[2];
181 string myStateHorizon[2];
182
183 private:
184 void addEmulationTab(const GUI::Font& font);
185 void addTimeMachineTab(const GUI::Font& font);
186 void addTiaTab(const GUI::Font& font);
187 void addVideoTab(const GUI::Font& font);
188 void addDebuggerTab(const GUI::Font& font);
189
190 void loadSettings(SettingsSet set);
191 void saveSettings(SettingsSet set);
192 void getWidgetStates(SettingsSet set);
193 void setWidgetStates(SettingsSet set);
194
195 void handleSettings(bool devSettings);
196 void handleTVJitterChange(bool enable);
197 void handleEnableDebugColors();
198 void handleConsole();
199
200 void handleTia();
201
202 void handleDebugColours(int cmd, int color);
203 void handleDebugColours(const string& colors);
204
205 void handleTimeMachine();
206 void handleSize();
207 void handleUncompressed();
208 void handleInterval();
209 void handleHorizon();
210 void handleFontSize();
211
212 // Following constructors and assignment operators not supported
213 DeveloperDialog() = delete;
214 DeveloperDialog(const DeveloperDialog&) = delete;
215 DeveloperDialog(DeveloperDialog&&) = delete;
216 DeveloperDialog& operator=(const DeveloperDialog&) = delete;
217 DeveloperDialog& operator=(DeveloperDialog&&) = delete;
218};
219
220#endif
221