svghmi/svghmi.js
branchsvghmi
changeset 2850 e38654ec6281
parent 2843 94696b3f69fb
child 2859 517583e21bfd
equal deleted inserted replaced
2849:bb89a2fbb4e0 2850:e38654ec6281
   216 }
   216 }
   217 
   217 
   218 var current_page;
   218 var current_page;
   219 
   219 
   220 function prepare_svg() {
   220 function prepare_svg() {
   221     /* set everybody hidden initially for better performance */
   221     for(let eltid in detachable_elements){
   222     for(let widget in hmi_widgets){
   222         let [element,parent] = detachable_elements[eltid];
   223         if(widget.element != undefined)
   223         parent.removeChild(element);
   224             widget.element.style.display = "none";
   224     }
   225     }
       
   226         /*for(let name in page_desc){
       
   227             if(name != new_desc){
       
   228                 page_desc[name].widget.element.style.display = "none";
       
   229             }
       
   230         }*/
       
   231 };
   225 };
   232 
   226 
   233 function switch_page(page_name) {
   227 function switch_page(page_name) {
   234     let old_desc = page_desc[current_page];
   228     let old_desc = page_desc[current_page];
   235     let new_desc = page_desc[page_name];
   229     let new_desc = page_desc[page_name];
   239         return;
   233         return;
   240     }
   234     }
   241 
   235 
   242     if(old_desc){
   236     if(old_desc){
   243         for(let widget of old_desc.widgets){
   237         for(let widget of old_desc.widgets){
   244 
       
   245             /* hide widget */
       
   246             if(widget.element != undefined)
       
   247                 widget.element.style.display = "none";
       
   248 
       
   249             /* remove subsribers */
   238             /* remove subsribers */
   250             for(let index of widget.indexes){
   239             for(let index of widget.indexes){
   251                 subscribers[index].delete(widget);
   240                 subscribers[index].delete(widget);
   252             }
   241             }
   253         }
   242         }
   254         old_desc.widget.element.style.display = "none";
   243         for(let eltid in old_desc.required_detachables){
       
   244             if(!(eltid in new_desc.required_detachables)){
       
   245                 let [element, parent] = old_desc.required_detachables[eltid];
       
   246                 parent.removeChild(element);
       
   247             }
       
   248         }
       
   249         for(let eltid in new_desc.required_detachables){
       
   250             if(!(eltid in old_desc.required_detachables)){
       
   251                 let [element, parent] = new_desc.required_detachables[eltid];
       
   252                 parent.appendChild(element);
       
   253             }
       
   254         }
       
   255     }else{
       
   256         for(let eltid in new_desc.required_detachables){
       
   257             let [element, parent] = new_desc.required_detachables[eltid];
       
   258             parent.appendChild(element);
       
   259         }
   255     }
   260     }
   256 
   261 
   257     for(let widget of new_desc.widgets){
   262     for(let widget of new_desc.widgets){
   258 
       
   259         /* unhide widget */
       
   260         if(widget.element != undefined)
       
   261             widget.element.style.display = "inline";
       
   262 
       
   263         /* add widget's subsribers */
   263         /* add widget's subsribers */
   264         for(let index of widget.indexes){
   264         for(let index of widget.indexes){
   265             subscribers[index].add(widget);
   265             subscribers[index].add(widget);
   266             /* dispatch current cache in newly opened page widgets */
   266             /* dispatch current cache in newly opened page widgets */
   267             let cached_val = cache[index];
   267             let cached_val = cache[index];
   268             if(cached_val != undefined)
   268             if(cached_val != undefined)
   269                 dispatch_value_to_widget(widget, index, cached_val, cached_val);
   269                 dispatch_value_to_widget(widget, index, cached_val, cached_val);
   270         }
   270         }
   271     }
   271     }
   272 
   272 
   273     new_desc.widget.element.style.display = "inline";
       
   274 
       
   275     svg_root.setAttribute('viewBox',new_desc.bbox.join(" "));
   273     svg_root.setAttribute('viewBox',new_desc.bbox.join(" "));
   276     current_page = page_name;
   274     current_page = page_name;
   277 
   275 
   278     update_subscriptions();
   276     update_subscriptions();
   279 };
   277 };