1 #pragma once
2 
3 #include <stdint.h>
4 #include <stdbool.h>
5 #include "ft2_cpu.h"
6 
7 enum // RADIOBUTTONS
8 {
9 	// HELP
10 	RB_HELP_FEATURES,
11 	RB_HELP_EFFECTS,
12 	RB_HELP_KEYBINDINGS,
13 	RB_HELP_HOW_TO_USE_FT2,
14 	RB_HELP_FAQ,
15 	RB_HELP_KNOWN_BUGS,
16 
17 	// NIBBLES
18 	RB_NIBBLES_1PLAYER,
19 	RB_NIBBLES_2PLAYERS,
20 	RB_NIBBLES_NOVICE,
21 	RB_NIBBLES_AVERAGE,
22 	RB_NIBBLES_PRO,
23 	RB_NIBBLES_MANIAC,
24 
25 	// SAMPLER
26 	RB_SAMPLE_NO_LOOP,
27 	RB_SAMPLE_FORWARD_LOOP,
28 	RB_SAMPLE_PINGPONG_LOOP,
29 	RB_SAMPLE_8BIT,
30 	RB_SAMPLE_16BIT,
31 
32 	// INSTRUMENT EDITOR
33 	RB_INST_WAVE_SINE,
34 	RB_INST_WAVE_SQUARE,
35 	RB_INST_WAVE_RAMP_DOWN,
36 	RB_INST_WAVE_RAMP_UP,
37 
38 	// CONFIG SELECT
39 	RB_CONFIG_IO_DEVICES,
40 	RB_CONFIG_LAYOUT,
41 	RB_CONFIG_MISCELLANEOUS,
42 
43 #ifdef HAS_MIDI
44 	RB_CONFIG_MIDI_INPUT,
45 #endif
46 
47 	// CONFIG AUDIO
48 
49 	// SOUND BUFFER SIZE
50 	RB_CONFIG_SBS_512,
51 	RB_CONFIG_SBS_1024,
52 	RB_CONFIG_SBS_2048,
53 
54 	// AUDIO BIT DEPTH
55 	RB_CONFIG_AUDIO_16BIT,
56 	RB_CONFIG_AUDIO_24BIT,
57 
58 	// AUDIO INTERPOLATION
59 	RB_CONFIG_AUDIO_INTRP_NONE,
60 	RB_CONFIG_AUDIO_INTRP_LINEAR,
61 	RB_CONFIG_AUDIO_INTRP_SINC,
62 
63 	// AUDIO FREQUENCY
64 	RB_CONFIG_AUDIO_44KHZ,
65 	RB_CONFIG_AUDIO_48KHZ,
66 #if CPU_64BIT
67 	RB_CONFIG_AUDIO_96KHZ,
68 	RB_CONFIG_AUDIO_192KHZ,
69 #endif
70 
71 	// AUDIO INPUT FREQUENCY
72 	RB_CONFIG_AUDIO_INPUT_44KHZ,
73 	RB_CONFIG_AUDIO_INPUT_48KHZ,
74 	RB_CONFIG_AUDIO_INPUT_96KHZ,
75 
76 	// FREQUENCY TABLE
77 	RB_CONFIG_FREQ_AMIGA,
78 	RB_CONFIG_FREQ_LINEAR,
79 
80 	// CONFIG LAYOUT
81 
82 	// MOUSE SHAPE
83 	RB_CONFIG_MOUSE_NICE,
84 	RB_CONFIG_MOUSE_UGLY,
85 	RB_CONFIG_MOUSE_AWFUL,
86 	RB_CONFIG_MOUSE_USABLE,
87 
88 	// MOUSE BUSY SHAPE
89 	RB_CONFIG_MOUSE_BUSY_GLASS,
90 	RB_CONFIG_MOUSE_BUSY_CLOCK,
91 
92 	// SCOPE STYLE
93 	RB_CONFIG_SCOPE_NORMAL,
94 	RB_CONFIG_SCOPE_LINED,
95 
96 	// PATTERN CHANNELS
97 	RB_CONFIG_MAXCHAN_4,
98 	RB_CONFIG_MAXCHAN_6,
99 	RB_CONFIG_MAXCHAN_8,
100 	RB_CONFIG_MAXCHAN_12,
101 
102 	// PATTERN FONT
103 	RB_CONFIG_FONT_CAPITALS,
104 	RB_CONFIG_FONT_LOWERCASE,
105 	RB_CONFIG_FONT_FUTURE,
106 	RB_CONFIG_FONT_BOLD,
107 
108 	// PALETTE ENTRIES
109 	RB_CONFIG_PAL_PATTERNTEXT,
110 	RB_CONFIG_PAL_BLOCKMARK,
111 	RB_CONFIG_PAL_TEXTONBLOCK,
112 	RB_CONFIG_PAL_MOUSE,
113 	RB_CONFIG_PAL_DESKTOP,
114 	RB_CONFIG_PAL_BUTTONS,
115 
116 	// PALETTE PRESETS
117 	RB_CONFIG_PAL_ARCTIC,
118 	RB_CONFIG_PAL_LITHE_DARK,
119 	RB_CONFIG_PAL_AURORA_BOREALIS,
120 	RB_CONFIG_PAL_ROSE,
121 	RB_CONFIG_PAL_BLUES,
122 	RB_CONFIG_PAL_DARK_MODE,
123 	RB_CONFIG_PAL_GOLD,
124 	RB_CONFIG_PAL_VIOLENT,
125 	RB_CONFIG_PAL_HEAVY_METAL,
126 	RB_CONFIG_PAL_WHY_COLORS,
127 	RB_CONFIG_PAL_JUNGLE,
128 	RB_CONFIG_PAL_USER_DEFINED,
129 
130 	// FILE SORTING
131 	RB_CONFIG_FILESORT_EXT,
132 	RB_CONFIG_FILESORT_NAME,
133 
134 	// WINDOW SIZE
135 	RB_CONFIG_WIN_SIZE_AUTO,
136 	RB_CONFIG_WIN_SIZE_1X,
137 	RB_CONFIG_WIN_SIZE_3X,
138 	RB_CONFIG_WIN_SIZE_2X,
139 	RB_CONFIG_WIN_SIZE_4X,
140 
141 	// DISK OP
142 	RB_DISKOP_MODULE,
143 	RB_DISKOP_INSTR,
144 	RB_DISKOP_SAMPLE,
145 	RB_DISKOP_PATTERN,
146 	RB_DISKOP_TRACK,
147 
148 	RB_DISKOP_MOD_SAVEAS_MOD,
149 	RB_DISKOP_MOD_SAVEAS_XM,
150 	RB_DISKOP_MOD_SAVEAS_WAV,
151 	RB_DISKOP_INS_SAVEAS_XI,
152 	RB_DISKOP_SMP_SAVEAS_RAW,
153 	RB_DISKOP_SMP_SAVEAS_IFF,
154 	RB_DISKOP_SMP_SAVEAS_WAV,
155 	RB_DISKOP_PAT_SAVEAS_XP,
156 	RB_DISKOP_TRK_SAVEAS_XT,
157 
158 	RB_WAV_RENDER_BITDEPTH16,
159 	RB_WAV_RENDER_BITDEPTH32,
160 
161 	NUM_RADIOBUTTONS,
162 
163 	// groups (must be *after* NUM_RADIOBUTTONS)
164 
165 	RB_GROUP_HELP,
166 
167 	RB_GROUP_NIBBLES_PLAYERS,
168 	RB_GROUP_NIBBLES_DIFFICULTY,
169 
170 	RB_GROUP_SAMPLE_LOOP,
171 	RB_GROUP_SAMPLE_DEPTH,
172 	RB_GROUP_INST_WAVEFORM,
173 
174 	RB_GROUP_CONFIG_SELECT,
175 	RB_GROUP_CONFIG_SOUND_BUFF_SIZE,
176 	RB_GROUP_CONFIG_AUDIO_BIT_DEPTH,
177 	RB_GROUP_CONFIG_AUDIO_INTERPOLATION,
178 	RB_GROUP_CONFIG_AUDIO_FREQ,
179 	RB_GROUP_CONFIG_AUDIO_INPUT_FREQ,
180 	RB_GROUP_CONFIG_FREQ_TABLE,
181 
182 	RB_GROUP_CONFIG_MOUSE,
183 	RB_GROUP_CONFIG_MOUSE_BUSY,
184 	RB_GROUP_CONFIG_SCOPE,
185 	RB_GROUP_CONFIG_PATTERN_CHANS,
186 	RB_GROUP_CONFIG_FONT,
187 	RB_GROUP_CONFIG_PAL_ENTRIES,
188 	RB_GROUP_CONFIG_PAL_PRESET,
189 
190 	RB_GROUP_CONFIG_FILESORT,
191 	RB_GROUP_CONFIG_WIN_SIZE,
192 
193 	RB_GROUP_DISKOP_ITEM,
194 
195 	RB_GROUP_DISKOP_MOD_SAVEAS,
196 	RB_GROUP_DISKOP_INS_SAVEAS,
197 	RB_GROUP_DISKOP_SMP_SAVEAS,
198 	RB_GROUP_DISKOP_PAT_SAVEAS,
199 	RB_GROUP_DISKOP_TRK_SAVEAS,
200 
201 	RB_GROUP_WAV_RENDER_BITDEPTH,
202 };
203 
204 enum
205 {
206 	RADIOBUTTON_UNCHECKED = 0,
207 	RADIOBUTTON_CHECKED = 1,
208 	RADIOBUTTON_PRESSED = 2
209 };
210 
211 #define RADIOBUTTON_W 11
212 #define RADIOBUTTON_H 11
213 #define RADIOBUTTON_STATES 3
214 
215 typedef struct radioButton_t // DO NOT TOUCH!
216 {
217 	uint16_t x, y, clickAreaWidth;
218 	uint16_t group;
219 	void (*callbackFunc)(void);
220 
221 	uint8_t state;
222 	bool visible;
223 } radioButton_t;
224 
225 void drawRadioButton(uint16_t radioButtonID);
226 void showRadioButton(uint16_t radioButtonID);
227 void hideRadioButton(uint16_t radioButtonID);
228 void checkRadioButton(uint16_t radioButtonID);
229 void uncheckRadioButtonGroup(uint16_t radioButtonGroup);
230 void showRadioButtonGroup(uint16_t radioButtonGroup);
231 void hideRadioButtonGroup(uint16_t radioButtonGroup);
232 void handleRadioButtonsWhileMouseDown(void);
233 bool testRadioButtonMouseDown(void);
234 void testRadioButtonMouseRelease(void);
235