svghmi/widgets_common.ysl2
changeset 3520 b27e50143083
parent 3504 9d895a103019
child 3522 f3a14422d56e
equal deleted inserted replaced
3519:43b2bff95289 3520:b27e50143083
    12         with "mandatory","'no'";
    12         with "mandatory","'no'";
    13         content;
    13         content;
    14     }
    14     }
    15 };
    15 };
    16 
    16 
       
    17 decl activable() alias - {
       
    18     |     activable_sub:{
       
    19     labels("/active /inactive") {
       
    20         content;
       
    21     }
       
    22     |     }
       
    23 };
    17 decl activable_labels(*ptr) alias - {
    24 decl activable_labels(*ptr) alias - {
    18     optional_labels(*ptr) {
    25     optional_labels(*ptr) {
    19         with "subelements","'active inactive'";
    26         with "subelements","'active inactive'";
    20         content;
    27         content;
    21     }
    28     }
   162 }
   169 }
   163 
   170 
   164 emit "preamble:widget-base-class" {
   171 emit "preamble:widget-base-class" {
   165     ||
   172     ||
   166     var pending_widget_animates = [];
   173     var pending_widget_animates = [];
       
   174 
       
   175     function _hide(elt, placeholder){
       
   176         if(elt.parentNode != null)
       
   177             placeholder.parentNode.removeChild(elt);
       
   178     }
       
   179     function _show(elt, placeholder){
       
   180         placeholder.parentNode.insertBefore(elt, placeholder);
       
   181     }
       
   182 
       
   183     function set_activation_state(eltsub, state){
       
   184         if(eltsub.active_elt_placeholder == undefined){
       
   185             eltsub.active_elt_placeholder = document.createComment("");
       
   186             eltsub.active_elt.parentNode.insertBefore(eltsub.active_elt_placeholder, eltsub.active_elt);
       
   187             eltsub.inactive_elt_placeholder = document.createComment("");
       
   188             eltsub.inactive_elt.parentNode.insertBefore(eltsub.inactive_elt_placeholder, eltsub.inactive_elt);
       
   189         }
       
   190         (state?_show:_hide)(eltsub.active_elt, eltsub.active_elt_placeholder);
       
   191         ((state || state==undefined)?_hide:_show)(eltsub.inactive_elt, eltsub.inactive_elt_placeholder);
       
   192     }
       
   193 
       
   194     function activate_activable(eltsub) {
       
   195         set_activation_state(eltsub, true);
       
   196     }
       
   197 
       
   198     function inactivate_activable(eltsub) {
       
   199         set_activation_state(eltsub, false);
       
   200     }
   167 
   201 
   168     class Widget {
   202     class Widget {
   169         offset = 0;
   203         offset = 0;
   170         frequency = 10; /* FIXME arbitrary default max freq. Obtain from config ? */
   204         frequency = 10; /* FIXME arbitrary default max freq. Obtain from config ? */
   171         unsubscribable = false;
   205         unsubscribable = false;
   409             if(!this.pending_animate){
   443             if(!this.pending_animate){
   410                 pending_widget_animates.push(this);
   444                 pending_widget_animates.push(this);
   411                 this.pending_animate = true;
   445                 this.pending_animate = true;
   412                 requestHMIAnimation();
   446                 requestHMIAnimation();
   413             }
   447             }
   414 
   448         }
   415         }
   449 
   416 
   450         set_activation_state(state){
   417         activate_activable(eltsub) {
   451             set_activation_state(this.activable_sub, state);
   418             eltsub.inactive.style.display = "none";
       
   419             eltsub.active.style.display = "";
       
   420         }
       
   421 
       
   422         inactivate_activable(eltsub) {
       
   423             eltsub.active.style.display = "none";
       
   424             eltsub.inactive.style.display = "";
       
   425         }
   452         }
   426     }
   453     }
   427     ||
   454     ||
   428 }
   455 }
   429 
   456 
   487                                     error > «$widget_type» widget must have a «$name»/«$subname» element
   514                                     error > «$widget_type» widget must have a «$name»/«$subname» element
   488                                 }
   515                                 }
   489                 |         /* missing «$name»/«$subname» element */
   516                 |         /* missing «$name»/«$subname» element */
   490                             }
   517                             }
   491                             otherwise {
   518                             otherwise {
   492                 |         "«$subname»": id("«$subelt/@id»")`if "position()!=last()" > ,`
   519                 |         "«$subname»_elt": id("«$subelt/@id»")`if "position()!=last()" > ,`
   493                             }
   520                             }
   494                         }
   521                         }
   495                     }
   522                     }
   496                 |     },
   523                 |     },
   497                 }
   524                 }