322 } |
322 } |
323 | }, |
323 | }, |
324 |
324 |
325 } |
325 } |
326 template "widget[@type='Meter']", mode="widget_defs" { |
326 template "widget[@type='Meter']", mode="widget_defs" { |
|
327 param "hmi_element"; |
327 | frequency: 10, |
328 | frequency: 10, |
328 } |
329 foreach "str:split('value min max needle range')" { |
|
330 const "name","."; |
|
331 const "elt_id","$hmi_element//*[@inkscape:label=$name][1]/@id"; |
|
332 if "not($elt_id)" error > Meter widget must have a «$name» element |
|
333 | «$name»_elt: document.getElementById("«$elt_id»"), |
|
334 } |
|
335 | dispatch: function(value) { |
|
336 | this.value_elt.textContent = String(value); |
|
337 | let [min,max,totallength] = this.range; |
|
338 | let length = Math.max(0,Math.min(totallength,(Number(value)-min)*totallength/(max-min))); |
|
339 | let tip = this.range_elt.getPointAtLength(length); |
|
340 | this.needle_elt.setAttribute('d', "M "+this.origin.x+","+this.origin.y+" "+tip.x+","+tip.y); |
|
341 | }, |
|
342 | origin: undefined, |
|
343 | range: undefined, |
|
344 | init: function() { |
|
345 | this.range = [Number(this.min_elt.textContent), Number(this.max_elt.textContent), this.range_elt.getTotalLength()] |
|
346 | this.origin = this.needle_elt.getPointAtLength(0); |
|
347 | }, |
|
348 } |
|
349 |
329 template "widget[@type='Input']", mode="widget_defs" { |
350 template "widget[@type='Input']", mode="widget_defs" { |
330 param "hmi_element"; |
351 param "hmi_element"; |
331 | frequency: 5, |
352 | frequency: 5, |
332 const "value_elt_id","$hmi_element//*[self::svg:text][@inkscape:label='value'][1]/@id"; |
353 const "value_elt_id","$hmi_element//*[self::svg:text][@inkscape:label='value'][1]/@id"; |
333 if "not($value_elt_id)" error > Input widget must have a text element |
354 if "not($value_elt_id)" error > Input widget must have a text element |