Edouard@3627: // widget_assign.ysl2 Edouard@3627: Edouard@3627: widget_desc("Assign") { Edouard@3627: longdesc Edouard@3627: || Edouard@3627: Edouard@3627: Arguments are either: Edouard@3627: Edouard@3627: - name=value: setting variable with literal value. Edouard@3627: - name=other_name: copy variable content into another Edouard@3627: Edouard@3627: "active"+"inactive" labeled elements can be provided to show feedback when pressed Edouard@3627: Edouard@3627: Exemples: Edouard@3627: Edouard@3627: HMI:Assign:notify=1@notify=/PLCVAR Edouard@3627: HMI:Assign:ack=2:notify=1@ack=.local_var@notify=/PLCVAR Edouard@3627: Edouard@3627: || Edouard@3627: Edouard@3627: shortdesc > Assign variables on click Edouard@3627: Edouard@3627: } Edouard@3627: Edouard@3627: widget_class("Assign") { Edouard@3627: || Edouard@3627: frequency = 2; Edouard@3627: Edouard@3627: onmouseup(evt) { Edouard@3627: svg_root.removeEventListener("pointerup", this.bound_onmouseup, true); Edouard@3627: if(this.enable_state) { Edouard@3627: this.activity_state = false Edouard@3627: this.request_animate(); Edouard@3627: this.assign(); Edouard@3627: } Edouard@3627: } Edouard@3627: Edouard@3627: onmousedown(){ Edouard@3627: if(this.enable_state) { Edouard@3627: svg_root.addEventListener("pointerup", this.bound_onmouseup, true); Edouard@3627: this.activity_state = true; Edouard@3627: this.request_animate(); Edouard@3627: } Edouard@3627: } Edouard@3627: Edouard@3627: || Edouard@3627: } Edouard@3627: Edouard@3627: widget_defs("Assign") { Edouard@3627: optional_activable(); Edouard@3627: Edouard@3627: | init: function() { Edouard@3627: | this.bound_onmouseup = this.onmouseup.bind(this); Edouard@3627: | this.element.addEventListener("pointerdown", this.onmousedown.bind(this)); Edouard@3627: | }, Edouard@3627: Edouard@3627: | assignments: {}, Edouard@3627: | dispatch: function(value, oldval, varnum) { Edouard@3627: const "widget", "."; Edouard@3627: foreach "path" { Edouard@3627: const "varid","generate-id()"; Edouard@3627: const "varnum","position()-1"; Edouard@3627: if "@assign" foreach "$widget/path[@assign]" if "$varid = generate-id()" { Edouard@3627: | if(varnum == «$varnum») this.assignments["«@assign»"] = value; Edouard@3627: } Edouard@3627: } Edouard@3627: | }, Edouard@3627: | assign: function() { Edouard@3627: const "paths","path"; Edouard@3627: foreach "arg[contains(@value,'=')]"{ Edouard@3627: const "name","substring-before(@value,'=')"; Edouard@3627: const "value","substring-after(@value,'=')"; Edouard@3627: const "index" foreach "$paths" if "@assign = $name" value "position()-1"; edouard@3922: const "isVarName", "regexp:test($value,'^[a-zA-Z_][a-zA-Z0-9_]*$')"; Edouard@3627: choose { Edouard@3627: when "$isVarName"{ Edouard@3627: | const «$value» = this.assignments["«$value»"]; Edouard@3627: | if(«$value» != undefined) Edouard@3627: | this.apply_hmi_value(«$index», «$value»); Edouard@3627: } Edouard@3627: otherwise { Edouard@3627: | this.apply_hmi_value(«$index», «$value»); Edouard@3627: } Edouard@3627: } Edouard@3627: } Edouard@3627: | }, Edouard@3627: } Edouard@3627: