# HG changeset patch
# User Edouard Tisserant
# Date 1642156822 -3600
# Node ID 4a048b5b9e3bf22ab8b3ff0e0db3b2ddcb1c5b01
# Parent  3f54a680fe456d956342939e8f676f0315da423a
SVGHMI: added ListSwitch widget

diff -r 3f54a680fe45 -r 4a048b5b9e3b svghmi/widget_listswitch.ysl2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/svghmi/widget_listswitch.ysl2	Fri Jan 14 11:40:22 2022 +0100
@@ -0,0 +1,38 @@
+// widget_switch.ysl2
+
+widget_desc("ListSwitch") {
+    longdesc
+    ||
+    ListSwitch widget displays one item of an HMI:List depending on value of
+    given variable. Main element of the widget must be a clone of the list or
+    of an item of that list.  
+
+    Given variable's current value is compared to list items
+    label. For exemple if given variable type
+    is HMI_INT and value is 1, then item with label '1' will be displayed.
+    If matching variable of type HMI_STRING, then no quotes are needed. 
+    For exemple, 'hello' match HMI_STRING 'hello'.
+    ||
+
+    shortdesc > Displays item of an HMI:List whose label matches value.
+
+    path name="value" accepts="HMI_INT,HMI_STRING" > value to compare to labels
+    
+}
+
+widget_class("ListSwitch"){
+    ||
+        frequency = 5;
+    ||
+}
+
+widget_defs("ListSwitch") {
+    // cloned element must be part of a HMI:List or a HMI:List
+    const "targetid", "substring-after($hmi_element/@xlink:href,'#')";
+    const "from_list", "$hmi_lists[(@id | */@id) = $targetid]";
+    ||
+        dispatch: function(value) {
+            this.element.href.baseVal = "#"+hmi_widgets["«$from_list/@id»"].items[value];
+        },
+    ||
+}