svghmi/svghmi.js
branchsvghmi
changeset 2889 4eeed820fd3a
parent 2871 ed9b16b33628
child 2890 ae8063127e95
equal deleted inserted replaced
2888:7beddc62a388 2889:4eeed820fd3a
     6 function dispatch_value_to_widget(widget, index, value, oldval) {
     6 function dispatch_value_to_widget(widget, index, value, oldval) {
     7     try {
     7     try {
     8         let idx = widget.offset ? index - widget.offset : index;
     8         let idx = widget.offset ? index - widget.offset : index;
     9         let idxidx = widget.indexes.indexOf(idx);
     9         let idxidx = widget.indexes.indexOf(idx);
    10         let d = widget.dispatch;
    10         let d = widget.dispatch;
    11         console.log(index, idx, idxidx, value);
       
    12         if(typeof(d) == "function" && idxidx == 0){
    11         if(typeof(d) == "function" && idxidx == 0){
    13             d.call(widget, value, oldval);
    12             d.call(widget, value, oldval);
    14         }
    13         }
    15         else if(typeof(d) == "object" && d.length >= idxidx){
    14         else if(typeof(d) == "object" && d.length >= idxidx){
    16             d[idxidx].call(widget, value, oldval);
    15             d[idxidx].call(widget, value, oldval);
   180 subscribers[heartbeat_index].add({
   179 subscribers[heartbeat_index].add({
   181     /* type: "Watchdog", */
   180     /* type: "Watchdog", */
   182     frequency: 1,
   181     frequency: 1,
   183     indexes: [heartbeat_index],
   182     indexes: [heartbeat_index],
   184     dispatch: function(value) {
   183     dispatch: function(value) {
   185         // console.log("Heartbeat" + value);
       
   186         change_hmi_value(heartbeat_index, "+1");
   184         change_hmi_value(heartbeat_index, "+1");
   187     }
   185     }
   188 });
   186 });
   189 
   187 
   190 function update_subscriptions() {
   188 function update_subscriptions() {
   277 function* chain(a,b){
   275 function* chain(a,b){
   278     yield* a;
   276     yield* a;
   279     yield* b;
   277     yield* b;
   280 };
   278 };
   281 
   279 
       
   280 function unsubscribe(){
       
   281     widget = this;
       
   282     /* remove subsribers */
       
   283     for(let index of widget.indexes){
       
   284         let idx = index + widget.offset;
       
   285         subscribers[idx].delete(widget);
       
   286     }
       
   287     widget.offset = 0;
       
   288 }
       
   289 
       
   290 function subscribe(new_offset=0){
       
   291     widget = this;
       
   292     /* set the offset because relative */
       
   293     widget.offset = new_offset;
       
   294     /* add widget's subsribers */
       
   295     for(let index of widget.indexes){
       
   296         subscribers[index + new_offset].add(widget);
       
   297     }
       
   298 }
       
   299 
   282 function switch_subscribed_page(page_name, page_index) {
   300 function switch_subscribed_page(page_name, page_index) {
   283     let old_desc = page_desc[current_subscribed_page];
   301     let old_desc = page_desc[current_subscribed_page];
   284     let new_desc = page_desc[page_name];
   302     let new_desc = page_desc[page_name];
   285 
   303 
   286     if(new_desc == undefined){
   304     if(new_desc == undefined){
   291     if(page_index == undefined){
   309     if(page_index == undefined){
   292         page_index = new_desc.page_index;
   310         page_index = new_desc.page_index;
   293     }
   311     }
   294 
   312 
   295     if(old_desc){
   313     if(old_desc){
   296         for(let widget of old_desc.absolute_widgets){
   314         old_desc.absolute_widgets.map(w=>w.unsub());
   297             /* remove subsribers */
   315         old_desc.relative_widgets.map(w=>w.unsub());
   298             for(let index of widget.indexes){
   316     }
   299                 subscribers[index].delete(widget);
   317     new_desc.absolute_widgets.map(w=>w.sub());
   300             }
       
   301         }
       
   302         for(let widget of old_desc.relative_widgets){
       
   303             /* remove subsribers */
       
   304             for(let index of widget.indexes){
       
   305                 let idx = widget.offset ? index + widget.offset : index;
       
   306                 subscribers[idx].delete(widget);
       
   307             }
       
   308             /* lose the offset */
       
   309             delete widget.offset;
       
   310         }
       
   311     }
       
   312     for(let widget of new_desc.absolute_widgets){
       
   313         /* add widget's subsribers */
       
   314         for(let index of widget.indexes){
       
   315             subscribers[index].add(widget);
       
   316         }
       
   317     }
       
   318     var new_offset = page_index == undefined ? 0 : page_index - new_desc.page_index;
   318     var new_offset = page_index == undefined ? 0 : page_index - new_desc.page_index;
   319     for(let widget of new_desc.relative_widgets){
   319     new_desc.relative_widgets.map(w=>w.sub(new_offset));
   320         /* set the offset because relative */
       
   321         widget.offset = new_offset;
       
   322         /* add widget's subsribers */
       
   323         for(let index of widget.indexes){
       
   324             subscribers[index + new_offset].add(widget);
       
   325         }
       
   326     }
       
   327 
   320 
   328     update_subscriptions();
   321     update_subscriptions();
   329 
   322 
   330     current_subscribed_page = page_name;
   323     current_subscribed_page = page_name;
   331 
   324