/* 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 GrUpdateScrn(). */ #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 scrn_x,tool; PsmNote *cur_note; CDC *dc2; Bool playing; } psm; U8 *psm_note_lst="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};