constructor()

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();
            }


        }