// widget_keypad.ysl2 emit "declarations:keypad" { | | var keypads = { foreach "$keypads_descs"{ const "keypad_id","@id"; foreach "arg"{ const "g", "$geometry[@Id = $keypad_id]"; | "«@value»":["«$keypad_id»", «$g/@x», «$g/@y»], } } | } } template "widget[@type='Keypad']", mode="widget_defs" { param "hmi_element"; labels("Esc Enter BackSpace Keys Info Value"); optional_labels("Sign Space NumDot"); activable_labels("CapsLock Shift"); | init: function() { foreach "$hmi_element/*[@inkscape:label = 'Keys']/*" { | id("«@id»").setAttribute("onclick", "hmi_widgets['«$hmi_element/@id»'].on_key_click('«func:escape_quotes(@inkscape:label)»')"); } foreach "str:split('Esc Enter BackSpace Sign Space NumDot CapsLock Shift')" { | if(this.«.»_elt) | this.«.»_elt.setAttribute("onclick", "hmi_widgets['«$hmi_element/@id»'].on_«.»_click()"); } | }, | on_key_click: function(symbols) { | var syms = symbols.split(" "); | this.shift |= this.caps; | this.editstr += syms[this.shift?syms.length-1:0]; | this.shift = false; | this.update(); | }, | on_Esc_click: function() { | end_modal.call(this); | }, | on_Enter_click: function() { | end_modal.call(this); | callback_obj = this.result_callback_obj; | callback_obj.edit_callback(this.editstr); | }, | on_BackSpace_click: function() { | this.editstr = this.editstr.slice(0,this.editstr.length-1); | this.update(); | }, | on_Sign_click: function() { | if(this.editstr[0] == "-") | this.editstr = this.editstr.slice(1,this.editstr.length); | else | this.editstr = "-" + this.editstr; | this.update(); | }, | on_NumDot_click: function() { | if(this.editstr.indexOf(".") == "-1"){ | this.editstr += "."; | this.update(); | } | }, | on_Space_click: function() { | this.editstr += " "; | this.update(); | }, | caps: false, | _caps: undefined, | on_CapsLock_click: function() { | this.caps = !this.caps; | this.update(); | }, | shift: false, | _shift: undefined, | on_Shift_click: function() { | this.shift = !this.shift; | this.caps = false; | this.update(); | }, const "g", "$geometry[@Id = $hmi_element/@id]"; | coordinates: [«$g/@x», «$g/@y»], | editstr: "", | _editstr: undefined, | result_callback_obj: undefined, | start_edit: function(info, valuetype, callback_obj, initial) { | show_modal.call(this); | this.editstr = initial; | this.result_callback_obj = callback_obj; | this.Info_elt.textContent = info; | this.shift = false; | this.caps = false; | this.update(); | }, | update: function() { | if(this.editstr != this._editstr){ | this._editstr = this.editstr; | this.Value_elt.textContent = this.editstr; | } | if(this.shift != this._shift){ | this._shift = this.shift; | (this.shift?widget_active_activable:widget_inactive_activable)(this.Shift_sub); | } | if(this.caps != this._caps){ | this._caps = this.caps; | (this.caps?widget_active_activable:widget_inactive_activable)(this.CapsLock_sub); | } | }, }