// 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);
| }
| },
}