svghmi/widget_tooglebutton.ysl2
author Edouard Tisserant <edouard.tisserant@gmail.com>
Mon, 05 Apr 2021 18:22:30 +0200
branchsvghmi
changeset 3222 6adeeb16ac3e
parent 3219 cc0ecc5e918f
child 3232 7bdb766c2a4d
permissions -rw-r--r--
SVGHMI: Widget DnD to Inkscape : Added source SVG widget label parsing and pass selecte HMI subtree to XSLT tranform, so that SVG containing multiple widgets can later be matched against hmi tree fragments, in order to DnD complex groups of widgets.
// widget_tooglebutton.ysl2


template "widget[@type='ToggleButton']", mode="widget_class"{
    ||
    class ToggleButtonWidget extends Widget{
        frequency = 5;
        state = 0;
        active_style = undefined;
        inactive_style = undefined;

        dispatch(value) {
            this.state = value;
            //redraw toggle button
            this.request_animate();
        }

        on_click(evt) {
            //toggle state and apply
            this.state = this.state ? false : true;
            this.apply_hmi_value(0, this.state);

            //redraw toggle button
            this.request_animate();
        }

        activate(val) {
            let [active, inactive] = val ? ["none",""] : ["", "none"];
            if (this.active_elt)
                this.active_elt.style.display = active;
            if (this.inactive_elt)
                this.inactive_elt.style.display = inactive;
        }

        animate(){
            // redraw toggle button on screen refresh
            this.activate(this.state);
        }

        init() {
            this.activate(false);
            this.element.onclick = (evt) => this.on_click(evt);
        }
    }
    ||
}

template "widget[@type='ToggleButton']", mode="widget_defs" {
    param "hmi_element";
    optional_labels("active inactive");
}