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