ref: aeac73410477e8b27294e2d035c1710948c95303
dir: /src/ft2_pushbuttons.h/
#pragma once
#include <stdint.h>
#include <stdbool.h>
enum // PUSHBUTTONS
{
// reserved
PB_RES_1,
PB_RES_2,
PB_RES_3,
PB_RES_4,
PB_RES_5,
PB_RES_6,
PB_RES_7,
PB_RES_8,
// POSITION EDITOR
PB_POSED_POS_UP,
PB_POSED_POS_DOWN,
PB_POSED_INS,
PB_POSED_PATT_UP,
PB_POSED_PATT_DOWN,
PB_POSED_DEL,
PB_POSED_LEN_UP,
PB_POSED_LEN_DOWN,
PB_POSED_REP_UP,
PB_POSED_REP_DOWN,
// SONG/PATTERN
PB_BPM_UP,
PB_BPM_DOWN,
PB_SPEED_UP,
PB_SPEED_DOWN,
PB_EDITADD_UP,
PB_EDITADD_DOWN,
PB_PATT_UP,
PB_PATT_DOWN,
PB_PATTLEN_UP,
PB_PATTLEN_DOWN,
PB_PATT_EXPAND,
PB_PATT_SHRINK,
// LOGO
PB_LOGO,
PB_BADGE,
// MAIN MENU
PB_ABOUT,
PB_NIBBLES,
PB_KILL,
PB_TRIM,
PB_EXTEND_VIEW,
PB_TRANSPOSE,
PB_INST_ED_EXT,
PB_SMP_ED_EXT,
PB_ADV_EDIT,
PB_ADD_CHANNELS,
PB_SUB_CHANNELS,
PB_PLAY_SONG,
PB_PLAY_PATT,
PB_STOP,
PB_RECORD_SONG,
PB_RECORD_PATT,
PB_DISK_OP,
PB_INST_ED,
PB_SMP_ED,
PB_CONFIG,
PB_HELP,
PB_EXIT_EXT_PATT,
// INSTRUMENT SWITCHER
PB_RANGE1,
PB_RANGE2,
PB_RANGE3,
PB_RANGE4,
PB_RANGE5,
PB_RANGE6,
PB_RANGE7,
PB_RANGE8,
PB_RANGE9,
PB_RANGE10,
PB_RANGE11,
PB_RANGE12,
PB_RANGE13,
PB_RANGE14,
PB_RANGE15,
PB_RANGE16,
PB_SWAP_BANK,
PB_SAMPLE_LIST_UP,
PB_SAMPLE_LIST_DOWN,
// NIBBLES SCREEN
PB_NIBBLES_PLAY,
PB_NIBBLES_HELP,
PB_NIBBLES_HIGHS,
PB_NIBBLES_EXIT,
// ADVANCED EDIT
PB_REMAP_TRACK,
PB_REMAP_PATTERN,
PB_REMAP_SONG,
PB_REMAP_BLOCK,
// ABOUT SCREEN
PB_EXIT_ABOUT,
// HELP SCREEN
PB_HELP_EXIT,
PB_HELP_SCROLL_UP,
PB_HELP_SCROLL_DOWN,
// PATTERN EDITOR
PB_CHAN_SCROLL_LEFT,
PB_CHAN_SCROLL_RIGHT,
// TRANSPOSE
PB_TRANSP_CUR_INS_TRK_UP,
PB_TRANSP_CUR_INS_TRK_DN,
PB_TRANSP_CUR_INS_TRK_12UP,
PB_TRANSP_CUR_INS_TRK_12DN,
PB_TRANSP_ALL_INS_TRK_UP,
PB_TRANSP_ALL_INS_TRK_DN,
PB_TRANSP_ALL_INS_TRK_12UP,
PB_TRANSP_ALL_INS_TRK_12DN,
PB_TRANSP_CUR_INS_PAT_UP,
PB_TRANSP_CUR_INS_PAT_DN,
PB_TRANSP_CUR_INS_PAT_12UP,
PB_TRANSP_CUR_INS_PAT_12DN,
PB_TRANSP_ALL_INS_PAT_UP,
PB_TRANSP_ALL_INS_PAT_DN,
PB_TRANSP_ALL_INS_PAT_12UP,
PB_TRANSP_ALL_INS_PAT_12DN,
PB_TRANSP_CUR_INS_SNG_UP,
PB_TRANSP_CUR_INS_SNG_DN,
PB_TRANSP_CUR_INS_SNG_12UP,
PB_TRANSP_CUR_INS_SNG_12DN,
PB_TRANSP_ALL_INS_SNG_UP,
PB_TRANSP_ALL_INS_SNG_DN,
PB_TRANSP_ALL_INS_SNG_12UP,
PB_TRANSP_ALL_INS_SNG_12DN,
PB_TRANSP_CUR_INS_BLK_UP,
PB_TRANSP_CUR_INS_BLK_DN,
PB_TRANSP_CUR_INS_BLK_12UP,
PB_TRANSP_CUR_INS_BLK_12DN,
PB_TRANSP_ALL_INS_BLK_UP,
PB_TRANSP_ALL_INS_BLK_DN,
PB_TRANSP_ALL_INS_BLK_12UP,
PB_TRANSP_ALL_INS_BLK_12DN,
// SAMPLE EDITOR
PB_SAMP_SCROLL_LEFT,
PB_SAMP_SCROLL_RIGHT,
PB_SAMP_PNOTE_UP,
PB_SAMP_PNOTE_DOWN,
PB_SAMP_STOP,
PB_SAMP_PWAVE,
PB_SAMP_PRANGE,
PB_SAMP_PDISPLAY,
PB_SAMP_SHOW_RANGE,
PB_SAMP_RANGE_ALL,
PB_SAMP_CLR_RANGE,
PB_SAMP_ZOOM_OUT,
PB_SAMP_SHOW_ALL,
PB_SAMP_SAVE_RNG,
PB_SAMP_CUT,
PB_SAMP_COPY,
PB_SAMP_PASTE,
PB_SAMP_CROP,
PB_SAMP_VOLUME,
PB_SAMP_XFADE,
PB_SAMP_EXIT,
PB_SAMP_CLEAR,
PB_SAMP_MIN,
PB_SAMP_REPEAT_UP,
PB_SAMP_REPEAT_DOWN,
PB_SAMP_REPLEN_UP,
PB_SAMP_REPLEN_DOWN,
// SAMPLE EDITOR EXTENSION
PB_SAMP_EXT_CLEAR_COPYBUF,
PB_SAMP_EXT_CONV,
PB_SAMP_EXT_ECHO,
PB_SAMP_EXT_BACKWARDS,
PB_SAMP_EXT_CONV_W,
PB_SAMP_EXT_MORPH,
PB_SAMP_EXT_COPY_INS,
PB_SAMP_EXT_COPY_SMP,
PB_SAMP_EXT_XCHG_INS,
PB_SAMP_EXT_XCHG_SMP,
PB_SAMP_EXT_RESAMPLE,
PB_SAMP_EXT_MIX_SAMPLE,
// INSTRUMENT EDITOR
PB_INST_VDEF1,
PB_INST_VDEF2,
PB_INST_VDEF3,
PB_INST_VDEF4,
PB_INST_VDEF5,
PB_INST_VDEF6,
PB_INST_PDEF1,
PB_INST_PDEF2,
PB_INST_PDEF3,
PB_INST_PDEF4,
PB_INST_PDEF5,
PB_INST_PDEF6,
PB_INST_VP_ADD,
PB_INST_VP_DEL,
PB_INST_VS_UP,
PB_INST_VS_DOWN,
PB_INST_VREPS_UP,
PB_INST_VREPS_DOWN,
PB_INST_VREPE_UP,
PB_INST_VREPE_DOWN,
PB_INST_PP_ADD,
PB_INST_PP_DEL,
PB_INST_PS_UP,
PB_INST_PS_DOWN,
PB_INST_PREPS_UP,
PB_INST_PREPS_DOWN,
PB_INST_PREPE_UP,
PB_INST_PREPE_DOWN,
PB_INST_VOL_DOWN,
PB_INST_VOL_UP,
PB_INST_PAN_DOWN,
PB_INST_PAN_UP,
PB_INST_FTUNE_DOWN,
PB_INST_FTUNE_UP,
PB_INST_FADEOUT_DOWN,
PB_INST_FADEOUT_UP,
PB_INST_VIBSPEED_DOWN,
PB_INST_VIBSPEED_UP,
PB_INST_VIBDEPTH_DOWN,
PB_INST_VIBDEPTH_UP,
PB_INST_VIBSWEEP_DOWN,
PB_INST_VIBSWEEP_UP,
PB_INST_EXIT,
PB_INST_OCT_UP,
PB_INST_HALFTONE_UP,
PB_INST_OCT_DOWN,
PB_INST_HALFTONE_DOWN,
// INSTRUMENT EDITOR EXTENSION
PB_INST_EXT_MIDI_CH_DOWN,
PB_INST_EXT_MIDI_CH_UP,
PB_INST_EXT_MIDI_PRG_DOWN,
PB_INST_EXT_MIDI_PRG_UP,
PB_INST_EXT_MIDI_BEND_DOWN,
PB_INST_EXT_MIDI_BEND_UP,
// TRIM SCREEN
PB_TRIM_CALC,
PB_TRIM_TRIM,
// CONFIG LEFT PANEL
PB_CONFIG_RESET,
PB_CONFIG_LOAD,
PB_CONFIG_SAVE,
PB_CONFIG_EXIT,
// CONFIG AUDIO
PB_CONFIG_AUDIO_RESCAN,
PB_CONFIG_AUDIO_OUTPUT_DOWN,
PB_CONFIG_AUDIO_OUTPUT_UP,
PB_CONFIG_AUDIO_INPUT_DOWN,
PB_CONFIG_AUDIO_INPUT_UP,
PB_CONFIG_AMP_DOWN,
PB_CONFIG_AMP_UP,
PB_CONFIG_MASTVOL_DOWN,
PB_CONFIG_MASTVOL_UP,
// CONFIG LAYOUT
PB_CONFIG_PAL_R_DOWN,
PB_CONFIG_PAL_R_UP,
PB_CONFIG_PAL_G_DOWN,
PB_CONFIG_PAL_G_UP,
PB_CONFIG_PAL_B_DOWN,
PB_CONFIG_PAL_B_UP,
PB_CONFIG_PAL_CONT_DOWN,
PB_CONFIG_PAL_CONT_UP,
// CONFIG MISCELLANEOUS
PB_CONFIG_QUANTIZE_UP,
PB_CONFIG_QUANTIZE_DOWN,
PB_CONFIG_MIDICHN_UP,
PB_CONFIG_MIDICHN_DOWN,
PB_CONFIG_MIDITRANS_UP,
PB_CONFIG_MIDITRANS_DOWN,
PB_CONFIG_MIDISENS_DOWN,
PB_CONFIG_MIDISENS_UP,
#ifdef HAS_MIDI
// CONFIG MIDI
PB_CONFIG_MIDI_INPUT_DOWN,
PB_CONFIG_MIDI_INPUT_UP,
#endif
// DISK OP.
PB_DISKOP_SAVE,
PB_DISKOP_DELETE,
PB_DISKOP_RENAME,
PB_DISKOP_MAKEDIR,
PB_DISKOP_REFRESH,
PB_DISKOP_SET_PATH,
PB_DISKOP_SHOW_ALL,
PB_DISKOP_EXIT,
PB_DISKOP_ROOT,
PB_DISKOP_PARENT,
#ifdef _WIN32
PB_DISKOP_DRIVE1,
PB_DISKOP_DRIVE2,
PB_DISKOP_DRIVE3,
PB_DISKOP_DRIVE4,
PB_DISKOP_DRIVE5,
PB_DISKOP_DRIVE6,
PB_DISKOP_DRIVE7,
PB_DISKOP_DRIVE8,
#endif
PB_DISKOP_LIST_UP,
PB_DISKOP_LIST_DOWN,
// WAV RENDERER
PB_WAV_RENDER,
PB_WAV_EXIT,
PB_WAV_FREQ_UP,
PB_WAV_FREQ_DOWN,
PB_WAV_AMP_UP,
PB_WAV_AMP_DOWN,
PB_WAV_START_UP,
PB_WAV_START_DOWN,
PB_WAV_END_UP,
PB_WAV_END_DOWN,
NUM_PUSHBUTTONS
};
enum
{
PUSHBUTTON_UNPRESSED = 0,
PUSHBUTTON_PRESSED = 1
};
// amount of frames to wait
#define BUTTON_DOWN_DELAY 25
// font #1/#2 special characters (used for buttons)
#define ARROW_UP_STRING "\x05"
#define ARROW_DOWN_STRING "\x03"
#define ARROW_LEFT_STRING "\x1E"
#define ARROW_RIGHT_STRING "\x1F"
#define SMALL_1_STRING "\x08"
#define SMALL_2_STRING "\x09"
#define SMALL_3_STRING "\x0A"
#define SMALL_4_STRING "\x0B"
#define SMALL_5_STRING "\x0C"
#define SMALL_6_STRING "\x0D"
typedef struct pushButton_t // DO NOT TOUCH!
{
uint16_t x, y, w, h;
uint8_t preDelay, delayFrames;
char *caption, *caption2;
void (*callbackFuncOnDown)(void);
void (*callbackFuncOnUp)(void);
uint8_t state;
bool bitmapFlag, visible;
const uint8_t *bitmapUnpressed;
const uint8_t *bitmapPressed;
} pushButton_t;
void drawPushButton(uint16_t pushButtonID);
void showPushButton(uint16_t pushButtonID);
void hidePushButton(uint16_t pushButtonID);
void handlePushButtonsWhileMouseDown(void);
bool testPushButtonMouseDown(void);
int16_t testPushButtonMouseRelease(bool runCallback);