svghmi/widget_input.ysl2
branchsvghmi
changeset 3094 3e184f1e1012
parent 3034 793ce2117258
child 3100 c51f9cf365c6
--- a/svghmi/widget_input.ysl2	Fri Dec 18 11:50:28 2020 +0100
+++ b/svghmi/widget_input.ysl2	Fri Dec 18 15:52:58 2020 +0100
@@ -1,48 +1,63 @@
 // widget_input.ysl2
 
+template "widget[@type='Input']", mode="widget_class"{
+||
+    class InputWidget extends Widget{
+         on_op_click(opstr) {
+             let new_val = this.change_hmi_value(0, opstr);
+         }
+         edit_callback(new_val) {
+             this.apply_hmi_value(0, new_val);
+         }
+    }
+||
+}
+
 template "widget[@type='Input']", mode="widget_defs" {
     param "hmi_element";
-    optional_labels("key_pos");
-    const "value_elt" {
-        optional_labels("value");
-    }
+
+    const "key_pos_elt" optional_labels("key_pos");
+    value "$key_pos_elt";
+
+    const "value_elt" optional_labels("value");
     const "have_value","string-length($value_elt)>0";
     value "$value_elt";
+
+    const "edit_elt" optional_labels("edit");
+    const "have_edit","string-length($edit_elt)>0";
+    value "$edit_elt";
+
     if "$have_value"
     |     frequency: 5,
-    |     last_val: undefined,
+
     |     dispatch: function(value) {
+
+    if "$have_edit"
     |         this.last_val = value;
+
     if "$have_value"
     |         this.value_elt.textContent = String(value);
 
     |     },
-    const "edit_elt_id","$hmi_element/*[@inkscape:label='edit'][1]/@id";
+
     |     init: function() {
-    if "$edit_elt_id" {
-    |         id("«$edit_elt_id»").setAttribute("onclick", "hmi_widgets['«$hmi_element/@id»'].on_edit_click()");
+
+    if "$have_edit" {
+    |         this.edit_elt.onclick = () => edit_value(
+    |             "«path/@value»", "«path/@type»",
+    |             this, this.last_val, 
+        choose {
+            when "string-length($key_pos_elt)>0"
+    |             this.key_pos_elt.getBBox()
+            otherwise
+    |             undefined
+        }
+    |         );
     }
+
     foreach "$hmi_element/*[regexp:test(@inkscape:label,'^[=+\-].+')]" {
-    |         id("«@id»").setAttribute("onclick", "hmi_widgets['«$hmi_element/@id»'].on_op_click('«func:escape_quotes(@inkscape:label)»')");
+    |         id("«@id»").onclick = () => this.on_op_click("«func:escape_quotes(@inkscape:label)»");
     }
-    |     },
-    |     on_op_click: function(opstr) {
-    |         let new_val = this.change_hmi_value(0, opstr);
-    //     if "$have_value"{
-    // |         this.value_elt.textContent = String(new_val);
-    //           /* TODO gray out value until refreshed */
-    //     }
-    |     },
-    |     on_edit_click: function(opstr) {
-    |         var size = (typeof this.key_pos_elt !== 'undefined') ?  this.key_pos_elt.getBBox() : undefined
-    |         edit_value("«path/@value»", "«path/@type»", this, this.last_val, size);
-    |     },
 
-    |     edit_callback: function(new_val) {
-    |         this.apply_hmi_value(0, new_val);
-    //     if "$have_value"{
-    // |         this.value_elt.textContent = String(new_val);
-    //           /* TODO gray out value until refreshed */
-    //     }
     |     },
 }