# HG changeset patch # User Edouard Tisserant <edouard.tisserant@gmail.com> # Date 1594981305 -7200 # Node ID 14635b09d32935d83de87b0e606cd1c04d597231 # Parent 7769e7c7f92552de4cf1ca59b091d88b3396f831 SVGHMI: JsonTable now generate working data access code for data/* elements. diff -r 7769e7c7f925 -r 14635b09d329 svghmi/gen_index_xhtml.xslt --- a/svghmi/gen_index_xhtml.xslt Fri Jul 17 12:19:53 2020 +0200 +++ b/svghmi/gen_index_xhtml.xslt Fri Jul 17 12:21:45 2020 +0200 @@ -658,11 +658,17 @@ <xsl:text>All units must be set to "px" in Inkscape's document properties</xsl:text> </xsl:message> </xsl:template> - <xsl:variable name="to_unlink" select="$hmi_elements[not(@id = $hmi_pages)]/descendant-or-self::svg:use"/> + <xsl:variable name="hmi_lists_descs" select="$parsed_widgets/widget[@type = 'List']"/> + <xsl:variable name="hmi_lists" select="$hmi_elements[@id = $hmi_lists_descs/@id]"/> + <xsl:variable name="targets_not_to_unlink" select="$hmi_elements[@id = $hmi_lists/@id]/descendant::svg:*"/> + <xsl:variable name="to_unlink" select="$hmi_elements[not(@id = $hmi_pages/@id)]/descendant-or-self::svg:use"/> <xsl:template xmlns="http://www.w3.org/2000/svg" mode="inline_svg" match="svg:use"> + <xsl:variable name="targetid" select="substring-after(@xlink:href,'#')"/> <xsl:choose> - <xsl:when test="@id = $to_unlink/@id"> - <xsl:call-template name="unlink_clone"/> + <xsl:when test="@id = $to_unlink/@id and not($targetid = $targets_not_to_unlink/@id)"> + <xsl:call-template name="unlink_clone"> + <xsl:with-param name="targetid" select="$targetid"/> + </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:copy> @@ -699,7 +705,7 @@ </xsl:variable> <xsl:variable name="merge_use_attrs" select="exsl:node-set($_merge_use_attrs)"/> <xsl:template xmlns="http://www.w3.org/2000/svg" name="unlink_clone"> - <xsl:variable name="targetid" select="substring-after(@xlink:href,'#')"/> + <xsl:param name="targetid"/> <xsl:variable name="target" select="//svg:*[@id = $targetid]"/> <g> <xsl:choose> @@ -816,6 +822,13 @@ <xsl:text> </xsl:text> </xsl:for-each> + <xsl:text>Not to unlink : +</xsl:text> + <xsl:for-each select="$targets_not_to_unlink"> + <xsl:value-of select="@id"/> + <xsl:text> +</xsl:text> + </xsl:for-each> <xsl:text> </xsl:text> </xsl:template> @@ -2149,39 +2162,51 @@ <xsl:template mode="widget_class" match="widget[@type='JsonTable']"> <xsl:text>class JsonTableWidget extends Widget{ </xsl:text> + <xsl:text> do_http_request() { +</xsl:text> + <xsl:text> const query = { +</xsl:text> + <xsl:text> offset: '42', +</xsl:text> + <xsl:text> filter: '*powerloss*', +</xsl:text> + <xsl:text> args: this.args +</xsl:text> + <xsl:text> }; +</xsl:text> + <xsl:text> +</xsl:text> + <xsl:text> const options = { +</xsl:text> + <xsl:text> method: 'POST', +</xsl:text> + <xsl:text> body: JSON.stringify(query), +</xsl:text> + <xsl:text> headers: {'Content-Type': 'application/json'} +</xsl:text> + <xsl:text> } +</xsl:text> + <xsl:text> +</xsl:text> + <xsl:text> fetch(this.args[0], options) +</xsl:text> + <xsl:text> .then(res => res.json()) +</xsl:text> + <xsl:text> .then(this.spread_json_data); +</xsl:text> + <xsl:text> +</xsl:text> + <xsl:text> } +</xsl:text> + <xsl:text> dispatch(value) { +</xsl:text> + <xsl:text> this.do_http_request(); +</xsl:text> + <xsl:text> } +</xsl:text> <xsl:text> on_click(evt) { </xsl:text> - <xsl:text> const query = { -</xsl:text> - <xsl:text> offset: '42', -</xsl:text> - <xsl:text> filter: '*powerloss*', -</xsl:text> - <xsl:text> args: this.args -</xsl:text> - <xsl:text> }; -</xsl:text> - <xsl:text> -</xsl:text> - <xsl:text> const options = { -</xsl:text> - <xsl:text> method: 'POST', -</xsl:text> - <xsl:text> body: JSON.stringify(query), -</xsl:text> - <xsl:text> headers: {'Content-Type': 'application/json'} -</xsl:text> - <xsl:text> } -</xsl:text> - <xsl:text> -</xsl:text> - <xsl:text> fetch(this.args[0], options) -</xsl:text> - <xsl:text> .then(res => res.json()) -</xsl:text> - <xsl:text> .then(res => console.log(res)); -</xsl:text> - <xsl:text> + <xsl:text> this.do_http_request(); </xsl:text> <xsl:text> } </xsl:text> @@ -2194,6 +2219,86 @@ <xsl:text>} </xsl:text> </xsl:template> + <xsl:template mode="json_table_elt_render" match="svg:*"> + <xsl:message terminate="no"> + <xsl:text>JsonTable Widget can't contain element of type </xsl:text> + <xsl:value-of select="local-name()"/> + <xsl:text>.</xsl:text> + </xsl:message> + </xsl:template> + <xsl:template mode="json_table_elt_render" match="svg:use"> + <xsl:param name="value_expr"/> + <xsl:text> console.log("</xsl:text> + <xsl:value-of select="@id"/> + <xsl:text>", "</xsl:text> + <xsl:value-of select="$value_expr"/> + <xsl:text>", </xsl:text> + <xsl:value-of select="$value_expr"/> + <xsl:text>); +</xsl:text> + </xsl:template> + <xsl:template mode="json_table_elt_render" match="svg:text"> + <xsl:param name="value_expr"/> + <xsl:text> console.log("</xsl:text> + <xsl:value-of select="@id"/> + <xsl:text>", "</xsl:text> + <xsl:value-of select="$value_expr"/> + <xsl:text>", </xsl:text> + <xsl:value-of select="$value_expr"/> + <xsl:text>); +</xsl:text> + </xsl:template> + <xsl:template mode="json_table_render" match="svg:*"> + <xsl:param name="objname"/> + <xsl:apply-templates mode="json_table_elt_render" select="."> + <xsl:with-param name="value_expr"> + <xsl:value-of select="$objname"/> + <xsl:value-of select="@inkscape:label"/> + </xsl:with-param> + </xsl:apply-templates> + </xsl:template> + <xsl:template mode="json_table_render" match="svg:g"> + <xsl:param name="objname"/> + <xsl:text>let obj_</xsl:text> + <xsl:value-of select="@id"/> + <xsl:text> = </xsl:text> + <xsl:value-of select="$objname"/> + <xsl:value-of select="@inkscape:label"/> + <xsl:text>; +</xsl:text> + <xsl:apply-templates mode="json_table_render" select="*[@inkscape:label]"> + <xsl:with-param name="objname"> + <xsl:text>obj_</xsl:text> + <xsl:value-of select="@id"/> + </xsl:with-param> + </xsl:apply-templates> + </xsl:template> + <xsl:template mode="widget_defs" match="widget[@type='JsonTable']"> + <xsl:param name="hmi_element"/> + <xsl:call-template name="defs_by_labels"> + <xsl:with-param name="hmi_element" select="$hmi_element"/> + <xsl:with-param name="labels"> + <xsl:text>data</xsl:text> + </xsl:with-param> + </xsl:call-template> + <xsl:call-template name="defs_by_labels"> + <xsl:with-param name="hmi_element" select="$hmi_element"/> + <xsl:with-param name="labels"> + <xsl:text>forward backward cursor</xsl:text> + </xsl:with-param> + <xsl:with-param name="mandatory" select="'no'"/> + </xsl:call-template> + <xsl:variable name="data_elt" select="$result_svg_ns//*[@id = $hmi_element/@id]/*[@inkscape:label = 'data']"/> + <xsl:text>spread_json_data: function(jdata) { +</xsl:text> + <xsl:text> console.log(jdata); +</xsl:text> + <xsl:apply-templates mode="json_table_render" select="$data_elt/*"> + <xsl:with-param name="objname" select="'jdata'"/> + </xsl:apply-templates> + <xsl:text>} +</xsl:text> + </xsl:template> <xsl:template name="jump_widget_activity"> <xsl:param name="hmi_element"/> <xsl:call-template name="defs_by_labels"> diff -r 7769e7c7f925 -r 14635b09d329 svghmi/widget_jsontable.ysl2 --- a/svghmi/widget_jsontable.ysl2 Fri Jul 17 12:19:53 2020 +0200 +++ b/svghmi/widget_jsontable.ysl2 Fri Jul 17 12:21:45 2020 +0200 @@ -3,7 +3,7 @@ template "widget[@type='JsonTable']", mode="widget_class" || class JsonTableWidget extends Widget{ - on_click(evt) { + do_http_request() { const query = { offset: '42', filter: '*powerloss*', @@ -18,11 +18,54 @@ fetch(this.args[0], options) .then(res => res.json()) - .then(res => console.log(res)); + .then(this.spread_json_data); } + dispatch(value) { + this.do_http_request(); + } + on_click(evt) { + this.do_http_request(); + } init() { this.element.setAttribute("onclick", "hmi_widgets['"+this.element_id+"'].on_click(evt)"); } } || + +template "svg:*", mode="json_table_elt_render" { + warning > JsonTable Widget can't contain element of type «local-name()». +} + +template "svg:use", mode="json_table_elt_render" { + param "value_expr"; + | console.log("«@id»", "«$value_expr»", «$value_expr»); +} + +template "svg:text", mode="json_table_elt_render" { + param "value_expr"; + | console.log("«@id»", "«$value_expr»", «$value_expr»); +} + +template "svg:*", mode="json_table_render" { + param "objname"; + apply ".", mode="json_table_elt_render" with "value_expr" > «$objname»«@inkscape:label» +} + +template "svg:g", mode="json_table_render" { + param "objname"; + | let obj_«@id» = «$objname»«@inkscape:label»; + apply "*[@inkscape:label]", mode="json_table_render" + with "objname" > obj_«@id» +} + +template "widget[@type='JsonTable']", mode="widget_defs" { + param "hmi_element"; + labels("data"); + optional_labels("forward backward cursor"); + const "data_elt", "$result_svg_ns//*[@id = $hmi_element/@id]/*[@inkscape:label = 'data']"; + | spread_json_data: function(jdata) { + | console.log(jdata); + apply "$data_elt/*", mode="json_table_render" with "objname","'jdata'"; + | } +} diff -r 7769e7c7f925 -r 14635b09d329 tests/svghmi/py_ext_0@py_ext/pyfile.xml --- a/tests/svghmi/py_ext_0@py_ext/pyfile.xml Fri Jul 17 12:19:53 2020 +0200 +++ b/tests/svghmi/py_ext_0@py_ext/pyfile.xml Fri Jul 17 12:21:45 2020 +0200 @@ -2,10 +2,12 @@ <PyFile xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <variables> <variable name="SomePLCglobal" type="HMI_STRING" onchange="MyOnChangeFunc"/> + <variable name="AlarmCount" type="HMI_INT"/> </variables> <globals> <xhtml:p><![CDATA[ from twisted.web.resource import Resource +import json class AlarmJsonResource(Resource): def render_GET(self, request): @@ -15,7 +17,13 @@ print(request.__dict__) newdata = request.content.getvalue() print newdata - return '' + selected_alarms = [ + {"name":"three", "sides":3}, + {"name":"four", "sides":4}, + {"name":"five", "sides":5}, + {"name":"six", "sides":6}, + ] + return json.dumps(selected_alarms) def MyOnChangeFunc(changed_var_name): diff -r 7769e7c7f925 -r 14635b09d329 tests/svghmi/svghmi_0@svghmi/svghmi.svg --- a/tests/svghmi/svghmi_0@svghmi/svghmi.svg Fri Jul 17 12:19:53 2020 +0200 +++ b/tests/svghmi/svghmi_0@svghmi/svghmi.svg Fri Jul 17 12:21:45 2020 +0200 @@ -138,14 +138,14 @@ inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:document-units="px" - inkscape:current-layer="hmi0" + inkscape:current-layer="g1384" showgrid="false" units="px" - inkscape:zoom="0.35355339" - inkscape:cx="460.66016" - inkscape:cy="-571.17456" - inkscape:window-width="1800" - inkscape:window-height="1861" + inkscape:zoom="2" + inkscape:cx="841.23474" + inkscape:cy="298.33077" + inkscape:window-width="2807" + inkscape:window-height="1582" inkscape:window-x="0" inkscape:window-y="27" inkscape:window-maximized="0" @@ -235,7 +235,8 @@ </g> <g id="g84" - inkscape:label="HMI:Input@/TARGETPRESSURE"> + inkscape:label="HMI:Input@/TARGETPRESSURE" + transform="matrix(0.63690435,0,0,0.63690435,12.496106,18.355376)"> <text inkscape:label="value" id="text5151" @@ -348,13 +349,13 @@ <text inkscape:label="HMI:Display@/PUMP0/PRESSURE" id="text823" - y="218.24219" - x="756.32812" - style="font-style:normal;font-weight:normal;font-size:160px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + y="157.35477" + x="494.20477" + style="font-style:normal;font-weight:normal;font-size:101.9046936px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.63690436px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" xml:space="preserve"><tspan - style="fill:#ffffff;fill-opacity:1;stroke-width:1px" - y="218.24219" - x="756.32812" + style="fill:#ffffff;fill-opacity:1;stroke-width:0.63690436px" + y="157.35477" + x="494.20477" id="tspan821" sodipodi:role="line">8888</tspan></text> <g @@ -432,26 +433,28 @@ </g> <text xml:space="preserve" - style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" - x="256.63086" - y="77.142853" + style="font-style:normal;font-weight:normal;font-size:25.4761734px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:0.63690436px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="175.94542" + y="67.487991" id="text827" inkscape:label="setpoint_label"><tspan sodipodi:role="line" id="tspan825" - x="256.63086" - y="77.142853">SetPoint</tspan></text> + x="175.94542" + y="67.487991" + style="stroke-width:0.63690436px">SetPoint</tspan></text> <text id="text831" - y="77.142853" - x="899.01367" - style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#008000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + y="67.487991" + x="585.08185" + style="font-style:normal;font-weight:normal;font-size:25.4761734px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#008000;fill-opacity:1;stroke:none;stroke-width:0.63690436px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" xml:space="preserve" inkscape:label="actual_label"><tspan - y="77.142853" - x="899.01367" + y="67.487991" + x="585.08185" id="tspan829" - sodipodi:role="line">Actual</tspan></text> + sodipodi:role="line" + style="stroke-width:0.63690436px">Actual</tspan></text> <text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;display:inline;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" @@ -2317,7 +2320,7 @@ <g id="g14237" inkscape:label="HMI:DropDown:1:2:3:4:5:6:7:8:9:10@/SELECTION" - transform="translate(0,-640)"> + transform="matrix(0.5,0,0,0.5,423.93816,-131.83418)"> <rect style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#53676c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="rect14212" @@ -2452,14 +2455,14 @@ id="tspan430" x="136.32812" y="218.24219" - style="stroke-width:1px">8888</tspan></text> + style="stroke-width:1px">8</tspan></text> <path transform="scale(1,-1)" sodipodi:type="star" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path436" sodipodi:sides="3" - sodipodi:cx="596.74072" + sodipodi:cx="276.74072" sodipodi:cy="-224.98808" sodipodi:r1="29.912722" sodipodi:r2="14.956361" @@ -2468,7 +2471,7 @@ inkscape:flatsided="true" inkscape:rounded="0" inkscape:randomized="0" - d="m 622.6459,-210.03172 -51.81035,0 25.90517,-44.86908 z" + d="m 302.6459,-210.03172 -51.81035,0 25.90517,-44.86908 z" inkscape:transform-center-y="7.4781812" inkscape:label="-1" /> <rect @@ -2483,7 +2486,7 @@ <path inkscape:label="+1" inkscape:transform-center-y="-7.4781804" - d="m 622.6459,111.4008 -51.81035,0 25.90517,-44.869079 z" + d="m 302.6459,111.4008 -51.81035,0 25.90517,-44.869079 z" inkscape:randomized="0" inkscape:rounded="0" inkscape:flatsided="true" @@ -2492,7 +2495,7 @@ sodipodi:r2="14.956361" sodipodi:r1="29.912722" sodipodi:cy="96.444443" - sodipodi:cx="596.74072" + sodipodi:cx="276.74072" sodipodi:sides="3" id="path442" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" @@ -2500,7 +2503,7 @@ <path inkscape:label="=0" inkscape:transform-center-y="-10.828983" - d="m 626.14807,189.68763 -58.37872,0.43598 -0.43597,-58.37872 58.37871,-0.43597 z" + d="m 306.14807,189.68763 -58.37872,0.43598 -0.43597,-58.37872 58.37871,-0.43597 z" inkscape:randomized="0" inkscape:rounded="0" inkscape:flatsided="true" @@ -2509,7 +2512,7 @@ sodipodi:r2="21.657967" sodipodi:r1="41.281136" sodipodi:cy="160.71626" - sodipodi:cx="596.74072" + sodipodi:cx="276.74072" sodipodi:sides="4" id="path444" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" @@ -2532,9 +2535,9 @@ height="95.723877" x="971.96545" y="594.82263" - ry="71.158127" + ry="47.861938" inkscape:label="button" - rx="71.158127" /> + rx="47.861938" /> </g> <g id="g441" @@ -2850,13 +2853,332 @@ sodipodi:role="line">mhe</tspan></text> </g> </g> - <rect - style="fill:#4d389f;fill-opacity:1;stroke:#ff00ff" - id="rect1261" - width="91.923882" - height="66.46804" - x="296.98483" - y="482.41211" - ry="33.23402" - inkscape:label="HMI:JsonTable:/alarms:mhoooo:666" /> + <g + id="g1289" + inkscape:label="HMI:JsonTable:/alarms@/ALARMCOUNT"> + <rect + inkscape:label="cursor" + ry="14" + rx="12.247418" + y="68.515991" + x="1192.0886" + height="165.68298" + width="68.255615" + id="rect1264" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#bc8f8f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <path + inkscape:label="backward" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#bc8f8f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="m 1226.2165,18.9847 34.1278,34.74552 h -68.2556 z" + id="path1266" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccc" /> + <path + inkscape:label="forward" + sodipodi:nodetypes="cccc" + inkscape:connector-curvature="0" + id="path1268" + d="m 1226.2165,283.7301 34.1278,-34.7453 h -68.2556 z" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#bc8f8f;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <g + id="g5231" + inkscape:label="data"> + <g + id="g1384" + inkscape:label="[0]" + transform="translate(52.325902,207.55635)"> + <use + x="0" + y="0" + xlink:href="#path1316" + inkscape:transform-center-x="0.14620371" + inkscape:transform-center-y="2.9995242" + id="use1378" + width="100%" + height="100%" + transform="translate(-198.17662,280.01428)" + inkscape:label=".sides" /> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff0000;fill-opacity:1;stroke:none" + x="971.58551" + y="56.106419" + id="text1382" + inkscape:label=".name"><tspan + sodipodi:role="line" + id="tspan1380" + x="971.58551" + y="56.106419">value</tspan></text> + </g> + <use + inkscape:label="[1]" + transform="translate(0,-64)" + height="100%" + width="100%" + id="use5200" + xlink:href="#g1384" + y="0" + x="0" /> + <use + inkscape:label="[2]" + x="0" + y="0" + xlink:href="#g1384" + id="use5202" + width="100%" + height="100%" + transform="translate(0,-128)" /> + <use + inkscape:label="[3]" + transform="translate(0,-192)" + height="100%" + width="100%" + id="use5204" + xlink:href="#g1384" + y="0" + x="0" /> + </g> + </g> + <g + id="g1324" + inkscape:label="HMI:List:polygons"> + <path + inkscape:transform-center-y="2.9995242" + inkscape:transform-center-x="0.14620371" + d="m 861.96316,-226.81598 -27.92731,5.51725 -27.92732,5.51724 9.18558,-26.94439 9.18559,-26.94439 18.74173,21.42715 z" + inkscape:randomized="0" + inkscape:rounded="0" + inkscape:flatsided="false" + sodipodi:arg2="1.3757507" + sodipodi:arg1="0.32855317" + sodipodi:r2="16.43548" + sodipodi:r1="32.87096" + sodipodi:cy="-237.42258" + sodipodi:cx="830.85046" + sodipodi:sides="3" + id="path1298" + style="fill:#8fbc8f;fill-opacity:1;stroke:#ff0000" + sodipodi:type="star" + inkscape:label="three" /> + <path + sodipodi:type="star" + style="fill:#ff8c00;fill-opacity:1;stroke:#ff0000" + id="path1308" + sodipodi:sides="4" + sodipodi:cx="890.85046" + sodipodi:cy="-237.42258" + sodipodi:r1="32.87096" + sodipodi:r2="16.43548" + sodipodi:arg1="0.32855317" + sodipodi:arg2="1.1139513" + inkscape:flatsided="false" + inkscape:rounded="0" + inkscape:randomized="0" + d="m 921.96316,-226.81598 -23.8627,4.1434 -17.8566,16.3627 -4.1434,-23.8627 -16.36269,-17.8566 23.86269,-4.1434 17.85661,-16.3627 4.14339,23.8627 z" + inkscape:transform-center-x="0.14620371" + inkscape:transform-center-y="2.9995242" + inkscape:label="four" /> + <path + inkscape:transform-center-y="2.9995242" + inkscape:transform-center-x="0.14620371" + d="m 981.96316,-226.81598 -21.64455,2.82766 -9.94127,19.4333 -9.37779,-19.7114 -21.55419,-3.44949 15.84875,-15.00997 -3.37994,-21.5652 19.17286,10.43473 19.46526,-9.87854 -3.99927,21.45898 z" + inkscape:randomized="0" + inkscape:rounded="0" + inkscape:flatsided="false" + sodipodi:arg2="0.9568717" + sodipodi:arg1="0.32855317" + sodipodi:r2="16.43548" + sodipodi:r1="32.87096" + sodipodi:cy="-237.42258" + sodipodi:cx="950.85046" + sodipodi:sides="5" + id="path1310" + style="fill:#bc8f8f;fill-opacity:1;stroke:#ff0000" + sodipodi:type="star" + inkscape:label="five" /> + <path + sodipodi:type="star" + style="fill:#f0f8ff;fill-opacity:1;stroke:#ff0000" + id="path1312" + sodipodi:sides="6" + sodipodi:cx="1010.8505" + sodipodi:cy="-237.42258" + sodipodi:r1="32.87096" + sodipodi:r2="16.43548" + sodipodi:arg1="0.32855317" + sodipodi:arg2="0.85215195" + inkscape:flatsided="false" + inkscape:rounded="0" + inkscape:randomized="0" + d="m 1041.9632,-226.81598 -20.2921,1.76437 -4.4498,19.87672 -11.6741,-16.69134 -19.43861,6.08474 8.61809,-18.45571 -14.98885,-13.79198 20.29217,-1.76436 4.4498,-19.87673 11.674,16.69134 19.4387,-6.08473 -8.6181,18.4557 z" + inkscape:transform-center-x="0.14620371" + inkscape:transform-center-y="2.9995242" + inkscape:label="six" /> + <path + inkscape:transform-center-y="2.9995242" + inkscape:transform-center-x="0.14620371" + d="m 1101.9632,-226.81598 -19.398,0.92116 -0.6089,19.41024 -12.8146,-14.59158 -15.5551,11.62603 3.4184,-19.11656 -18.7881,-4.91281 17.0772,-9.24638 -7.8732,-17.75221 17.8766,7.58652 8.9704,-17.22384 5.2145,18.70661 19.0591,-3.72556 -11.3742,15.74025 z" + inkscape:randomized="0" + inkscape:rounded="0" + inkscape:flatsided="false" + sodipodi:arg2="0.77735212" + sodipodi:arg1="0.32855317" + sodipodi:r2="16.43548" + sodipodi:r1="32.87096" + sodipodi:cy="-237.42258" + sodipodi:cx="1070.8505" + sodipodi:sides="7" + id="path1314" + style="fill:#ba55d3;fill-opacity:1;stroke:#ff0000" + sodipodi:type="star" + inkscape:label="seven" /> + <path + sodipodi:type="star" + style="fill:#ffff00;fill-opacity:1;stroke:#ff0000" + id="path1316" + sodipodi:sides="8" + sodipodi:cx="1130.8505" + sodipodi:cy="-237.42258" + sodipodi:r1="32.87096" + sodipodi:r2="16.43548" + sodipodi:arg1="0.32855317" + sodipodi:arg2="0.72125225" + inkscape:flatsided="false" + inkscape:rounded="0" + inkscape:randomized="0" + d="m 1161.9632,-226.81598 -18.77,0.24617 2.1573,18.64723 -13.4465,-13.09832 -11.6601,14.71102 -0.2462,-18.76999 -18.6472,2.15729 13.0983,-13.44645 -14.711,-11.66015 18.77,-0.24617 -2.1573,-18.64723 13.4464,13.09832 11.6602,-14.71102 0.2461,18.77 18.6473,-2.1573 -13.0984,13.44646 z" + inkscape:transform-center-x="0.14620371" + inkscape:transform-center-y="2.9995242" + inkscape:label="eight" /> + </g> + <g + transform="matrix(3.3549332,0,0,3.14525,-181.87457,3116.0198)" + style="fill-rule:evenodd;stroke-width:0.47631353" + id="g1490" + inkscape:label="HMI:ModalOKDialog"> + <path + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.6;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.16776976;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + d="M 54.211099,1.2654702 H 435.73881 V 230.18209 H 54.211099 Z" + id="path1386" + inkscape:connector-curvature="0" + inkscape:label="Background" + sodipodi:nodetypes="ccccc" /> + <rect + inkscape:label="Field" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#fffff5;fill-opacity:1;fill-rule:nonzero;stroke:#202326;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="rect1388" + width="314.68832" + height="68.369255" + x="87.630791" + y="56.041908" + rx="3.8152773" + ry="3.8152773" /> + <text + inkscape:label="Message" + xml:space="preserve" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:19.0763855px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.47690967px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="243.24242" + y="94.637527" + id="text1392"><tspan + sodipodi:role="line" + id="tspan1390" + x="243.24242" + y="94.637527" + style="text-align:center;text-anchor:middle;stroke-width:0.47690967px">message</tspan></text> + <g + transform="translate(-158.98593,95.381925)" + inkscape:label="OK" + id="g1466"> + <path + inkscape:connector-curvature="0" + d="m 363.41531,54.792986 h 81.09115 c 3.34,0 5.01006,3.34003 5.01006,5.010045 v 30.060225 c 0,3.340029 -1.67006,5.010032 -5.01006,5.010032 h -81.09115 c -1.67006,0 -5.01007,-1.670003 -5.01007,-5.010032 V 59.803031 c 0,-1.670015 3.34001,-5.010045 5.01007,-5.010045 z" + id="path1462" + style="opacity:1;vector-effect:none;fill:#4f4c4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.16824313;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + sodipodi:nodetypes="sssssssss" /> + <text + transform="scale(1.0007154,0.99928511)" + style="font-weight:normal;font-size:10.63882256px;font-family:Arial;fill:#ffffff;fill-rule:evenodd;stroke-width:0.36866826" + id="text1464" + y="78.632088" + x="402.71881"> + <tspan + style="text-align:center;text-anchor:middle" + id="tspan5195">OK</tspan> + </text> + </g> + <text + inkscape:label="Info" + transform="scale(0.96824589,1.0327955)" + id="text1482" + y="12.333653" + x="252.9579" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:12.31375408px;line-height:125%;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:center;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.30784383px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + style="stroke-width:0.30784383px" + y="12.333653" + x="252.9579" + id="tspan1480" + sodipodi:role="line">information</tspan></text> + </g> + <g + transform="matrix(0.31845218,0,0,0.31845218,701.53368,169.53582)" + inkscape:label="HMI:Input@/ALARMCOUNT" + id="g5222"> + <text + xml:space="preserve" + style="font-style:normal;font-weight:normal;font-size:160px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + x="136.32812" + y="218.24219" + id="text5208" + inkscape:label="value"><tspan + sodipodi:role="line" + id="tspan5206" + x="136.32812" + y="218.24219" + style="stroke-width:1px">8888</tspan></text> + <path + transform="scale(1,-1)" + sodipodi:type="star" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + id="path5212" + sodipodi:sides="3" + sodipodi:cx="596.74072" + sodipodi:cy="-184.98808" + sodipodi:r1="29.912722" + sodipodi:r2="14.956361" + sodipodi:arg1="0.52359878" + sodipodi:arg2="1.5707963" + inkscape:flatsided="true" + inkscape:rounded="0" + inkscape:randomized="0" + d="m 622.6459,-170.03172 -51.81035,0 25.90517,-44.86908 z" + inkscape:transform-center-y="7.4781812" + inkscape:label="-1" /> + <rect + inkscape:label="edit" + onclick="" + y="95.40741" + x="139.85185" + height="128" + width="407.7037" + id="rect5214" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /> + <path + inkscape:label="+1" + inkscape:transform-center-y="-7.4781804" + d="m 622.6459,151.4008 -51.81035,0 25.90517,-44.86908 z" + inkscape:randomized="0" + inkscape:rounded="0" + inkscape:flatsided="true" + sodipodi:arg2="1.5707963" + sodipodi:arg1="0.52359878" + sodipodi:r2="14.956361" + sodipodi:r1="29.912722" + sodipodi:cy="136.44444" + sodipodi:cx="596.74072" + sodipodi:sides="3" + id="path5218" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + sodipodi:type="star" /> + </g> </svg>