svghmi/detachable_pages.ysl2
branchsvghmi
changeset 2886 6c82fad8be65
parent 2885 f398896b7ebf
child 2887 30cea13267b4
equal deleted inserted replaced
2885:f398896b7ebf 2886:6c82fad8be65
     2 //
     2 //
     3 // compute what elements are required by pages
     3 // compute what elements are required by pages
     4 // and decide where to cut when removing/attaching 
     4 // and decide where to cut when removing/attaching 
     5 // pages elements on page switch
     5 // pages elements on page switch
     6 
     6 
     7 const "hmi_pages", "$hmi_elements[func:parselabel(@inkscape:label)/widget/@type = 'Page']";
     7 const "hmi_pages_ids", "$parsed_widgets/widget[@type = 'Page']/@id";
       
     8 const "hmi_pages", "$hmi_elements[@id = $hmi_pages_ids]";
     8 
     9 
     9 const "default_page" choose {
    10 const "default_page" choose {
    10     when "count($hmi_pages) > 1" {
    11     when "count($hmi_pages) > 1" {
    11         const "Home_page", 
    12         const "Home_page", 
    12             "$hmi_pages[func:parselabel(@inkscape:label)/widget/arg[1]/@value = 'Home']";
    13             "$hmi_pages[func:widget(@id)/arg[1]/@value = 'Home']";
    13         choose {
    14         choose {
    14             when "$Home_page" > Home
    15             when "$Home_page" > Home
    15             otherwise {
    16             otherwise {
    16                 error "No Home page defined!";
    17                 error "No Home page defined!";
    17             }
    18             }
    18         }
    19         }
    19     }
    20     }
    20     when "count($hmi_pages) = 0" {
    21     when "count($hmi_pages) = 0" {
    21         error "No page defined!";
    22         error "No page defined!";
    22     }
    23     }
    23     otherwise > «func:parselabel($hmi_pages/@inkscape:label)/widget/arg[1]/@value»
    24     otherwise > «func:widget($hmi_pages/@id)/arg[1]/@value»
    24 }
    25 }
    25 
    26 
    26 // returns all directly or indirectly refered elements
    27 // returns all directly or indirectly refered elements
    27 def "func:refered_elements" {
    28 def "func:refered_elements" {
    28     param "elems";
    29     param "elems";
    98     result "string-length($ancest) > 0 and starts-with($descend,$ancest)";
    99     result "string-length($ancest) > 0 and starts-with($descend,$ancest)";
    99 }
   100 }
   100 
   101 
   101 
   102 
   102 template "svg:*", mode="page_desc" {
   103 template "svg:*", mode="page_desc" {
   103     const "desc", "func:parselabel(@inkscape:label)/widget";
   104     const "desc", "func:widget(@id)";
   104     const "page", ".";
   105     const "page", ".";
   105     const "p", "$geometry[@Id = $page/@id]";
   106     const "p", "$geometry[@Id = $page/@id]";
   106 
   107 
   107     const "page_all_elements", "func:all_related_elements($page)";
   108     const "page_all_elements", "func:all_related_elements($page)";
   108 
   109 
   109     const "all_page_widgets","$hmi_elements[@id = $page_all_elements/@id and @id != $page/@id][not(func:parselabels(ancestor::svg:*)/widget/@type = 'ForEach')]";
   110     const "all_page_widgets","$hmi_elements[@id = $page_all_elements/@id and @id != $page/@id]";
   110 
   111 
   111     const "page_relative_widgets",
   112     const "page_relative_widgets",
   112         "$all_page_widgets[func:is_descendant_path(func:parselabel(@inkscape:label)/widget/path/@value, $desc/path/@value)]";
   113         "$all_page_widgets[func:is_descendant_path(func:widget(@id)/path/@value, $desc/path/@value)]";
   113 
   114 
   114     // Take closest ancestor in detachable_elements
   115     // Take closest ancestor in detachable_elements
   115     // since nested detachable elements are filtered out
   116     // since nested detachable elements are filtered out
   116     const "required_detachables", 
   117     const "required_detachables", 
   117         """func:sumarized_elements($page_all_elements)/
   118         """func:sumarized_elements($page_all_elements)/