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