1 #pragma once
2 
3 #include <stdint.h>
4 #include <stdbool.h>
5 
6 enum // PUSHBUTTONS
7 {
8 	// reserved
9 	PB_RES_1,
10 	PB_RES_2,
11 	PB_RES_3,
12 	PB_RES_4,
13 	PB_RES_5,
14 	PB_RES_6,
15 	PB_RES_7,
16 	PB_RES_8,
17 
18 	// POSITION EDITOR
19 	PB_POSED_POS_UP,
20 	PB_POSED_POS_DOWN,
21 	PB_POSED_INS,
22 	PB_POSED_PATT_UP,
23 	PB_POSED_PATT_DOWN,
24 	PB_POSED_DEL,
25 	PB_POSED_LEN_UP,
26 	PB_POSED_LEN_DOWN,
27 	PB_POSED_REP_UP,
28 	PB_POSED_REP_DOWN,
29 
30 	// SONG/PATTERN
31 	PB_BPM_UP,
32 	PB_BPM_DOWN,
33 	PB_SPEED_UP,
34 	PB_SPEED_DOWN,
35 	PB_EDITADD_UP,
36 	PB_EDITADD_DOWN,
37 	PB_PATT_UP,
38 	PB_PATT_DOWN,
39 	PB_PATTLEN_UP,
40 	PB_PATTLEN_DOWN,
41 	PB_PATT_EXPAND,
42 	PB_PATT_SHRINK,
43 
44 	// LOGO
45 	PB_LOGO,
46 	PB_BADGE,
47 
48 	// MAIN MENU
49 	PB_ABOUT,
50 	PB_NIBBLES,
51 	PB_KILL,
52 	PB_TRIM,
53 	PB_EXTEND_VIEW,
54 	PB_TRANSPOSE,
55 	PB_INST_ED_EXT,
56 	PB_SMP_ED_EXT,
57 	PB_ADV_EDIT,
58 	PB_ADD_CHANNELS,
59 	PB_SUB_CHANNELS,
60 	PB_PLAY_SONG,
61 	PB_PLAY_PATT,
62 	PB_STOP,
63 	PB_RECORD_SONG,
64 	PB_RECORD_PATT,
65 	PB_DISK_OP,
66 	PB_INST_ED,
67 	PB_SMP_ED,
68 	PB_CONFIG,
69 	PB_HELP,
70 	PB_EXIT_EXT_PATT,
71 
72 	// INSTRUMENT SWITCHER
73 	PB_RANGE1,
74 	PB_RANGE2,
75 	PB_RANGE3,
76 	PB_RANGE4,
77 	PB_RANGE5,
78 	PB_RANGE6,
79 	PB_RANGE7,
80 	PB_RANGE8,
81 	PB_RANGE9,
82 	PB_RANGE10,
83 	PB_RANGE11,
84 	PB_RANGE12,
85 	PB_RANGE13,
86 	PB_RANGE14,
87 	PB_RANGE15,
88 	PB_RANGE16,
89 	PB_SWAP_BANK,
90 	PB_SAMPLE_LIST_UP,
91 	PB_SAMPLE_LIST_DOWN,
92 
93 	// NIBBLES SCREEN
94 	PB_NIBBLES_PLAY,
95 	PB_NIBBLES_HELP,
96 	PB_NIBBLES_HIGHS,
97 	PB_NIBBLES_EXIT,
98 
99 	// ADVANCED EDIT
100 	PB_REMAP_TRACK,
101 	PB_REMAP_PATTERN,
102 	PB_REMAP_SONG,
103 	PB_REMAP_BLOCK,
104 
105 	// ABOUT SCREEN
106 	PB_EXIT_ABOUT,
107 
108 	// HELP SCREEN
109 	PB_HELP_EXIT,
110 	PB_HELP_SCROLL_UP,
111 	PB_HELP_SCROLL_DOWN,
112 
113 	// PATTERN EDITOR
114 	PB_CHAN_SCROLL_LEFT,
115 	PB_CHAN_SCROLL_RIGHT,
116 
117 	// TRANSPOSE
118 	PB_TRANSP_CUR_INS_TRK_UP,
119 	PB_TRANSP_CUR_INS_TRK_DN,
120 	PB_TRANSP_CUR_INS_TRK_12UP,
121 	PB_TRANSP_CUR_INS_TRK_12DN,
122 	PB_TRANSP_ALL_INS_TRK_UP,
123 	PB_TRANSP_ALL_INS_TRK_DN,
124 	PB_TRANSP_ALL_INS_TRK_12UP,
125 	PB_TRANSP_ALL_INS_TRK_12DN,
126 	PB_TRANSP_CUR_INS_PAT_UP,
127 	PB_TRANSP_CUR_INS_PAT_DN,
128 	PB_TRANSP_CUR_INS_PAT_12UP,
129 	PB_TRANSP_CUR_INS_PAT_12DN,
130 	PB_TRANSP_ALL_INS_PAT_UP,
131 	PB_TRANSP_ALL_INS_PAT_DN,
132 	PB_TRANSP_ALL_INS_PAT_12UP,
133 	PB_TRANSP_ALL_INS_PAT_12DN,
134 	PB_TRANSP_CUR_INS_SNG_UP,
135 	PB_TRANSP_CUR_INS_SNG_DN,
136 	PB_TRANSP_CUR_INS_SNG_12UP,
137 	PB_TRANSP_CUR_INS_SNG_12DN,
138 	PB_TRANSP_ALL_INS_SNG_UP,
139 	PB_TRANSP_ALL_INS_SNG_DN,
140 	PB_TRANSP_ALL_INS_SNG_12UP,
141 	PB_TRANSP_ALL_INS_SNG_12DN,
142 	PB_TRANSP_CUR_INS_BLK_UP,
143 	PB_TRANSP_CUR_INS_BLK_DN,
144 	PB_TRANSP_CUR_INS_BLK_12UP,
145 	PB_TRANSP_CUR_INS_BLK_12DN,
146 	PB_TRANSP_ALL_INS_BLK_UP,
147 	PB_TRANSP_ALL_INS_BLK_DN,
148 	PB_TRANSP_ALL_INS_BLK_12UP,
149 	PB_TRANSP_ALL_INS_BLK_12DN,
150 
151 	// SAMPLE EDITOR
152 	PB_SAMP_SCROLL_LEFT,
153 	PB_SAMP_SCROLL_RIGHT,
154 	PB_SAMP_PNOTE_UP,
155 	PB_SAMP_PNOTE_DOWN,
156 	PB_SAMP_STOP,
157 	PB_SAMP_PWAVE,
158 	PB_SAMP_PRANGE,
159 	PB_SAMP_PDISPLAY,
160 	PB_SAMP_SHOW_RANGE,
161 	PB_SAMP_RANGE_ALL,
162 	PB_SAMP_CLR_RANGE,
163 	PB_SAMP_ZOOM_OUT,
164 	PB_SAMP_SHOW_ALL,
165 	PB_SAMP_SAVE_RNG,
166 	PB_SAMP_CUT,
167 	PB_SAMP_COPY,
168 	PB_SAMP_PASTE,
169 	PB_SAMP_CROP,
170 	PB_SAMP_VOLUME,
171 	PB_SAMP_XFADE,
172 	PB_SAMP_EXIT,
173 	PB_SAMP_CLEAR,
174 	PB_SAMP_MIN,
175 	PB_SAMP_REPEAT_UP,
176 	PB_SAMP_REPEAT_DOWN,
177 	PB_SAMP_REPLEN_UP,
178 	PB_SAMP_REPLEN_DOWN,
179 
180 	// SAMPLE EDITOR EXTENSION
181 	PB_SAMP_EXT_CLEAR_COPYBUF,
182 	PB_SAMP_EXT_CONV,
183 	PB_SAMP_EXT_ECHO,
184 	PB_SAMP_EXT_BACKWARDS,
185 	PB_SAMP_EXT_CONV_W,
186 	PB_SAMP_EXT_MORPH,
187 	PB_SAMP_EXT_COPY_INS,
188 	PB_SAMP_EXT_COPY_SMP,
189 	PB_SAMP_EXT_XCHG_INS,
190 	PB_SAMP_EXT_XCHG_SMP,
191 	PB_SAMP_EXT_RESAMPLE,
192 	PB_SAMP_EXT_MIX_SAMPLE,
193 
194 	// INSTRUMENT EDITOR
195 	PB_INST_VDEF1,
196 	PB_INST_VDEF2,
197 	PB_INST_VDEF3,
198 	PB_INST_VDEF4,
199 	PB_INST_VDEF5,
200 	PB_INST_VDEF6,
201 	PB_INST_PDEF1,
202 	PB_INST_PDEF2,
203 	PB_INST_PDEF3,
204 	PB_INST_PDEF4,
205 	PB_INST_PDEF5,
206 	PB_INST_PDEF6,
207 	PB_INST_VP_ADD,
208 	PB_INST_VP_DEL,
209 	PB_INST_VS_UP,
210 	PB_INST_VS_DOWN,
211 	PB_INST_VREPS_UP,
212 	PB_INST_VREPS_DOWN,
213 	PB_INST_VREPE_UP,
214 	PB_INST_VREPE_DOWN,
215 	PB_INST_PP_ADD,
216 	PB_INST_PP_DEL,
217 	PB_INST_PS_UP,
218 	PB_INST_PS_DOWN,
219 	PB_INST_PREPS_UP,
220 	PB_INST_PREPS_DOWN,
221 	PB_INST_PREPE_UP,
222 	PB_INST_PREPE_DOWN,
223 	PB_INST_VOL_DOWN,
224 	PB_INST_VOL_UP,
225 	PB_INST_PAN_DOWN,
226 	PB_INST_PAN_UP,
227 	PB_INST_FTUNE_DOWN,
228 	PB_INST_FTUNE_UP,
229 	PB_INST_FADEOUT_DOWN,
230 	PB_INST_FADEOUT_UP,
231 	PB_INST_VIBSPEED_DOWN,
232 	PB_INST_VIBSPEED_UP,
233 	PB_INST_VIBDEPTH_DOWN,
234 	PB_INST_VIBDEPTH_UP,
235 	PB_INST_VIBSWEEP_DOWN,
236 	PB_INST_VIBSWEEP_UP,
237 	PB_INST_EXIT,
238 	PB_INST_OCT_UP,
239 	PB_INST_HALFTONE_UP,
240 	PB_INST_OCT_DOWN,
241 	PB_INST_HALFTONE_DOWN,
242 
243 	// INSTRUMENT EDITOR EXTENSION
244 	PB_INST_EXT_MIDI_CH_DOWN,
245 	PB_INST_EXT_MIDI_CH_UP,
246 	PB_INST_EXT_MIDI_PRG_DOWN,
247 	PB_INST_EXT_MIDI_PRG_UP,
248 	PB_INST_EXT_MIDI_BEND_DOWN,
249 	PB_INST_EXT_MIDI_BEND_UP,
250 
251 	// TRIM SCREEN
252 	PB_TRIM_CALC,
253 	PB_TRIM_TRIM,
254 
255 	// CONFIG LEFT PANEL
256 	PB_CONFIG_RESET,
257 	PB_CONFIG_LOAD,
258 	PB_CONFIG_SAVE,
259 	PB_CONFIG_EXIT,
260 
261 	// CONFIG AUDIO
262 	PB_CONFIG_AUDIO_RESCAN,
263 	PB_CONFIG_AUDIO_OUTPUT_DOWN,
264 	PB_CONFIG_AUDIO_OUTPUT_UP,
265 	PB_CONFIG_AUDIO_INPUT_DOWN,
266 	PB_CONFIG_AUDIO_INPUT_UP,
267 	PB_CONFIG_AMP_DOWN,
268 	PB_CONFIG_AMP_UP,
269 	PB_CONFIG_MASTVOL_DOWN,
270 	PB_CONFIG_MASTVOL_UP,
271 
272 	// CONFIG LAYOUT
273 	PB_CONFIG_PAL_R_DOWN,
274 	PB_CONFIG_PAL_R_UP,
275 	PB_CONFIG_PAL_G_DOWN,
276 	PB_CONFIG_PAL_G_UP,
277 	PB_CONFIG_PAL_B_DOWN,
278 	PB_CONFIG_PAL_B_UP,
279 	PB_CONFIG_PAL_CONT_DOWN,
280 	PB_CONFIG_PAL_CONT_UP,
281 
282 	// CONFIG MISCELLANEOUS
283 	PB_CONFIG_QUANTIZE_UP,
284 	PB_CONFIG_QUANTIZE_DOWN,
285 	PB_CONFIG_MIDICHN_UP,
286 	PB_CONFIG_MIDICHN_DOWN,
287 	PB_CONFIG_MIDITRANS_UP,
288 	PB_CONFIG_MIDITRANS_DOWN,
289 	PB_CONFIG_MIDISENS_DOWN,
290 	PB_CONFIG_MIDISENS_UP,
291 
292 #ifdef HAS_MIDI
293 	// CONFIG MIDI
294 	PB_CONFIG_MIDI_INPUT_DOWN,
295 	PB_CONFIG_MIDI_INPUT_UP,
296 #endif
297 
298 	// DISK OP.
299 	PB_DISKOP_SAVE,
300 	PB_DISKOP_DELETE,
301 	PB_DISKOP_RENAME,
302 	PB_DISKOP_MAKEDIR,
303 	PB_DISKOP_REFRESH,
304 	PB_DISKOP_SET_PATH,
305 	PB_DISKOP_SHOW_ALL,
306 	PB_DISKOP_EXIT,
307 	PB_DISKOP_ROOT,
308 	PB_DISKOP_PARENT,
309 #ifdef _WIN32
310 	PB_DISKOP_DRIVE1,
311 	PB_DISKOP_DRIVE2,
312 	PB_DISKOP_DRIVE3,
313 	PB_DISKOP_DRIVE4,
314 	PB_DISKOP_DRIVE5,
315 	PB_DISKOP_DRIVE6,
316 	PB_DISKOP_DRIVE7,
317 	PB_DISKOP_DRIVE8,
318 #endif
319 	PB_DISKOP_LIST_UP,
320 	PB_DISKOP_LIST_DOWN,
321 
322 	// WAV RENDERER
323 	PB_WAV_RENDER,
324 	PB_WAV_EXIT,
325 	PB_WAV_FREQ_UP,
326 	PB_WAV_FREQ_DOWN,
327 	PB_WAV_AMP_UP,
328 	PB_WAV_AMP_DOWN,
329 	PB_WAV_START_UP,
330 	PB_WAV_START_DOWN,
331 	PB_WAV_END_UP,
332 	PB_WAV_END_DOWN,
333 
334 	NUM_PUSHBUTTONS
335 };
336 
337 enum
338 {
339 	PUSHBUTTON_UNPRESSED = 0,
340 	PUSHBUTTON_PRESSED   = 1
341 };
342 
343 // amount of frames to wait
344 #define BUTTON_DOWN_DELAY 25
345 
346 // font #1/#2 special characters (used for buttons)
347 #define ARROW_UP_STRING "\x05"
348 #define ARROW_DOWN_STRING "\x03"
349 #define ARROW_LEFT_STRING "\x1E"
350 #define ARROW_RIGHT_STRING "\x1F"
351 #define SMALL_1_STRING "\x08"
352 #define SMALL_2_STRING "\x09"
353 #define SMALL_3_STRING "\x0A"
354 #define SMALL_4_STRING "\x0B"
355 #define SMALL_5_STRING "\x0C"
356 #define SMALL_6_STRING "\x0D"
357 
358 typedef struct pushButton_t // DO NOT TOUCH!
359 {
360 	uint16_t x, y, w, h;
361 	uint8_t preDelay, delayFrames;
362 	char *caption, *caption2;
363 	void (*callbackFuncOnDown)(void);
364 	void (*callbackFuncOnUp)(void);
365 	uint8_t state;
366 	bool bitmapFlag, visible;
367 	const uint8_t *bitmapUnpressed;
368 	const uint8_t *bitmapPressed;
369 } pushButton_t;
370 
371 void drawPushButton(uint16_t pushButtonID);
372 void showPushButton(uint16_t pushButtonID);
373 void hidePushButton(uint16_t pushButtonID);
374 void handlePushButtonsWhileMouseDown(void);
375 bool testPushButtonMouseDown(void);
376 int16_t testPushButtonMouseRelease(bool runCallback);
377