# HG changeset patch # User Edouard Tisserant # Date 1612261023 -3600 # Node ID 229795c03e11ed2c63cd38015a9d27ed69d51910 # Parent 8094494113b614680f01fd0cfc94c039a0f2ff9d SVGHMI: make a copy of tests/svghmi as test/svghmi_widget because too crowded since having pages for widget documentation. Strip those pages from tests/svghmi, so that it is more light for regular testing. diff -r 8094494113b6 -r 229795c03e11 tests/svghmi/svghmi_0@svghmi/svghmi.svg --- a/tests/svghmi/svghmi_0@svghmi/svghmi.svg Tue Feb 02 10:59:00 2021 +0100 +++ b/tests/svghmi/svghmi_0@svghmi/svghmi.svg Tue Feb 02 11:17:03 2021 +0100 @@ -33,48 +33,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -240,631 +49,6 @@ id="stop20535" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -961,41 +91,6 @@ id="stop960" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + inkscape:bbox-nodes="true" /> - - - - - - 0 - 10000 - [value] - - - - - 0 - 10000 - [value] - - - - 5,150 - - - - - - - - - - - 5,150 - - - - - - 5,150 - - - - - - 5,150 - - - - HMI:Meter:[min:max]@path - - clone +stroke color - template (usually out of page)needle has undefinedstroke paint - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - https://openclipart.org/detail/205486/voltmeter-and-ammeter - - - [max] - [min] - [max] - [min] - Second point of "needle" labeled SVG path moves along "range" labeled SVG path according to value. Value min and max range is either given as arguments or as "min" and "max" labeled SVG texts, or default to 0...100 if unspecified. - needle - range - needle - range - - - - - - - - - - 65% - - - - - - - - - HMI:CircularBar:[min:max]@path - https://openclipart.org/detail/203239/gauges-vectorbased-superb-quality - - [value] - - 0 - 100 - - [max] - [min] - Inkscape's Arc labeled "path" End angle varies according to value. Arc cannot be closed yet, use wide stroke to fill.Value min and max range is either given as arguments or as "min" and "max" labeled SVG texts, or default to 0...100 if unspecified. - - - - - - - - 65% - - - - - - - - - - - - - 65% - - - - - - - - - - - - - - - HMI:Switch@path - Display only childs of widget's element (a SVG group) who's label match value. - - HMI:SwitchHMI_INT - 1 - 2 - 3 - 42 - 4 - 5 - - HMI:SwitchHMI_STRING - "aa" - "abba" - "mhoo" - "ggg" - "wtf" - "xxx" - - - - - - - - - - - - - - - - - - - - - - - - - - - - HMI:SwitchHMI_INT - 1 - 2 - 3 - 42 - 4 - 5 - - - - - - - - - - - - clone - - - - - - - - - - HMI:Switchcan containother widgets(or clonesof them) - - - - HMI:DropDown:[item0:item1:....]@path - TODO - - - - HMI:Input@path - TODO - - - - HMI:Display@path - TODO - - - - - Home - - - - - - - - - - - - - - - - - - - - - - - - - HMI:Button@path - TODO - - - - HMI:ForEach@path - TODO - - - - HMI:JsonTable@path - TODO - - - - HMI:Page:PageName[@RootPath]HMI:Jump:PageName[@RelativePath]HMI:Back - Pages are full screen, only one is displayed at the same time.If widget's bounding box is included in page bounding box, then widget is part of page.Page change is triggered by HMI:Jump and HMI:Back (TODO: /CURRENTPAGE).HMI:Back takes no parameter and just go back one step in page change history.HMI:Jump can have "inactive", "active" and "disabled" labeled children: - "inactive" is shown when target page is not currently displayed - "active" is shown when target page is currently displayed - "disabled" is shown when relative page's RootPath is set to 0, disabling jump. - When [@RootPath] is given, page is a relative page.When using HMI:Jump to reach a relative page, a compatible [@RelativePath] may be provided.To be compatible, RootPath and RelativePath must both point to same HMI_NODE (i.e same POU).Every widget using a path descendant of RootPath in a relative page is relative.Relative widgets get the RootPath section of their path replaced by RelativePath. - Relative pages - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / - HMI:MyPage@/A/B/C0 - - HMI:Jump:MyPage - - HMI:Jump:MyPage@/A/B/C1 - - HMI:Jump:MyPage@/A/B/C2 - - HMI:Jump:MyPage@/D/E/F - A - B - C0 - C1 - C2 - D - E - F - HMI:Jump:MyPage@/A/B/C0 - G - H - HMI:Widget@/A/B/C0/G - HMI:Widget@/A/B/C0/H - HMI:MyPage@/A/B/C0 - G - H - HMI:Widget@/A/B/C0/G - HMI:Widget@/A/B/C0/H - HMI:MyPage@/A/B/C0 - G - H - HMI:Widget@/A/B/C0/G - HMI:Widget@/A/B/C0/H - HMI:MyPage@/A/B/C0 - G - H - HMI:Widget@/A/B/C0/G - HMI:Widget@/A/B/C0/H - real path: /A/B/C0/G - real path: /A/B/C0/H - real path: /A/B/C1/G - real path: /A/B/C1/H - real path: /A/B/C2/G - real path: /A/B/C3/H - real path: /D/E/F/G - real path: /D/E/F/H - - HMI:SomePage - HMI:Widget@/A/I - HMI:Widget@/D/J - I - J - - HMI:Jump:SomePage - HMI_TREE root - - - HMI_NODE in a POU - HMI_* variable - - - - HMI:KeyPad:HMI_TYPE[:HMI_TYPE...] - KeyPad widget let user draw keyboard for different types of input.It is shown for example when editing a value from HMI:Input widget. - - - HMI:Keypad:HMI_STRING:HMI_LOCAL:PAGE_LOCAL - - - - HMI:Keypad:HMI_INT:HMI_REAL - - - - - - - - - - Info - Esc - Shift - Enter - [...] - Keys - 0 + - 9 - - 8 - [...] - q Q - w W - - [...] - , ; - . : - HMI:KeyPad - - Value - - - - - - - - - - Info - Esc - Sign - Enter - [...] - Keys - 9 - 8 - 7 - 6 - 5 - - - - - - - - - - 4 - 3 - [...] - HMI:KeyPad - - Value - - NumDot - - - - - HMI:SliderHMI:CircularSlider - TODO - - - - - - - - TO BE REWRITTEN, DO NOT USE - - - - sel_0 - - - - - HMI:ToggleButton@path - TODO - - - - HMI:Multistate@path - TODO - - - - HMI:CustomHtml@path - TODO - diff -r 8094494113b6 -r 229795c03e11 tests/svghmi_widgets/beremiz.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/svghmi_widgets/beremiz.xml Tue Feb 02 11:17:03 2021 +0100 @@ -0,0 +1,5 @@ + + + + + diff -r 8094494113b6 -r 229795c03e11 tests/svghmi_widgets/plc.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/svghmi_widgets/plc.xml Tue Feb 02 11:17:03 2021 +0100 @@ -0,0 +1,922 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TargetPressure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TargetPressure + + + + + + + + + + + + + + Sloth + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pressure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sloth + + + + + + + + + + + Pressure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + strout + + + + + + + TargetPressure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + strin + + + + + + + boolin + + + + + + + + + + + boolout + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pressure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + floating + + + + + + + Sloth + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + REAL#100.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + Sloth + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sloth + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 8094494113b6 -r 229795c03e11 tests/svghmi_widgets/py_ext_0@py_ext/baseconfnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/svghmi_widgets/py_ext_0@py_ext/baseconfnode.xml Tue Feb 02 11:17:03 2021 +0100 @@ -0,0 +1,2 @@ + + diff -r 8094494113b6 -r 229795c03e11 tests/svghmi_widgets/py_ext_0@py_ext/pyfile.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/svghmi_widgets/py_ext_0@py_ext/pyfile.xml Tue Feb 02 11:17:03 2021 +0100 @@ -0,0 +1,93 @@ + + + + + + + + + + 0 and extra[0] != "": + fAlarms = [alrm for alrm in Alarms if alrm[1].find(extra[0])!=-1] + else: + fAlarms = Alarms + new_range = len(fAlarms) + delta = new_range - visible + new_position = 0 if delta <= 0 else delta if old_position > delta else old_position + new_visible = new_range if delta <= 0 else visible + + visible_alarms = [] + for ts, text, status, alarmid in fAlarms[new_position:new_position + new_visible]: + visible_alarms.append({ + "time": time.ctime(ts), + "text": text, # TODO translate text + "status": status, + "alarmid": alarmid + }) + + return new_range, new_position, visible_alarms + + +]]> + + + + + + + + + + + + + + diff -r 8094494113b6 -r 229795c03e11 tests/svghmi_widgets/svghmi_0@svghmi/baseconfnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/svghmi_widgets/svghmi_0@svghmi/baseconfnode.xml Tue Feb 02 11:17:03 2021 +0100 @@ -0,0 +1,2 @@ + + diff -r 8094494113b6 -r 229795c03e11 tests/svghmi_widgets/svghmi_0@svghmi/confnode.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/svghmi_widgets/svghmi_0@svghmi/confnode.xml Tue Feb 02 11:17:03 2021 +0100 @@ -0,0 +1,2 @@ + + diff -r 8094494113b6 -r 229795c03e11 tests/svghmi_widgets/svghmi_0@svghmi/svghmi.svg --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/svghmi_widgets/svghmi_0@svghmi/svghmi.svg Tue Feb 02 11:17:03 2021 +0100 @@ -0,0 +1,13525 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Home + + + + + + + + + Settings + + + + 8888 + + + + + + + + 8888 + + + + 0 + 10000 + 000 + bar + + SetPoint + Actual + Pressure + + + + nastavljena vrednost + dejanska vrednost + pritisk + Settings + Home + + + + + 0 + 10000 + 000 + €£$¥ + + + 8888 + + + + →0← + + + + -10 + + + + -100 + + + + +100 + + + + +10 + + + 8888 + 8888 + 8888 + + 8888 + + + + dhu + + + + plop + + + + mhoo + + + + yodl + + + + mhe + + + + + + number + + + + + + + + 7 + + + + 4 + + + + 1 + + + + 8 + + + + 5 + + + + 2 + + + + 9 + + + + 6 + + + + 3 + + + + 0 + + + + + Esc + + + + + + + + +/- + + information + + + . + + + + + + + + + Q + + + + W + + + + E + + + + R + + + + T + + + + Y + + + + U + + + + I + + + + O + + + + P + + + + A + + + + S + + + + D + + + + F + + + + G + + + + H + + + + J + + + + K + + + + L + + + + Z + + + + X + + + + C + + + + V + + + + B + + + + N + + + + M + + + + . + : + + + + ; + , + + + + 1 + + + + 2 + + + + 3 + + + + 4 + + + + 5 + + + + 6 + + + + 7 + + + + 8 + + + + 9 + - + + + + 0 + + + + + + + Esc + + + + + + + + + + + + + Caps + Lock + + + + Caps + Lock + + + + text + + + + Shift + + Shift + + + + Shift + + Shift + + + information + + + + + sel_0 + + + + + 8 + + + + + + + + + + up + + + + + + + + + + + + + + + + + + + + + + + + message + + + + OK + + + information + + + + + 0 + 10000 + 000 + bar + + + + + + + + + + + + + + + + + + + + + 8888 + + + + + + + + + 8888 + + + + dhu + + + + plop + + + + mhoo + + + + yodl + + + + mhe + + + 8888 + + + + + + Pump 0 + + + + + + + + Pump 1 + + + + + + + + Pump 2 + + + + + + + + Pump 3 + + + 8888 + 8888 + 8888 + 8888 + + + + + + + + Pump + 8888 + + + + + + + + + + Pump + 8888 + + + + + + + + + + Pump + 8888 + + + + + + + + + + Pump + 8888 + + + + + + +1 + + + + -1 + + + 8888 + Multiple variables + 8888 + + 8888 + + + + dhu + + + + plop + + + + mhoo + + + + yodl + + + + mhe + + + HMI_LOCAL variables + 8888 + + 8888 + + + + dhu + + + + plop + + + + mhoo + + + + yodl + + + + mhe + + + PAGE_LOCAL variables + + + + 0 + 10000 + 000 + bar + + + 8888 + + + + + + + + 8888 + + 8888 + + + + dhu + + + + plop + + + + mhoo + + + + yodl + + + + mhe + + + HMI_LOCAL variables + 8888 + + 8888 + + + + dhu + + + + plop + + + + mhoo + + + + yodl + + + + mhe + + + PAGE_LOCAL variables + 8888 + + 8888 + + + + dhu + + + + plop + + + + mhoo + + + + yodl + + + + mhe + + + HMI_LOCAL variables + 8888 + + 8888 + + + + dhu + + + + plop + + + + mhoo + + + + yodl + + + + mhe + + + PAGE_LOCAL variables + + + + + + + + Alarm Page + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 8888 + + + + + + + + + + + + + + + value + value + value + value + + + + + + + + + 8888 + + + + + + 8888 + + + + + range + position + notify + + + 8888 + + + + + + + + trigger + + + + + 8888 + + + ack + + + + disabled + + + + active + + + + alarm + + + Alarm Text + Status + + + + + + Alarms + + + 8888 + + 8888 + + + filter + + + 8888 + + + + dhu + + + + plop + + + + mhoo + + + + yodl + + + + mhe + + + + 8888 + + + + dhu + + + + plop + + + + mhoo + + + + yodl + + + + mhe + + + + + + + + + + Home + + + + + + + + + 0 + 10000 + [value] + + + + + 0 + 10000 + [value] + + + + 5,150 + + + + + + + + + + + 5,150 + + + + + + 5,150 + + + + + + 5,150 + + + + HMI:Meter:[min:max]@path + + clone +stroke color + template (usually out of page)needle has undefinedstroke paint + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + https://openclipart.org/detail/205486/voltmeter-and-ammeter + + + [max] + [min] + [max] + [min] + Second point of "needle" labeled SVG path moves along "range" labeled SVG path according to value. Value min and max range is either given as arguments or as "min" and "max" labeled SVG texts, or default to 0...100 if unspecified. + needle + range + needle + range + + + + + + + + + + 65% + + + + + + + + + HMI:CircularBar:[min:max]@path + https://openclipart.org/detail/203239/gauges-vectorbased-superb-quality + + [value] + + 0 + 100 + + [max] + [min] + Inkscape's Arc labeled "path" End angle varies according to value. Arc cannot be closed yet, use wide stroke to fill.Value min and max range is either given as arguments or as "min" and "max" labeled SVG texts, or default to 0...100 if unspecified. + + + + + + + + 65% + + + + + + + + + + + + + 65% + + + + + + + + + + + + + + + + HMI:Switch@path + Display only childs of widget's element (a SVG group) who's label match value. + + HMI:SwitchHMI_INT + 1 + 2 + 3 + 42 + 4 + 5 + + HMI:SwitchHMI_STRING + "aa" + "abba" + "mhoo" + "ggg" + "wtf" + "xxx" + + + + + + + + + + + + + + + + + + + + + + + + + + + + HMI:SwitchHMI_INT + 1 + 2 + 3 + 42 + 4 + 5 + + + + + + + + + + + + clone + + + + + + + + + + HMI:Switchcan containother widgets(or clonesof them) + + + + HMI:DropDown:[item0:item1:....]@path + TODO + + + + HMI:Input@path + TODO + + + + HMI:Display@path + TODO + + + + + Home + + + + + + + + + + + + + + + + + + + + + + + + + HMI:Button@path + TODO + + + + HMI:ForEach@path + TODO + + + + HMI:JsonTable@path + TODO + + + + HMI:Page:PageName[@RootPath]HMI:Jump:PageName[@RelativePath]HMI:Back + Pages are full screen, only one is displayed at the same time.If widget's bounding box is included in page bounding box, then widget is part of page.Page change is triggered by HMI:Jump and HMI:Back (TODO: /CURRENTPAGE).HMI:Back takes no parameter and just go back one step in page change history.HMI:Jump can have "inactive", "active" and "disabled" labeled children: - "inactive" is shown when target page is not currently displayed - "active" is shown when target page is currently displayed - "disabled" is shown when relative page's RootPath is set to 0, disabling jump. + When [@RootPath] is given, page is a relative page.When using HMI:Jump to reach a relative page, a compatible [@RelativePath] may be provided.To be compatible, RootPath and RelativePath must both point to same HMI_NODE (i.e same POU).Every widget using a path descendant of RootPath in a relative page is relative.Relative widgets get the RootPath section of their path replaced by RelativePath. + Relative pages + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / + HMI:MyPage@/A/B/C0 + + HMI:Jump:MyPage + + HMI:Jump:MyPage@/A/B/C1 + + HMI:Jump:MyPage@/A/B/C2 + + HMI:Jump:MyPage@/D/E/F + A + B + C0 + C1 + C2 + D + E + F + HMI:Jump:MyPage@/A/B/C0 + G + H + HMI:Widget@/A/B/C0/G + HMI:Widget@/A/B/C0/H + HMI:MyPage@/A/B/C0 + G + H + HMI:Widget@/A/B/C0/G + HMI:Widget@/A/B/C0/H + HMI:MyPage@/A/B/C0 + G + H + HMI:Widget@/A/B/C0/G + HMI:Widget@/A/B/C0/H + HMI:MyPage@/A/B/C0 + G + H + HMI:Widget@/A/B/C0/G + HMI:Widget@/A/B/C0/H + real path: /A/B/C0/G + real path: /A/B/C0/H + real path: /A/B/C1/G + real path: /A/B/C1/H + real path: /A/B/C2/G + real path: /A/B/C3/H + real path: /D/E/F/G + real path: /D/E/F/H + + HMI:SomePage + HMI:Widget@/A/I + HMI:Widget@/D/J + I + J + + HMI:Jump:SomePage + HMI_TREE root + + + HMI_NODE in a POU + HMI_* variable + + + + + HMI:KeyPad:HMI_TYPE[:HMI_TYPE...] + KeyPad widget let user draw keyboard for different types of input.It is shown for example when editing a value from HMI:Input widget. + + + HMI:Keypad:HMI_STRING:HMI_LOCAL:PAGE_LOCAL + + + + HMI:Keypad:HMI_INT:HMI_REAL + + + + + + + + + + Info + Esc + Shift + Enter + [...] + Keys + 0 + + 9 - + 8 + [...] + q Q + w W + + [...] + , ; + . : + HMI:KeyPad + + Value + + + + + + + + + + Info + Esc + Sign + Enter + [...] + Keys + 9 + 8 + 7 + 6 + 5 + + + + + + + + + + 4 + 3 + [...] + HMI:KeyPad + + Value + + NumDot + + + + + HMI:SliderHMI:CircularSlider + TODO + + + + + + + + TO BE REWRITTEN, DO NOT USE + + + + sel_0 + + + + + HMI:ToggleButton@path + TODO + + + + HMI:Multistate@path + TODO + + + + HMI:CustomHtml@path + TODO + +