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)/ |