--- a/exemples/svghmi_foreach/svghmi_0@svghmi/svghmi.svg Wed Nov 27 16:05:26 2024 +0100
+++ b/exemples/svghmi_foreach/svghmi_0@svghmi/svghmi.svg Wed Oct 16 15:45:15 2024 +0200
@@ -220,7 +220,7 @@
sodipodi:role="line">8888</tspan></text>
- inkscape:label="HMI:ForEach:PUMP@/@range@position@size"
+ inkscape:label="HMI:ForEach:PUMP@/@position@range@size" transform="translate(-3180.7865,1314.0878)">
@@ -937,7 +937,7 @@
style="fill:#000000;fill-opacity:1;stroke-width:0.5px">8888</tspan></text>
transform="translate(-1160.7865,1314.0878)"
- inkscape:label="HMI:ForEach:PUMP@/@range@position@size"
+ inkscape:label="HMI:ForEach:PUMP@/@position@range@size" transform="translate(32.987139)"
--- a/svghmi/gen_index_xhtml.xslt Wed Nov 27 16:05:26 2024 +0100
+++ b/svghmi/gen_index_xhtml.xslt Wed Oct 16 15:45:15 2024 +0200
@@ -4681,7 +4681,7 @@
<xsl:text> sub(new_offset, relativeness, container_id){
- <xsl:text> let position_given = this.indexes.length > 2;
+ <xsl:text> let position_given = this.indexes.length > 1; @@ -4713,9 +4713,13 @@
<xsl:text> // as soon as subribed apply range and size once for all
- <xsl:text> this.apply_hmi_value(1, this.range);
- <xsl:text> this.apply_hmi_value(3, this.size);
+ <xsl:text> if(this.indexes.length > 2) + <xsl:text> this.apply_hmi_value(2, this.range); + <xsl:text> if(this.indexes.length > 3) + <xsl:text> this.apply_hmi_value(3, this.size); @@ -4779,7 +4783,7 @@
<xsl:text> if(this.apply_position(new_position)){
- <xsl:text> this.apply_hmi_value(2, this.position);
+ <xsl:text> this.apply_hmi_value(1, this.position); @@ -4791,7 +4795,7 @@
<xsl:text> // Only care about position, others are constants
- <xsl:text> if(index == 2){
+ <xsl:text> if(index == 1){ <xsl:text> this.apply_position(value);
@@ -4799,7 +4803,7 @@
<xsl:text> // widget refused or apply different value, force it back
- <xsl:text> this.apply_hmi_value(2, this.position);
+ <xsl:text> this.apply_hmi_value(1, this.position); --- a/svghmi/widget_foreach.ysl2 Wed Nov 27 16:05:26 2024 +0100
+++ b/svghmi/widget_foreach.ysl2 Wed Oct 16 15:45:15 2024 +0200
@@ -29,6 +29,9 @@
arg name="class_name" accepts="string" > HMI_CLASS name
path name="root" accepts="HMI_NODE" > where to find HMI_NODEs whose HMI_CLASS is class_name
+ path name="position" accepts="HMI_INT" > position of HMI_NODE mapped to first item, among similar siblings + path name="range" accepts="HMI_INT" count="optional" > count of HMI_NODE siblings + path name="size" accepts="HMI_INT" count="optional" > count of visible items @@ -125,7 +128,7 @@
sub(new_offset, relativeness, container_id){
- let position_given = this.indexes.length > 2;
+ let position_given = this.indexes.length > 1; // sub() will call apply_cache() and then dispatch()
// undefining position forces dispatch() to call apply_position()
@@ -141,8 +144,10 @@
// as soon as subribed apply range and size once for all
- this.apply_hmi_value(1, this.range);
- this.apply_hmi_value(3, this.size);
+ if(this.indexes.length > 2) + this.apply_hmi_value(2, this.range); + if(this.indexes.length > 3) + this.apply_hmi_value(3, this.size); apply_position(new_position){
@@ -174,17 +179,17 @@
if(this.apply_position(new_position)){
- this.apply_hmi_value(2, this.position);
+ this.apply_hmi_value(1, this.position); dispatch(value, oldval, index) {
// Only care about position, others are constants
this.apply_position(value);
if(this.position != value){
// widget refused or apply different value, force it back
- this.apply_hmi_value(2, this.position);
+ this.apply_hmi_value(1, this.position);