# HG changeset patch # User Edouard Tisserant # Date 1596646436 -7200 # Node ID bbffdefd2eed84464342c077f4a1ee20a76d4ce4 # Parent ff9ae4f4e3be517bd997ca09a356af977517b562 SVGHMI: JS refactoring continued : "dispatch_value_to_widget" becomes widget class member "new_hmi_value" (was also broken by previous relativeness commit) diff -r ff9ae4f4e3be -r bbffdefd2eed svghmi/svghmi.js --- a/svghmi/svghmi.js Wed Aug 05 18:49:29 2020 +0200 +++ b/svghmi/svghmi.js Wed Aug 05 18:53:56 2020 +0200 @@ -4,25 +4,6 @@ var updates = {}; var need_cache_apply = []; -function dispatch_value_to_widget(widget, index, value, oldval) { - try { - let idx = widget.offset ? index - widget.offset : index; - let idxidx = widget.indexes.indexOf(idx); - let d = widget.dispatch; - if(typeof(d) == "function" && idxidx == 0){ - d.call(widget, value, oldval); - } - else if(typeof(d) == "object" && d.length >= idxidx){ - d[idxidx].call(widget, value, oldval); - } - /* else dispatch_0, ..., dispatch_n ? */ - /*else { - throw new Error("Dunno how to dispatch to widget at index = " + index); - }*/ - } catch(err) { - console.log(err); - } -} function dispatch_value(index, value) { let widgets = subscribers[index]; @@ -32,7 +13,7 @@ if(widgets.size > 0) { for(let widget of widgets){ - dispatch_value_to_widget(widget, index, value, oldval); + widget.new_hmi_value(index, value, oldval); } } }; @@ -190,7 +171,7 @@ /* type: "Watchdog", */ frequency: 1, indexes: [heartbeat_index], - dispatch: function(value) { + new_hmi_value: function(index, value, oldval) { apply_hmi_value(heartbeat_index, value+1); } }); diff -r ff9ae4f4e3be -r bbffdefd2eed svghmi/widgets_common.ysl2 --- a/svghmi/widgets_common.ysl2 Wed Aug 05 18:49:29 2020 +0200 +++ b/svghmi/widgets_common.ysl2 Wed Aug 05 18:53:56 2020 +0200 @@ -109,7 +109,7 @@ let realindex = index+this.offset; let cached_val = cache[realindex]; if(cached_val != undefined) - dispatch_value_to_widget(this, realindex, cached_val, cached_val); + this.new_hmi_value(realindex, cached_val, cached_val); } } @@ -124,6 +124,34 @@ apply_hmi_value(index, new_val) { return apply_hmi_value(this.get_idx(0), new_val); } + + new_hmi_value(index, value, oldval) { + try { + // TODO avoid searching, store index at sub() + for(let i = 0; i < this.indexes.length; i++) { + let refindex = this.indexes[i]; + if(this.relativeness[i]) + refindex += this.offset; + + if(index == refindex) { + let d = this.dispatch; + if(typeof(d) == "function"){ + d.call(this, value, oldval, i); + } + else if(typeof(d) == "object"){ + d[i].call(this, value, oldval); + } + /* else dispatch_0, ..., dispatch_n ? */ + /*else { + throw new Error("Dunno how to dispatch to widget at index = " + index); + }*/ + break; + } + } + } catch(err) { + console.log(err); + } + } } || }