IDE: Make ST code generation more verbose, since it can be really long in case of big programs, and it is better to let the user know build is still in progress.
// 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
if (this.state) {
this.state = 0;
} else {
this.state = 1;
}
this.apply_hmi_value(0, this.state);
//redraw toggle button
this.request_animate();
}
animate(){
// redraw toggle button on screen refresh
if (this.state) {
this.active_elt.setAttribute("style", this.active_style);
this.inactive_elt.setAttribute("style", "display:none");
} else {
this.inactive_elt.setAttribute("style", this.inactive_style);
this.active_elt.setAttribute("style", "display:none");
}
}
init() {
this.active_style = this.active_elt ? this.active_elt.style.cssText : undefined;
this.inactive_style = this.inactive_elt ? this.inactive_elt.style.cssText : undefined;
if (this.active_style && this.inactive_style) {
this.active_elt.setAttribute("style", "display:none");
this.inactive_elt.setAttribute("style", this.inactive_style);
}
this.element.setAttribute("onclick", "hmi_widgets['"+this.element_id+"'].on_click(evt)");
}
}
||
}
template "widget[@type='ToggleButton']", mode="widget_defs" {
param "hmi_element";
optional_labels("active inactive");
|,
}