svghmi/widget_meter.ysl2
branchsvghmi
changeset 3045 f6d428330e04
parent 2883 8e3d130399b0
child 3104 14d15712fcca
equal deleted inserted replaced
3029:61b0491fe05b 3045:f6d428330e04
     1 // widget_meter.ysl2
     1 // widget_meter.ysl2
     2 
     2 
       
     3 template "widget[@type='Meter']", mode="widget_class"{
       
     4     ||
       
     5     class MeterWidget extends Widget{
       
     6         frequency = 10;
       
     7         origin = undefined;
       
     8         range = undefined;
       
     9 
       
    10         dispatch(value) {
       
    11             if(this.value_elt)
       
    12                 this.value_elt.textContent = String(value);
       
    13             let [min,max,totallength] = this.range;
       
    14             let length = Math.max(0,Math.min(totallength,(Number(value)-min)*totallength/(max-min)));
       
    15             let tip = this.range_elt.getPointAtLength(length);
       
    16             this.needle_elt.setAttribute('d', "M "+this.origin.x+","+this.origin.y+" "+tip.x+","+tip.y);
       
    17         }
       
    18 
       
    19         init() {
       
    20             let min = this.min_elt ?
       
    21                         Number(this.min_elt.textContent) :
       
    22                         this.args.length >= 1 ? this.args[0] : 0;
       
    23             let max = this.max_elt ?
       
    24                         Number(this.max_elt.textContent) :
       
    25                         this.args.length >= 2 ? this.args[1] : 100;
       
    26             this.range = [min, max, this.range_elt.getTotalLength()]
       
    27             this.origin = this.needle_elt.getPointAtLength(0);
       
    28         }
       
    29 
       
    30     }
       
    31     ||
       
    32 }
     3 
    33 
     4 template "widget[@type='Meter']", mode="widget_defs" {
    34 template "widget[@type='Meter']", mode="widget_defs" {
     5     param "hmi_element";
    35     param "hmi_element";
     6     |     frequency: 10,
       
     7     labels("needle range");
    36     labels("needle range");
     8     optional_labels("value min max");
    37     optional_labels("value min max");
     9     |     dispatch: function(value) {
    38     |,
    10     |         if(this.value_elt)
       
    11     |             this.value_elt.textContent = String(value);
       
    12     |         let [min,max,totallength] = this.range;
       
    13     |         let length = Math.max(0,Math.min(totallength,(Number(value)-min)*totallength/(max-min)));
       
    14     |         let tip = this.range_elt.getPointAtLength(length);
       
    15     |         this.needle_elt.setAttribute('d', "M "+this.origin.x+","+this.origin.y+" "+tip.x+","+tip.y);
       
    16     |     },
       
    17     |     origin: undefined,
       
    18     |     range: undefined,
       
    19     |     init: function() {
       
    20     |         let min = this.min_elt ?
       
    21     |                     Number(this.min_elt.textContent) :
       
    22     |                     this.args.length >= 1 ? this.args[0] : 0;
       
    23     |         let max = this.max_elt ?
       
    24     |                     Number(this.max_elt.textContent) :
       
    25     |                     this.args.length >= 2 ? this.args[1] : 100;
       
    26     |         this.range = [min, max, this.range_elt.getTotalLength()]
       
    27     |         this.origin = this.needle_elt.getPointAtLength(0);
       
    28     |     },
       
    29 }
    39 }
    30 
    40 
    31 
    41