svghmi/gen_dnd_widget_svg.ysl2
branchsvghmi
changeset 3229 c5be4fd425e7
parent 3225 cfa5690c8c15
child 3234 f2bfb047d0e6
--- a/svghmi/gen_dnd_widget_svg.ysl2	Tue Apr 13 21:00:34 2021 +0200
+++ b/svghmi/gen_dnd_widget_svg.ysl2	Tue Apr 13 21:04:46 2021 +0200
@@ -30,22 +30,39 @@
     const "parsed_widgets","exsl:node-set($_parsed_widgets)";
 
     const "selected_node_type","local-name($subhmitree)";
-    const "svg_widget", "$parsed_widgets/widget[1]";
+    const "svg_widget", "$parsed_widgets/widget[1]"; // TODO take all widgets
     const "svg_widget_type", "$svg_widget/@type";
     const "svg_widget_path", "$svg_widget/@path";
     const "svg_widget_count", "count($parsed_widgets/widget)";
 
+    // Templates to change label paths(s)
+    template "@* | node()", mode="replace_path" {
+        xsl:copy apply "@* | node()", mode="replace_path";
+    }
+
+    template "path/@value", mode="replace_path" {
+        attrib "value" > «$hmi_path»
+    }
+
+    // all attribs are usually copied
     svgtmpl "@*", mode="inline_svg" xsl:copy;
 
-    svgtmpl "@inkscape:label[starts-with(., 'HMI:')]", mode="inline_svg" {
-        attrib "inkscape:label" > «substring-before(., '@')»@«$hmi_path»
+    // except labels, ignored
+    svgtmpl "@inkscape:label[starts-with(., 'HMI:')]", mode="inline_svg";
+
+    template "node()", mode="inline_svg" xsl:copy {
+
+      // in case this node widget's main element inject label
+      if "@id = $svg_widget/@id" {
+          const "substituted_widget" apply "$svg_widget", mode="replace_path";
+          const "substituted_widget_ns", "exsl:node-set($substituted_widget)";
+          const "new_label" apply "$substituted_widget_ns", mode="genlabel";
+          attrib "inkscape:label" > «$new_label»
+      }
+      // all nodes are copied as well
+      apply "@* | node()", mode="inline_svg";
     }
 
-    template "node()", mode="inline_svg" {
-      xsl:copy apply "@* | node()", mode="inline_svg";
-    }
-
-
     const "NODES_TYPES","str:split('HMI_ROOT HMI_NODE')";
     const "HMI_NODES_COMPAT","str:split('Page Jump Foreach')";
     template "/" {