svghmi/widget_meter.ysl2
author Edouard Tisserant <edouard.tisserant@gmail.com>
Mon, 23 Mar 2020 21:44:28 +0100
branchsvghmi
changeset 2894 4cf9ad35e6d0
parent 2883 8e3d130399b0
child 3045 f6d428330e04
permissions -rw-r--r--
SVGHMI: Easier way to match HMI tree elements to paths. ForEach widget now looks for paths and indexes of all items, and enforce path to be consistent with ForEach items sub widgets
// widget_meter.ysl2


template "widget[@type='Meter']", mode="widget_defs" {
    param "hmi_element";
    |     frequency: 10,
    labels("needle range");
    optional_labels("value min max");
    |     dispatch: function(value) {
    |         if(this.value_elt)
    |             this.value_elt.textContent = String(value);
    |         let [min,max,totallength] = this.range;
    |         let length = Math.max(0,Math.min(totallength,(Number(value)-min)*totallength/(max-min)));
    |         let tip = this.range_elt.getPointAtLength(length);
    |         this.needle_elt.setAttribute('d', "M "+this.origin.x+","+this.origin.y+" "+tip.x+","+tip.y);
    |     },
    |     origin: undefined,
    |     range: undefined,
    |     init: function() {
    |         let min = this.min_elt ?
    |                     Number(this.min_elt.textContent) :
    |                     this.args.length >= 1 ? this.args[0] : 0;
    |         let max = this.max_elt ?
    |                     Number(this.max_elt.textContent) :
    |                     this.args.length >= 2 ? this.args[1] : 100;
    |         this.range = [min, max, this.range_elt.getTotalLength()]
    |         this.origin = this.needle_elt.getPointAtLength(0);
    |     },
}