svghmi/widget_input.ysl2
author Edouard Tisserant <edouard.tisserant@gmail.com>
Sun, 14 Feb 2021 05:22:30 +0100
branchsvghmi
changeset 3139 1f5ca646ce6e
parent 3118 e704b0487515
child 3153 671283404554
permissions -rw-r--r--
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
// widget_input.ysl2

template "widget[@type='Input']", mode="widget_class"{
||
    class InputWidget extends Widget{
         on_op_click(opstr) {
             this.change_hmi_value(0, opstr);
         }
         edit_callback(new_val) {
             this.apply_hmi_value(0, new_val);
         }

         overshot(new_val, max) {
             this.last_display = "max: "+max;
             this.request_animate();
         }

         undershot(new_val, min) {
             this.last_display = "min: "+min;
             this.request_animate();
         }


    }
||
}

template "widget[@type='Input']", mode="widget_defs" {
    param "hmi_element";

    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,

    |     dispatch: function(value) {

    if "$have_edit"
    |         this.last_val = value;

    if "$have_value" {
    |         this.last_display = value;
    |         this.request_animate();
    }
    |     },

    if "$have_value" {
    |     animate: function(){
    |         this.value_elt.textContent = String(this.last_display);
    |     },
    }

    |     init: function() {

    if "$have_edit" {
    |         this.edit_elt.onclick = () => edit_value("«path/@value»", "«path/@type»", this, this.last_val);
    }

    foreach "$hmi_element/*[regexp:test(@inkscape:label,'^[=+\-].+')]" {
    |         id("«@id»").onclick = () => this.on_op_click("«func:escape_quotes(@inkscape:label)»");
    }

    |     },
}