/* This uses four types of ctrls 1) The pull-down menu. 2) The CCtrl type for the tempo/stacatto sliders. 3) The active CDoc sprite bttns with macros for left/record/play/right. 4) Hand-made ctrls for the kbdgraphic, notes and staff. This uses four types of output 1) The CDoc for the text and bttns and kbdgraphic. 2) The Fs->draw_it() for the staff region, drawn every refresh. 3) The gr.dc persistent layer for the note chooser, meter chooser. The persistent layer is used during drag-and-drop. 4) The Fs->next_ctrl for the tempo/stacatto sliders. See GrUpdateTaskWin(), GrUpdateTasks() and GrUpdateScreen(). */ #define PSMT_HEAD 0 #define PSMT_NOTE 1 #define PSMT_METER 2 #define PSMf_SEL 0 #define PSMF_SEL 1 #define PSMf_SHARP 1 #define PSMf_FLAT 2 #define PSMf_TIE 3 class PsmNote { PsmNote *next, *last; I64 x, y; U8 *word; I64 type, flags; I64 ona, meter_top, meter_bottom; I64 duration, width; U8 ascii[32]; }; //Tool types #define PSMTT_PTR_TOOL 0 #define PSMTT_BOX_TOOL 1 class PsmCtrl { PsmNote head; PsmNote clip; CMenuEntry *incomplete_entry, *record_entry; I64 screen_x, tool; PsmNote *cur_note; CDC *dc2; Bool playing; } psm; U8 *psm_note_list = "A\0A#\0B\0C\0C#\0D\0D#\0E\0F\0F#\0G\0G#\0"; U8 psm_note_map[12] = {6, 6, 5, 4, 4, 3, 3, 2, 1, 1, 0, 0}; U8 psm_note_inverse_map[7] = {10, 8, 7, 5, 3, 2, 0};