in sim/visuals/board.ts [114:182]
constructor(public props: MetroBoardProps) {
super(props);
const el = this.getView().el;
this.addDefs(el);
this.onBoardLeds = []
this.onBoardNeopixels = [];
this.onBoardTouchPads = [];
this.onBoardButtons = [];
// neopixels/leds
for (const l of props.visualDef.leds || []) {
if (l.color == "neopixel") {
const onBoardNeopixel = new BoardNeopixel(l.label, l.x, l.y, l.w || 0);
this.onBoardNeopixels.push(onBoardNeopixel);
el.appendChild(onBoardNeopixel.element);
} else {
const pin = pinByName(l.label);
if (pin) {
let bl = new BoardLed(l.x, l.y, l.color, pinByName(l.label),
l.w || 9, l.h || 8)
this.onBoardLeds.push(bl)
el.appendChild(bl.element)
}
}
}
this.onBoardNeopixels.sort((l, r) => {
const li = parseInt(l.name.replace(/^[^\d]*/, '')) || 0;
const ri = parseInt(r.name.replace(/^[^\d]*/, '')) || 0;
return li < ri ? -1 : li > ri ? 1 : 0;
})
// reset button
if (props.visualDef.reset) {
this.onBoardReset = new BoardResetButton(props.visualDef.reset)
el.appendChild(this.onBoardReset.element)
}
// touch pads
for (const l of props.visualDef.touchPads || []) {
const pin = pxsim.pinIds[l.label];
if (!pin) {
console.error(`touch pin ${pin} not found`)
continue;
}
const tp = new BoardTouchButton(l, pin);
this.onBoardTouchPads.push(tp);
el.appendChild(tp.element);
}
// regular buttons
for (const l of props.visualDef.buttons || []) {
const tp = new BoardButton(l);
this.onBoardButtons.push(tp);
el.appendChild(tp.element);
}
if (props && props.theme)
this.updateTheme();
if (props && props.runtime) {
this.board = this.props.runtime.board as pxsim.DalBoard;
this.board.updateSubscribers.push(() => this.updateState());
this.updateState();
}
}