forked from eanders-ms/microcode
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfieldeditors.ts
More file actions
124 lines (118 loc) · 4.3 KB
/
fieldeditors.ts
File metadata and controls
124 lines (118 loc) · 4.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
namespace microcode {
export function iconEditor(
image5x5: Image,
picker: Picker,
onHide: () => void,
onDelete?: () => void
) {
const getColor = (col: number, row: number) => {
return image5x5.getPixel(col, row) ? "solid_red" : "solid_black"
}
for (let row = 0; row < 5; row++) {
let btns: PickerButtonDef[] = []
for (let col = 0; col < 5; col++) {
btns.push({
icon: getColor(col, row),
style: ButtonStyles.Transparent,
})
}
picker.addGroup({ btns })
}
const red = icons.get("solid_red")
const black = icons.get("solid_black")
picker.show(
{
title: accessibility.ariaToTooltip(TID_MODIFIER_ICON_EDITOR),
onClick: (iconId: any, button: PickerButton) => {
let on = button.getIcon() === "solid_red"
let row = 0,
col = 0
for (; row < 5; row++) {
let index =
button.picker.groups[row].buttons.indexOf(button)
if (index >= 0) {
col = index
break
}
}
image5x5.setPixel(col, row, on ? 0 : 1)
button.setIcon(getColor(col, row), on ? black : red)
button.draw()
picker.navigator.updateAria()
//control.heapSnapshot()
},
onHide,
onDelete,
navigator: () => new LEDNavigator(),
},
false
)
}
export function melodyEditor(
melody: Melody,
picker: Picker,
onHide: () => void,
onDelete?: () => void
) {
const getIcon = (col: number, row: number) => {
const note_icon =
melody.notes[col] === "."
? "note_off"
: parseInt(melody.notes[col]) === NUM_NOTES - 1 - row
? "note_on"
: "note_off"
return note_icon
}
for (let row = 0; row < NUM_NOTES; row++) {
let btns: PickerButtonDef[] = []
for (let col = 0; col < MELODY_LENGTH; col++) {
btns.push({
icon: getIcon(col, row),
style: ButtonStyles.Transparent,
})
}
picker.addGroup({ btns })
}
picker.show(
{
title: accessibility.ariaToTooltip(TID_MODIFIER_MELODY_EDITOR),
onClick: (iconId: any, button: PickerButton) => {
let row = 0,
col = 0
// note that this row is graphics, not music
for (; row < NUM_NOTES; row++) {
let index =
button.picker.groups[row].buttons.indexOf(button)
if (index >= 0) {
col = index
break
}
}
if (getIcon(col, row) !== "note_on") {
const note = (NUM_NOTES - 1 - row).toString()
const buf = Buffer.create(6)
setNote(buf, 0, note)
new jacs.TopWriter().deployFreq(buf)
}
melody.notes =
melody.notes.slice(0, col) +
(getIcon(col, row) === "note_on"
? "."
: (NUM_NOTES - 1 - row).toString()) +
melody.notes.slice(col + 1)
for (row = 0; row < NUM_NOTES; row++) {
button.picker.groups[row].buttons[col].setIcon(
getIcon(col, row)
)
}
picker.draw()
picker.navigator.updateAria()
},
onHide,
onDelete,
navigator: () => new MelodyNavigator(),
},
false
)
}
}