author | Edouard Tisserant <edouard@beremiz.fr> |
Fri, 30 Aug 2024 11:50:23 +0200 | |
changeset 4008 | f30573e98600 |
parent 3702 | 6dc619fa28aa |
child 4024 | f9c6bbf66eea |
permissions | -rw-r--r-- |
2884
50b9832c51fc
SVGHMI: update Makefile to pick all changes to any dependency
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2883
diff
changeset
|
1 |
// widgets_common.ysl2 |
50b9832c51fc
SVGHMI: update Makefile to pick all changes to any dependency
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2883
diff
changeset
|
2 |
|
2808
dc78ffa5253d
SVGHMI: SVG viewport now defined so that HMI take scales and fit to the view. Implemented page switch through viewport change, no hiding of widget for now.
Edouard Tisserant
parents:
2807
diff
changeset
|
3 |
in xsl decl labels(*ptr, name="defs_by_labels") alias call-template { |
dc78ffa5253d
SVGHMI: SVG viewport now defined so that HMI take scales and fit to the view. Implemented page switch through viewport change, no hiding of widget for now.
Edouard Tisserant
parents:
2807
diff
changeset
|
4 |
with "hmi_element", "$hmi_element"; |
2810
63b9a37b73c7
SVGHMI: various insignificant code moves, commenting and typos fixes.
Edouard Tisserant
parents:
2808
diff
changeset
|
5 |
with "labels"{text *ptr}; |
2937
9226a830fbc3
SVGHMI: moving code wher it belongs, and reformulate some declarations for better readability.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2920
diff
changeset
|
6 |
content; |
2808
dc78ffa5253d
SVGHMI: SVG viewport now defined so that HMI take scales and fit to the view. Implemented page switch through viewport change, no hiding of widget for now.
Edouard Tisserant
parents:
2807
diff
changeset
|
7 |
}; |
dc78ffa5253d
SVGHMI: SVG viewport now defined so that HMI take scales and fit to the view. Implemented page switch through viewport change, no hiding of widget for now.
Edouard Tisserant
parents:
2807
diff
changeset
|
8 |
|
2937
9226a830fbc3
SVGHMI: moving code wher it belongs, and reformulate some declarations for better readability.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2920
diff
changeset
|
9 |
decl optional_labels(*ptr) alias - { |
9226a830fbc3
SVGHMI: moving code wher it belongs, and reformulate some declarations for better readability.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2920
diff
changeset
|
10 |
/* TODO add some per label xslt variable to check if exist */ |
9226a830fbc3
SVGHMI: moving code wher it belongs, and reformulate some declarations for better readability.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2920
diff
changeset
|
11 |
labels(*ptr){ |
9226a830fbc3
SVGHMI: moving code wher it belongs, and reformulate some declarations for better readability.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2920
diff
changeset
|
12 |
with "mandatory","'no'"; |
9226a830fbc3
SVGHMI: moving code wher it belongs, and reformulate some declarations for better readability.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2920
diff
changeset
|
13 |
content; |
9226a830fbc3
SVGHMI: moving code wher it belongs, and reformulate some declarations for better readability.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2920
diff
changeset
|
14 |
} |
2836
ce6cecdb7320
SVGHMI : still behave, even if important things are missing in SVG widget definitions (ex: needle missing for Meter widget)
Edouard Tisserant
parents:
2834
diff
changeset
|
15 |
}; |
ce6cecdb7320
SVGHMI : still behave, even if important things are missing in SVG widget definitions (ex: needle missing for Meter widget)
Edouard Tisserant
parents:
2834
diff
changeset
|
16 |
|
3522
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
17 |
decl warning_labels(*ptr) alias - { |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
18 |
labels(*ptr){ |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
19 |
with "mandatory","'warn'"; |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
20 |
content; |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
21 |
} |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
22 |
}; |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
23 |
|
3595
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
24 |
decl _activable(*level) alias - { |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
25 |
| activable_sub:{ |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
26 |
const "activity" labels("/active /inactive") { |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
27 |
with "mandatory"{text *level}; |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
28 |
content; |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
29 |
} |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
30 |
value "$activity"; |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
31 |
const "has_activity","string-length($activity)>0"; |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
32 |
| }, |
3596
9c725829d8f0
SVGHMI: continue rework of Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3595
diff
changeset
|
33 |
| has_activity: «$has_activity», |
3595
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
34 |
}; |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
35 |
|
3520
b27e50143083
SVGHMI: generalize detach/re-attach of binary choices for ToggleButton, PushButton, Button and Keypad's Shit and CapsLock.
Edouard Tisserant
parents:
3504
diff
changeset
|
36 |
decl activable() alias - { |
3595
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
37 |
_activable("warn") |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
38 |
}; |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
39 |
decl optional_activable() alias - { |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
40 |
_activable("no") |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
41 |
}; |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
42 |
|
2937
9226a830fbc3
SVGHMI: moving code wher it belongs, and reformulate some declarations for better readability.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2920
diff
changeset
|
43 |
decl activable_labels(*ptr) alias - { |
9226a830fbc3
SVGHMI: moving code wher it belongs, and reformulate some declarations for better readability.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2920
diff
changeset
|
44 |
optional_labels(*ptr) { |
9226a830fbc3
SVGHMI: moving code wher it belongs, and reformulate some declarations for better readability.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2920
diff
changeset
|
45 |
with "subelements","'active inactive'"; |
9226a830fbc3
SVGHMI: moving code wher it belongs, and reformulate some declarations for better readability.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2920
diff
changeset
|
46 |
content; |
9226a830fbc3
SVGHMI: moving code wher it belongs, and reformulate some declarations for better readability.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2920
diff
changeset
|
47 |
} |
2920
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
48 |
}; |
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
49 |
|
3233
315f17e74ef5
SVGHMI: Added widget_desc to declare widget signature and description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
50 |
in xsl decl widget_desc(%name, match="widget[@type='%name']", mode="widget_desc") alias template { |
315f17e74ef5
SVGHMI: Added widget_desc to declare widget signature and description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
51 |
type > «@type» |
315f17e74ef5
SVGHMI: Added widget_desc to declare widget signature and description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
52 |
content; |
315f17e74ef5
SVGHMI: Added widget_desc to declare widget signature and description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
53 |
}; |
315f17e74ef5
SVGHMI: Added widget_desc to declare widget signature and description
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
54 |
|
3232
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
55 |
in xsl decl widget_class(%name, *clsname="%nameWidget", match="widget[@type='%name']", mode="widget_class") alias template { |
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
56 |
| class `text **clsname` extends Widget{ |
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
57 |
content; |
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
58 |
| } |
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
59 |
}; |
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
60 |
|
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
61 |
in xsl decl widget_defs(%name, match="widget[@type='%name']", mode="widget_defs") alias template { |
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
62 |
param "hmi_element"; |
3595
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
63 |
// all widget potentially has a "disabled" labeled element |
3600
c9ecf7d50888
SVGHMI: refactor an factorize widget dispatch() method calling
Edouard Tisserant
parents:
3596
diff
changeset
|
64 |
const "disability" optional_labels("/disabled"); |
3595
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
65 |
value "$disability"; |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
66 |
const "has_disability","string-length($disability)>0"; |
3232
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
67 |
content; |
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
68 |
}; |
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
69 |
|
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
70 |
in xsl decl widget_page(%name, match="widget[@type='%name']", mode="widget_page") alias template { |
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
71 |
param "page_desc"; |
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
72 |
content; |
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
73 |
}; |
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
74 |
|
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
75 |
decl gen_index_xhtml alias - { |
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
76 |
content; |
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
77 |
}; |
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3162
diff
changeset
|
78 |
|
2955
64e603b84aa3
SVGHMI: Exclude non-widget HMI:* labeled elements from hmi_widget. Namely : HMI:Page HMI:Lang and HMI:List have been excluded.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2954
diff
changeset
|
79 |
template "svg:*", mode="hmi_widgets" { |
2886
6c82fad8be65
SVGHMI: Simplification and optimization. func:parselabel becomes a template.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2884
diff
changeset
|
80 |
const "widget", "func:widget(@id)"; |
2881 | 81 |
const "eltid","@id"; |
3024 | 82 |
const "args" foreach "$widget/arg" > "«func:escape_quotes(@value)»"`if "position()!=last()" > ,` |
2950
1e53d8b60ee9
SVGHMI: Parameters common to all widget constructors now passed as ordered parameters.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2949
diff
changeset
|
83 |
const "indexes" foreach "$widget/path" { |
3594
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
84 |
if "position()!=last()" > , |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
85 |
} |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
86 |
|
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
87 |
const "variables" foreach "$widget/path" { |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
88 |
> [ |
2881 | 89 |
choose { |
90 |
when "not(@index)" { |
|
3017
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
91 |
choose { |
3058
6ea4b7e1a9ed
Merge + fix side effects of making warning instead of errors in case of missing HMI variable
Edouard Tisserant
diff
changeset
|
92 |
when "not(@type)" { |
3056
827bf284feec
Button, ToggleButton and slider updated. Error to warning when building
usveticic
parents:
3026
diff
changeset
|
93 |
warning > Widget «$widget/@type» id="«$eltid»" : No match for path "«@value»" in HMI tree |
3101
4cbf024a6640
SVGHMI: cosmetic changes
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3099
diff
changeset
|
94 |
> undefined |
3058
6ea4b7e1a9ed
Merge + fix side effects of making warning instead of errors in case of missing HMI variable
Edouard Tisserant
diff
changeset
|
95 |
} |
3017
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
96 |
when "@type = 'PAGE_LOCAL'" |
3101
4cbf024a6640
SVGHMI: cosmetic changes
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3099
diff
changeset
|
97 |
> "«@value»" |
3017
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
98 |
when "@type = 'HMI_LOCAL'" |
3101
4cbf024a6640
SVGHMI: cosmetic changes
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3099
diff
changeset
|
99 |
> hmi_local_index("«@value»") |
4cbf024a6640
SVGHMI: cosmetic changes
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3099
diff
changeset
|
100 |
otherwise |
4cbf024a6640
SVGHMI: cosmetic changes
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3099
diff
changeset
|
101 |
error > Internal error while processing widget's non indexed HMI tree path : unknown type |
3017
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
102 |
} |
2881 | 103 |
} |
104 |
otherwise { |
|
3101
4cbf024a6640
SVGHMI: cosmetic changes
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3099
diff
changeset
|
105 |
> «@index» |
4cbf024a6640
SVGHMI: cosmetic changes
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3099
diff
changeset
|
106 |
} |
4cbf024a6640
SVGHMI: cosmetic changes
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3099
diff
changeset
|
107 |
} |
3594
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
108 |
> , { |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
109 |
if "@min and @max"{ |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
110 |
> minmax:[«@min», «@max»] |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
111 |
if "@assign" |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
112 |
> , |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
113 |
} |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
114 |
if "@assign" |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
115 |
> assign:"«@assign»" |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
116 |
> }] |
3099
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
117 |
if "position()!=last()" > , |
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
118 |
} |
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
119 |
|
3408
13c5cac55ac7
SVGHMI: add syntax for widget update frequency in widget label: HMI:WidgetType|freq:arg0:arg1@path
Edouard Tisserant
parents:
3233
diff
changeset
|
120 |
const "freq" choose { |
3412
04c4835ca376
SVGHMI: Fixed support for frequency parsing in widget label
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3408
diff
changeset
|
121 |
when "$widget/@freq" |
3455
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
122 |
> "«$widget/@freq»" |
3408
13c5cac55ac7
SVGHMI: add syntax for widget update frequency in widget label: HMI:WidgetType|freq:arg0:arg1@path
Edouard Tisserant
parents:
3233
diff
changeset
|
123 |
otherwise |
13c5cac55ac7
SVGHMI: add syntax for widget update frequency in widget label: HMI:WidgetType|freq:arg0:arg1@path
Edouard Tisserant
parents:
3233
diff
changeset
|
124 |
> undefined |
13c5cac55ac7
SVGHMI: add syntax for widget update frequency in widget label: HMI:WidgetType|freq:arg0:arg1@path
Edouard Tisserant
parents:
3233
diff
changeset
|
125 |
} |
13c5cac55ac7
SVGHMI: add syntax for widget update frequency in widget label: HMI:WidgetType|freq:arg0:arg1@path
Edouard Tisserant
parents:
3233
diff
changeset
|
126 |
|
3594
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
127 |
const "enable_expr" choose{ |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
128 |
when "$widget/@enable_expr" |
3593
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
129 |
> true |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
130 |
otherwise |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
131 |
> false |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
132 |
} |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
133 |
|
3594
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
134 |
| "«@id»": new «$widget/@type»Widget ("«@id»",«$freq»,[«$args»],[«$variables»],«$enable_expr»,{ |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
135 |
if "$widget/@enable_expr" { |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
136 |
|
3686
a3c509e66695
SVGHMI: avoid Widget's member name colision in between enable expressions and assignments.
Edouard Tisserant
parents:
3685
diff
changeset
|
137 |
| enable_assignments: [], |
3594
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
138 |
| compute_enable: function(value, oldval, varnum) { |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
139 |
| let result = false; |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
140 |
| do { |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
141 |
foreach "$widget/path" { |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
142 |
const "varid","generate-id()"; |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
143 |
const "varnum","position()-1"; |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
144 |
if "@assign" foreach "$widget/path[@assign]" if "$varid = generate-id()" { |
3686
a3c509e66695
SVGHMI: avoid Widget's member name colision in between enable expressions and assignments.
Edouard Tisserant
parents:
3685
diff
changeset
|
145 |
| if(varnum == «$varnum») this.enable_assignments[«position()-1»] = value; |
a3c509e66695
SVGHMI: avoid Widget's member name colision in between enable expressions and assignments.
Edouard Tisserant
parents:
3685
diff
changeset
|
146 |
| let «@assign» = this.enable_assignments[«position()-1»]; |
3594
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
147 |
| if(«@assign» == undefined) break; |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
148 |
} |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
149 |
} |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
150 |
| result = «$widget/@enable_expr»; |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
151 |
| } while(0); |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
152 |
| this.enable(result); |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
153 |
| }, |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
154 |
} |
2881 | 155 |
apply "$widget", mode="widget_defs" with "hmi_element","."; |
2949
e50908ddec60
SVGHMI: One class per widget type, widget objects are instances of these classes, and members are passed through constructor. This allows to keep compatible with previous widget_defs template used in most widgets.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2948
diff
changeset
|
156 |
| })`if "position()!=last()" > ,` |
e50908ddec60
SVGHMI: One class per widget type, widget objects are instances of these classes, and members are passed through constructor. This allows to keep compatible with previous widget_defs template used in most widgets.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2948
diff
changeset
|
157 |
} |
2948
faaf677ea99d
SVGHMI: Add an exslt function to collect used widget types, in order to only include necessary JS definitions in furure changes.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2941
diff
changeset
|
158 |
|
3017
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
159 |
emit "preamble:local-variable-indexes" { |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
160 |
|| |
3142
2637bb6a6bb0
SVGHMI: allow i18n of formated strings of HMI:Messages. This was by construction impossible since formating was given as an argument. Now added optional "format" labelled element in HMI:Display, so that it can be translated, when labelled "_format".
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3139
diff
changeset
|
161 |
|
3017
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
162 |
let hmi_locals = {}; |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
163 |
var last_remote_index = hmitree_types.length - 1; |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
164 |
var next_available_index = hmitree_types.length; |
3128
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
165 |
let cookies = new Map(document.cookie.split("; ").map(s=>s.split("="))); |
3017
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
166 |
|
3025
48e7e336c052
SVGHMI: HMI:VarInit:"a string"@a_value : empty widget (i.e. empty svg:group) that initialize content of local variables to value given as first argument.
Edouard Tisserant
parents:
3024
diff
changeset
|
167 |
const local_defaults = { |
48e7e336c052
SVGHMI: HMI:VarInit:"a string"@a_value : empty widget (i.e. empty svg:group) that initialize content of local variables to value given as first argument.
Edouard Tisserant
parents:
3024
diff
changeset
|
168 |
|| |
3128
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
169 |
foreach "$parsed_widgets/widget[starts-with(@type,'VarInit')]"{ |
3025
48e7e336c052
SVGHMI: HMI:VarInit:"a string"@a_value : empty widget (i.e. empty svg:group) that initialize content of local variables to value given as first argument.
Edouard Tisserant
parents:
3024
diff
changeset
|
170 |
if "count(path) != 1" error > VarInit «@id» must have only one variable given. |
48e7e336c052
SVGHMI: HMI:VarInit:"a string"@a_value : empty widget (i.e. empty svg:group) that initialize content of local variables to value given as first argument.
Edouard Tisserant
parents:
3024
diff
changeset
|
171 |
if "path/@type != 'PAGE_LOCAL' and path/@type != 'HMI_LOCAL'" error > VarInit «@id» only applies to HMI variable. |
3128
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
172 |
> "«path/@value»": |
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
173 |
choose { |
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
174 |
when "@type = 'VarInitPersistent'" > cookies.has("«path/@value»")?cookies.get("«path/@value»"):«arg[1]/@value» |
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
175 |
otherwise > «arg[1]/@value» |
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
176 |
} |
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
177 |
> \n |
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
178 |
if "position()!=last()" > , |
3025
48e7e336c052
SVGHMI: HMI:VarInit:"a string"@a_value : empty widget (i.e. empty svg:group) that initialize content of local variables to value given as first argument.
Edouard Tisserant
parents:
3024
diff
changeset
|
179 |
} |
48e7e336c052
SVGHMI: HMI:VarInit:"a string"@a_value : empty widget (i.e. empty svg:group) that initialize content of local variables to value given as first argument.
Edouard Tisserant
parents:
3024
diff
changeset
|
180 |
|| |
48e7e336c052
SVGHMI: HMI:VarInit:"a string"@a_value : empty widget (i.e. empty svg:group) that initialize content of local variables to value given as first argument.
Edouard Tisserant
parents:
3024
diff
changeset
|
181 |
}; |
3128
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
182 |
|
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
183 |
const persistent_locals = new Set([ |
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
184 |
|| |
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
185 |
foreach "$parsed_widgets/widget[@type='VarInitPersistent']"{ |
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
186 |
| "«path/@value»"`if "position()!=last()" > ,` |
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
187 |
} |
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
188 |
|| |
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
189 |
]); |
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
190 |
var persistent_indexes = new Map(); |
3022
f6fe42b7ce60
SVGHMI: finished initial implementation of PAGE_LOCAL and HMI_LOCAL variables.
Edouard Tisserant
parents:
3017
diff
changeset
|
191 |
var cache = hmitree_types.map(_ignored => undefined); |
f6fe42b7ce60
SVGHMI: finished initial implementation of PAGE_LOCAL and HMI_LOCAL variables.
Edouard Tisserant
parents:
3017
diff
changeset
|
192 |
|
3017
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
193 |
function page_local_index(varname, pagename){ |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
194 |
let pagevars = hmi_locals[pagename]; |
3022
f6fe42b7ce60
SVGHMI: finished initial implementation of PAGE_LOCAL and HMI_LOCAL variables.
Edouard Tisserant
parents:
3017
diff
changeset
|
195 |
let new_index; |
3017
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
196 |
if(pagevars == undefined){ |
3022
f6fe42b7ce60
SVGHMI: finished initial implementation of PAGE_LOCAL and HMI_LOCAL variables.
Edouard Tisserant
parents:
3017
diff
changeset
|
197 |
new_index = next_available_index++; |
3623 | 198 |
hmi_locals[pagename] = {[varname]:new_index}; |
3017
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
199 |
} else { |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
200 |
let result = pagevars[varname]; |
3022
f6fe42b7ce60
SVGHMI: finished initial implementation of PAGE_LOCAL and HMI_LOCAL variables.
Edouard Tisserant
parents:
3017
diff
changeset
|
201 |
if(result != undefined) { |
f6fe42b7ce60
SVGHMI: finished initial implementation of PAGE_LOCAL and HMI_LOCAL variables.
Edouard Tisserant
parents:
3017
diff
changeset
|
202 |
return result; |
f6fe42b7ce60
SVGHMI: finished initial implementation of PAGE_LOCAL and HMI_LOCAL variables.
Edouard Tisserant
parents:
3017
diff
changeset
|
203 |
} |
f6fe42b7ce60
SVGHMI: finished initial implementation of PAGE_LOCAL and HMI_LOCAL variables.
Edouard Tisserant
parents:
3017
diff
changeset
|
204 |
|
f6fe42b7ce60
SVGHMI: finished initial implementation of PAGE_LOCAL and HMI_LOCAL variables.
Edouard Tisserant
parents:
3017
diff
changeset
|
205 |
new_index = next_available_index++; |
f6fe42b7ce60
SVGHMI: finished initial implementation of PAGE_LOCAL and HMI_LOCAL variables.
Edouard Tisserant
parents:
3017
diff
changeset
|
206 |
pagevars[varname] = new_index; |
f6fe42b7ce60
SVGHMI: finished initial implementation of PAGE_LOCAL and HMI_LOCAL variables.
Edouard Tisserant
parents:
3017
diff
changeset
|
207 |
} |
3025
48e7e336c052
SVGHMI: HMI:VarInit:"a string"@a_value : empty widget (i.e. empty svg:group) that initialize content of local variables to value given as first argument.
Edouard Tisserant
parents:
3024
diff
changeset
|
208 |
let defaultval = local_defaults[varname]; |
3128
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
209 |
if(defaultval != undefined) { |
3025
48e7e336c052
SVGHMI: HMI:VarInit:"a string"@a_value : empty widget (i.e. empty svg:group) that initialize content of local variables to value given as first argument.
Edouard Tisserant
parents:
3024
diff
changeset
|
210 |
cache[new_index] = defaultval; |
3128
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
211 |
if(persistent_locals.has(varname)) |
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
212 |
persistent_indexes.set(new_index, varname); |
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
213 |
} |
3022
f6fe42b7ce60
SVGHMI: finished initial implementation of PAGE_LOCAL and HMI_LOCAL variables.
Edouard Tisserant
parents:
3017
diff
changeset
|
214 |
return new_index; |
3017
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
215 |
} |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
216 |
|
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
217 |
function hmi_local_index(varname){ |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
218 |
return page_local_index(varname, "HMI_LOCAL"); |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
219 |
} |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
220 |
|| |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
221 |
} |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
222 |
|
2949
e50908ddec60
SVGHMI: One class per widget type, widget objects are instances of these classes, and members are passed through constructor. This allows to keep compatible with previous widget_defs template used in most widgets.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2948
diff
changeset
|
223 |
emit "preamble:widget-base-class" { |
3017
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
224 |
|| |
3019
497aac6522a3
SVGHMI: provide request_animate() to Widget authors so that they can register redraw code when events lead to redraw. Widget member animate() is called when it is time to update DOM.
Edouard Tisserant
parents:
3007
diff
changeset
|
225 |
var pending_widget_animates = []; |
497aac6522a3
SVGHMI: provide request_animate() to Widget authors so that they can register redraw code when events lead to redraw. Widget member animate() is called when it is time to update DOM.
Edouard Tisserant
parents:
3007
diff
changeset
|
226 |
|
3520
b27e50143083
SVGHMI: generalize detach/re-attach of binary choices for ToggleButton, PushButton, Button and Keypad's Shit and CapsLock.
Edouard Tisserant
parents:
3504
diff
changeset
|
227 |
function _hide(elt, placeholder){ |
b27e50143083
SVGHMI: generalize detach/re-attach of binary choices for ToggleButton, PushButton, Button and Keypad's Shit and CapsLock.
Edouard Tisserant
parents:
3504
diff
changeset
|
228 |
if(elt.parentNode != null) |
b27e50143083
SVGHMI: generalize detach/re-attach of binary choices for ToggleButton, PushButton, Button and Keypad's Shit and CapsLock.
Edouard Tisserant
parents:
3504
diff
changeset
|
229 |
placeholder.parentNode.removeChild(elt); |
b27e50143083
SVGHMI: generalize detach/re-attach of binary choices for ToggleButton, PushButton, Button and Keypad's Shit and CapsLock.
Edouard Tisserant
parents:
3504
diff
changeset
|
230 |
} |
b27e50143083
SVGHMI: generalize detach/re-attach of binary choices for ToggleButton, PushButton, Button and Keypad's Shit and CapsLock.
Edouard Tisserant
parents:
3504
diff
changeset
|
231 |
function _show(elt, placeholder){ |
b27e50143083
SVGHMI: generalize detach/re-attach of binary choices for ToggleButton, PushButton, Button and Keypad's Shit and CapsLock.
Edouard Tisserant
parents:
3504
diff
changeset
|
232 |
placeholder.parentNode.insertBefore(elt, placeholder); |
b27e50143083
SVGHMI: generalize detach/re-attach of binary choices for ToggleButton, PushButton, Button and Keypad's Shit and CapsLock.
Edouard Tisserant
parents:
3504
diff
changeset
|
233 |
} |
b27e50143083
SVGHMI: generalize detach/re-attach of binary choices for ToggleButton, PushButton, Button and Keypad's Shit and CapsLock.
Edouard Tisserant
parents:
3504
diff
changeset
|
234 |
|
3596
9c725829d8f0
SVGHMI: continue rework of Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3595
diff
changeset
|
235 |
function set_activity_state(eltsub, state){ |
3522
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
236 |
if(eltsub.active_elt != undefined){ |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
237 |
if(eltsub.active_elt_placeholder == undefined){ |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
238 |
eltsub.active_elt_placeholder = document.createComment(""); |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
239 |
eltsub.active_elt.parentNode.insertBefore(eltsub.active_elt_placeholder, eltsub.active_elt); |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
240 |
} |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
241 |
(state?_show:_hide)(eltsub.active_elt, eltsub.active_elt_placeholder); |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
242 |
} |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
243 |
if(eltsub.inactive_elt != undefined){ |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
244 |
if(eltsub.inactive_elt_placeholder == undefined){ |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
245 |
eltsub.inactive_elt_placeholder = document.createComment(""); |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
246 |
eltsub.inactive_elt.parentNode.insertBefore(eltsub.inactive_elt_placeholder, eltsub.inactive_elt); |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
247 |
} |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
248 |
((state || state==undefined)?_hide:_show)(eltsub.inactive_elt, eltsub.inactive_elt_placeholder); |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
249 |
} |
3520
b27e50143083
SVGHMI: generalize detach/re-attach of binary choices for ToggleButton, PushButton, Button and Keypad's Shit and CapsLock.
Edouard Tisserant
parents:
3504
diff
changeset
|
250 |
} |
b27e50143083
SVGHMI: generalize detach/re-attach of binary choices for ToggleButton, PushButton, Button and Keypad's Shit and CapsLock.
Edouard Tisserant
parents:
3504
diff
changeset
|
251 |
|
2949
e50908ddec60
SVGHMI: One class per widget type, widget objects are instances of these classes, and members are passed through constructor. This allows to keep compatible with previous widget_defs template used in most widgets.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2948
diff
changeset
|
252 |
class Widget { |
2963
113e2f2e324d
SVGHMI: more Widget properties declared ES6 style.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2958
diff
changeset
|
253 |
offset = 0; |
113e2f2e324d
SVGHMI: more Widget properties declared ES6 style.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2958
diff
changeset
|
254 |
frequency = 10; /* FIXME arbitrary default max freq. Obtain from config ? */ |
2980
2a21d6060d64
SVGHMI: add "unsubscribable" property to widgets in order to generalize what already happens for jump buttons.
Edouard Tisserant
parents:
2963
diff
changeset
|
255 |
unsubscribable = false; |
3019
497aac6522a3
SVGHMI: provide request_animate() to Widget authors so that they can register redraw code when events lead to redraw. Widget member animate() is called when it is time to update DOM.
Edouard Tisserant
parents:
3007
diff
changeset
|
256 |
pending_animate = false; |
497aac6522a3
SVGHMI: provide request_animate() to Widget authors so that they can register redraw code when events lead to redraw. Widget member animate() is called when it is time to update DOM.
Edouard Tisserant
parents:
3007
diff
changeset
|
257 |
|
3594
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
258 |
constructor(elt_id, freq, args, variables, enable_expr, members){ |
2958
895d3f2b1786
SVGHMI: Back button updated to class style
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2955
diff
changeset
|
259 |
this.element_id = elt_id; |
2950
1e53d8b60ee9
SVGHMI: Parameters common to all widget constructors now passed as ordered parameters.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2949
diff
changeset
|
260 |
this.element = id(elt_id); |
1e53d8b60ee9
SVGHMI: Parameters common to all widget constructors now passed as ordered parameters.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2949
diff
changeset
|
261 |
this.args = args; |
3596
9c725829d8f0
SVGHMI: continue rework of Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3595
diff
changeset
|
262 |
|
3594
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
263 |
[this.indexes, this.variables_options] = (variables.length>0) ? zip(...variables) : [[],[]]; |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
264 |
this.indexes_length = this.indexes.length; |
3596
9c725829d8f0
SVGHMI: continue rework of Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3595
diff
changeset
|
265 |
|
3594
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
266 |
this.enable_expr = enable_expr; |
3595
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
267 |
this.enable_state = true; |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
268 |
this.enable_displayed_state = true; |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
269 |
this.enabled_elts = []; |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
270 |
|
2949
e50908ddec60
SVGHMI: One class per widget type, widget objects are instances of these classes, and members are passed through constructor. This allows to keep compatible with previous widget_defs template used in most widgets.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2948
diff
changeset
|
271 |
Object.keys(members).forEach(prop => this[prop]=members[prop]); |
3594
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
272 |
this.lastapply = this.indexes.map(() => undefined); |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
273 |
this.inhibit = this.indexes.map(() => undefined); |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
274 |
this.pending = this.indexes.map(() => undefined); |
3504
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
275 |
this.bound_uninhibit = this.uninhibit.bind(this); |
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
276 |
|
3594
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
277 |
this.lastdispatch = this.indexes.map(() => undefined); |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
278 |
this.deafen = this.indexes.map(() => undefined); |
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
279 |
this.incoming = this.indexes.map(() => undefined); |
3504
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
280 |
this.bound_undeafen = this.undeafen.bind(this); |
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
281 |
|
3417
9b9775d230f5
SVGHMI: fix again appication of frequency value when given in label. Use it on PushButton instance in svghmi test.
Edouard Tisserant
parents:
3412
diff
changeset
|
282 |
this.forced_frequency = freq; |
3453
e5967a2ae2bb
SVGHMI: allow widgets to disable clipping on variables given with min and max. Setting this.clip = false disables clipping.
Edouard Tisserant
parents:
3452
diff
changeset
|
283 |
this.clip = true; |
2949
e50908ddec60
SVGHMI: One class per widget type, widget objects are instances of these classes, and members are passed through constructor. This allows to keep compatible with previous widget_defs template used in most widgets.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2948
diff
changeset
|
284 |
} |
2958
895d3f2b1786
SVGHMI: Back button updated to class style
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2955
diff
changeset
|
285 |
|
3455
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
286 |
do_init(){ |
3473
1202b47e7e63
SVGHMI: fix widget's update frequency forcing : syntax checking was enforcing unit and js code was using undefined variables
Edouard Tisserant
parents:
3455
diff
changeset
|
287 |
let forced = this.forced_frequency; |
1202b47e7e63
SVGHMI: fix widget's update frequency forcing : syntax checking was enforcing unit and js code was using undefined variables
Edouard Tisserant
parents:
3455
diff
changeset
|
288 |
if(forced !== undefined){ |
3455
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
289 |
/* |
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
290 |
once every 10 seconds : 10s |
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
291 |
once per minute : 1m |
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
292 |
once per hour : 1h |
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
293 |
once per day : 1d |
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
294 |
*/ |
3473
1202b47e7e63
SVGHMI: fix widget's update frequency forcing : syntax checking was enforcing unit and js code was using undefined variables
Edouard Tisserant
parents:
3455
diff
changeset
|
295 |
let unit = forced.slice(-1); |
3455
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
296 |
let factor = { |
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
297 |
"s":1, |
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
298 |
"m":60, |
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
299 |
"h":3600, |
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
300 |
"d":86400}[unit]; |
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
301 |
|
3473
1202b47e7e63
SVGHMI: fix widget's update frequency forcing : syntax checking was enforcing unit and js code was using undefined variables
Edouard Tisserant
parents:
3455
diff
changeset
|
302 |
this.frequency = factor ? 1/(factor * Number(forced.slice(0,-1))) |
1202b47e7e63
SVGHMI: fix widget's update frequency forcing : syntax checking was enforcing unit and js code was using undefined variables
Edouard Tisserant
parents:
3455
diff
changeset
|
303 |
: Number(forced); |
3455
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
304 |
} |
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
305 |
|
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
306 |
let init = this.init; |
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
307 |
if(typeof(init) == "function"){ |
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
308 |
try { |
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
309 |
init.call(this); |
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
310 |
} catch(err) { |
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
311 |
console.log(err); |
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
312 |
} |
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
313 |
} |
3593
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
314 |
|
3594
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
315 |
if(this.enable_expr){ |
3593
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
316 |
this.enable_state = false; |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
317 |
this.enable_displayed_state = false; |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
318 |
for(let child of Array.from(this.element.children)){ |
3595
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
319 |
let label = child.getAttribute("inkscape:label"); |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
320 |
if(label!="disabled"){ |
3593
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
321 |
this.enabled_elts.push(child); |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
322 |
this.element.removeChild(child); |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
323 |
} |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
324 |
} |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
325 |
} |
3455
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
326 |
} |
2716cd8e498d
SVGHMI: Add support for forcing widget update frequency with period longer than a second. As an example, "HMI:Display|10s@/myvar" updates variable every 10 seconds.
Edouard Tisserant
parents:
3453
diff
changeset
|
327 |
|
2951
506fe9272660
SVGHMI: Widget's specific sub/unsub traits are now wxpressed in widget's class.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2950
diff
changeset
|
328 |
unsub(){ |
506fe9272660
SVGHMI: Widget's specific sub/unsub traits are now wxpressed in widget's class.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2950
diff
changeset
|
329 |
/* remove subsribers */ |
3595
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
330 |
for(let i = 0; i < this.indexes_length; i++) { |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
331 |
/* flush updates pending because of inhibition */ |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
332 |
let inhibition = this.inhibit[i]; |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
333 |
if(inhibition != undefined){ |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
334 |
clearTimeout(inhibition); |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
335 |
this.lastapply[i] = undefined; |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
336 |
this.uninhibit(i); |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
337 |
} |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
338 |
let deafened = this.deafen[i]; |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
339 |
if(deafened != undefined){ |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
340 |
clearTimeout(deafened); |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
341 |
this.lastdispatch[i] = undefined; |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
342 |
this.undeafen(i); |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
343 |
} |
3603
f1a00aa8cb3b
SVGHMI: rework the way cached values are applied to widgets when fresh data is missing.
Edouard Tisserant
parents:
3600
diff
changeset
|
344 |
let index = this.get_variable_index(i); |
3595
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
345 |
subscribers(index).delete(this); |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
346 |
} |
2951
506fe9272660
SVGHMI: Widget's specific sub/unsub traits are now wxpressed in widget's class.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2950
diff
changeset
|
347 |
this.offset = 0; |
3005
ff9ae4f4e3be
SVGHMI: widgets are not anymore binary relative or absolute, but have a "relativeness".
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3004
diff
changeset
|
348 |
this.relativeness = undefined; |
ff9ae4f4e3be
SVGHMI: widgets are not anymore binary relative or absolute, but have a "relativeness".
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3004
diff
changeset
|
349 |
} |
ff9ae4f4e3be
SVGHMI: widgets are not anymore binary relative or absolute, but have a "relativeness".
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3004
diff
changeset
|
350 |
|
3017
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
351 |
sub(new_offset=0, relativeness, container_id){ |
2951
506fe9272660
SVGHMI: Widget's specific sub/unsub traits are now wxpressed in widget's class.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2950
diff
changeset
|
352 |
this.offset = new_offset; |
3005
ff9ae4f4e3be
SVGHMI: widgets are not anymore binary relative or absolute, but have a "relativeness".
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3004
diff
changeset
|
353 |
this.relativeness = relativeness; |
3017
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
354 |
this.container_id = container_id ; |
2951
506fe9272660
SVGHMI: Widget's specific sub/unsub traits are now wxpressed in widget's class.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2950
diff
changeset
|
355 |
/* add this's subsribers */ |
3595
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
356 |
for(let i = 0; i < this.indexes_length; i++) { |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
357 |
let index = this.get_variable_index(i); |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
358 |
if(index == undefined) continue; |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
359 |
subscribers(index).add(this); |
375626e60b63
SVGHMI: rework Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3594
diff
changeset
|
360 |
} |
3603
f1a00aa8cb3b
SVGHMI: rework the way cached values are applied to widgets when fresh data is missing.
Edouard Tisserant
parents:
3600
diff
changeset
|
361 |
this.apply_cache(); |
2951
506fe9272660
SVGHMI: Widget's specific sub/unsub traits are now wxpressed in widget's class.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2950
diff
changeset
|
362 |
} |
506fe9272660
SVGHMI: Widget's specific sub/unsub traits are now wxpressed in widget's class.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2950
diff
changeset
|
363 |
|
506fe9272660
SVGHMI: Widget's specific sub/unsub traits are now wxpressed in widget's class.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2950
diff
changeset
|
364 |
apply_cache() { |
3603
f1a00aa8cb3b
SVGHMI: rework the way cached values are applied to widgets when fresh data is missing.
Edouard Tisserant
parents:
3600
diff
changeset
|
365 |
for(let i = 0; i < this.indexes_length; i++) { |
2951
506fe9272660
SVGHMI: Widget's specific sub/unsub traits are now wxpressed in widget's class.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2950
diff
changeset
|
366 |
/* dispatch current cache in newly opened page widgets */ |
3603
f1a00aa8cb3b
SVGHMI: rework the way cached values are applied to widgets when fresh data is missing.
Edouard Tisserant
parents:
3600
diff
changeset
|
367 |
let realindex = this.get_variable_index(i); |
3058
6ea4b7e1a9ed
Merge + fix side effects of making warning instead of errors in case of missing HMI variable
Edouard Tisserant
diff
changeset
|
368 |
if(realindex == undefined) continue; |
2951
506fe9272660
SVGHMI: Widget's specific sub/unsub traits are now wxpressed in widget's class.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2950
diff
changeset
|
369 |
let cached_val = cache[realindex]; |
506fe9272660
SVGHMI: Widget's specific sub/unsub traits are now wxpressed in widget's class.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2950
diff
changeset
|
370 |
if(cached_val != undefined) |
3603
f1a00aa8cb3b
SVGHMI: rework the way cached values are applied to widgets when fresh data is missing.
Edouard Tisserant
parents:
3600
diff
changeset
|
371 |
this.feed_data_for_dispatch(cached_val, cached_val, i); |
2951
506fe9272660
SVGHMI: Widget's specific sub/unsub traits are now wxpressed in widget's class.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2950
diff
changeset
|
372 |
} |
506fe9272660
SVGHMI: Widget's specific sub/unsub traits are now wxpressed in widget's class.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2950
diff
changeset
|
373 |
} |
506fe9272660
SVGHMI: Widget's specific sub/unsub traits are now wxpressed in widget's class.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2950
diff
changeset
|
374 |
|
3017
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
375 |
get_variable_index(varnum) { |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
376 |
let index = this.indexes[varnum]; |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
377 |
if(typeof(index) == "string"){ |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
378 |
index = page_local_index(index, this.container_id); |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
379 |
} else { |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
380 |
if(this.relativeness[varnum]){ |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
381 |
index += this.offset; |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
382 |
} |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
383 |
} |
15e2df3e5610
SVGHMI: Intermediate state while implementing local HMI variables. Now write to cache only (no send), still need to implement dispatch on change.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3007
diff
changeset
|
384 |
return index; |
3001
003fd80ff0b8
SVGHMI: add get_idx(index) to widget objects to factorize a bit code repeated accross widgets. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2997
diff
changeset
|
385 |
} |
3098
5823b73b132f
SVGHMI: decoupled operation string evaluation from HMI variable uptdate in change_hmi_variable(), paving the way for min/max boundaries enforcement
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3058
diff
changeset
|
386 |
|
3099
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
387 |
overshot(new_val, max) { |
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
388 |
} |
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
389 |
|
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
390 |
undershot(new_val, min) { |
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
391 |
} |
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
392 |
|
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
393 |
clip_min_max(index, new_val) { |
3594
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
394 |
let minmax = this.variables_options[index].minmax; |
3099
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
395 |
if(minmax !== undefined && typeof new_val == "number") { |
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
396 |
let [min,max] = minmax; |
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
397 |
if(new_val < min){ |
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
398 |
this.undershot(new_val, min); |
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
399 |
return min; |
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
400 |
} |
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
401 |
if(new_val > max){ |
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
402 |
this.overshot(new_val, max); |
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
403 |
return max; |
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
404 |
} |
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
405 |
} |
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
406 |
return new_val; |
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
407 |
} |
c7d14130401f
SVGHMI: Added clipping to min and max value for all widget using @path,min,max syntax. Added overshot() and undershot() methods to widget base class, called when value is limited to max or min respectively.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3098
diff
changeset
|
408 |
|
3058
6ea4b7e1a9ed
Merge + fix side effects of making warning instead of errors in case of missing HMI variable
Edouard Tisserant
diff
changeset
|
409 |
change_hmi_value(index, opstr) { |
6ea4b7e1a9ed
Merge + fix side effects of making warning instead of errors in case of missing HMI variable
Edouard Tisserant
diff
changeset
|
410 |
let realindex = this.get_variable_index(index); |
6ea4b7e1a9ed
Merge + fix side effects of making warning instead of errors in case of missing HMI variable
Edouard Tisserant
diff
changeset
|
411 |
if(realindex == undefined) return undefined; |
3098
5823b73b132f
SVGHMI: decoupled operation string evaluation from HMI variable uptdate in change_hmi_variable(), paving the way for min/max boundaries enforcement
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3058
diff
changeset
|
412 |
let old_val = cache[realindex]; |
5823b73b132f
SVGHMI: decoupled operation string evaluation from HMI variable uptdate in change_hmi_variable(), paving the way for min/max boundaries enforcement
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3058
diff
changeset
|
413 |
let new_val = eval_operation_string(old_val, opstr); |
3453
e5967a2ae2bb
SVGHMI: allow widgets to disable clipping on variables given with min and max. Setting this.clip = false disables clipping.
Edouard Tisserant
parents:
3452
diff
changeset
|
414 |
if(this.clip) |
e5967a2ae2bb
SVGHMI: allow widgets to disable clipping on variables given with min and max. Setting this.clip = false disables clipping.
Edouard Tisserant
parents:
3452
diff
changeset
|
415 |
new_val = this.clip_min_max(index, new_val); |
3098
5823b73b132f
SVGHMI: decoupled operation string evaluation from HMI variable uptdate in change_hmi_variable(), paving the way for min/max boundaries enforcement
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3058
diff
changeset
|
416 |
return apply_hmi_value(realindex, new_val); |
3004
705e34c6fe93
SVGHMI: More JS code refactoring : change_hmi_value and apply_hmi_value now methods of widget class.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3001
diff
changeset
|
417 |
} |
705e34c6fe93
SVGHMI: More JS code refactoring : change_hmi_value and apply_hmi_value now methods of widget class.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3001
diff
changeset
|
418 |
|
3139
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
419 |
_apply_hmi_value(index, new_val) { |
3058
6ea4b7e1a9ed
Merge + fix side effects of making warning instead of errors in case of missing HMI variable
Edouard Tisserant
diff
changeset
|
420 |
let realindex = this.get_variable_index(index); |
6ea4b7e1a9ed
Merge + fix side effects of making warning instead of errors in case of missing HMI variable
Edouard Tisserant
diff
changeset
|
421 |
if(realindex == undefined) return undefined; |
3453
e5967a2ae2bb
SVGHMI: allow widgets to disable clipping on variables given with min and max. Setting this.clip = false disables clipping.
Edouard Tisserant
parents:
3452
diff
changeset
|
422 |
if(this.clip) |
e5967a2ae2bb
SVGHMI: allow widgets to disable clipping on variables given with min and max. Setting this.clip = false disables clipping.
Edouard Tisserant
parents:
3452
diff
changeset
|
423 |
new_val = this.clip_min_max(index, new_val); |
3058
6ea4b7e1a9ed
Merge + fix side effects of making warning instead of errors in case of missing HMI variable
Edouard Tisserant
diff
changeset
|
424 |
return apply_hmi_value(realindex, new_val); |
3004
705e34c6fe93
SVGHMI: More JS code refactoring : change_hmi_value and apply_hmi_value now methods of widget class.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3001
diff
changeset
|
425 |
} |
3006
bbffdefd2eed
SVGHMI: JS refactoring continued : "dispatch_value_to_widget" becomes widget class member "new_hmi_value" (was also broken by previous relativeness commit)
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3005
diff
changeset
|
426 |
|
3504
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
427 |
uninhibit(index){ |
3139
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
428 |
this.inhibit[index] = undefined; |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
429 |
let new_val = this.pending[index]; |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
430 |
this.pending[index] = undefined; |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
431 |
return this.apply_hmi_value(index, new_val); |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
432 |
} |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
433 |
|
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
434 |
apply_hmi_value(index, new_val) { |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
435 |
if(this.inhibit[index] == undefined){ |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
436 |
let now = Date.now(); |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
437 |
let min_interval = 1000/this.frequency; |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
438 |
let lastapply = this.lastapply[index]; |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
439 |
if(lastapply == undefined || now > lastapply + min_interval){ |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
440 |
this.lastapply[index] = now; |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
441 |
return this._apply_hmi_value(index, new_val); |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
442 |
} |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
443 |
else { |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
444 |
let elapsed = now - lastapply; |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
445 |
this.pending[index] = new_val; |
3504
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
446 |
this.inhibit[index] = setTimeout(this.bound_uninhibit, min_interval - elapsed, index); |
3139
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
447 |
} |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
448 |
} |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
449 |
else { |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
450 |
this.pending[index] = new_val; |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
451 |
return new_val; |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
452 |
} |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
453 |
} |
1f5ca646ce6e
SVGHMI: Add inhibition to widget's apply_hmi_value() so that it does not change variable more frquently than given widget's frequency. This prevents flooding network with many update if browser is producing events at high rate, as for exemple when dragging ScrollBar's cursor.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3135
diff
changeset
|
454 |
|
3006
bbffdefd2eed
SVGHMI: JS refactoring continued : "dispatch_value_to_widget" becomes widget class member "new_hmi_value" (was also broken by previous relativeness commit)
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3005
diff
changeset
|
455 |
new_hmi_value(index, value, oldval) { |
3025
48e7e336c052
SVGHMI: HMI:VarInit:"a string"@a_value : empty widget (i.e. empty svg:group) that initialize content of local variables to value given as first argument.
Edouard Tisserant
parents:
3024
diff
changeset
|
456 |
// TODO avoid searching, store index at sub() |
3593
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
457 |
for(let i = 0; i < this.indexes_length; i++) { |
3025
48e7e336c052
SVGHMI: HMI:VarInit:"a string"@a_value : empty widget (i.e. empty svg:group) that initialize content of local variables to value given as first argument.
Edouard Tisserant
parents:
3024
diff
changeset
|
458 |
let refindex = this.get_variable_index(i); |
3058
6ea4b7e1a9ed
Merge + fix side effects of making warning instead of errors in case of missing HMI variable
Edouard Tisserant
diff
changeset
|
459 |
if(refindex == undefined) continue; |
3025
48e7e336c052
SVGHMI: HMI:VarInit:"a string"@a_value : empty widget (i.e. empty svg:group) that initialize content of local variables to value given as first argument.
Edouard Tisserant
parents:
3024
diff
changeset
|
460 |
|
48e7e336c052
SVGHMI: HMI:VarInit:"a string"@a_value : empty widget (i.e. empty svg:group) that initialize content of local variables to value given as first argument.
Edouard Tisserant
parents:
3024
diff
changeset
|
461 |
if(index == refindex) { |
3600
c9ecf7d50888
SVGHMI: refactor an factorize widget dispatch() method calling
Edouard Tisserant
parents:
3596
diff
changeset
|
462 |
this.feed_data_for_dispatch(value, oldval, i); |
3025
48e7e336c052
SVGHMI: HMI:VarInit:"a string"@a_value : empty widget (i.e. empty svg:group) that initialize content of local variables to value given as first argument.
Edouard Tisserant
parents:
3024
diff
changeset
|
463 |
break; |
48e7e336c052
SVGHMI: HMI:VarInit:"a string"@a_value : empty widget (i.e. empty svg:group) that initialize content of local variables to value given as first argument.
Edouard Tisserant
parents:
3024
diff
changeset
|
464 |
} |
3006
bbffdefd2eed
SVGHMI: JS refactoring continued : "dispatch_value_to_widget" becomes widget class member "new_hmi_value" (was also broken by previous relativeness commit)
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3005
diff
changeset
|
465 |
} |
bbffdefd2eed
SVGHMI: JS refactoring continued : "dispatch_value_to_widget" becomes widget class member "new_hmi_value" (was also broken by previous relativeness commit)
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3005
diff
changeset
|
466 |
} |
3702
6dc619fa28aa
SVGHMI: fix double-dispatch happening when using low widget update frequency on variable already being updated with high frequency by other widgets.
Edouard Tisserant
parents:
3686
diff
changeset
|
467 |
|
3504
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
468 |
undeafen(index){ |
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
469 |
this.deafen[index] = undefined; |
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
470 |
let [new_val, old_val] = this.incoming[index]; |
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
471 |
this.incoming[index] = undefined; |
3702
6dc619fa28aa
SVGHMI: fix double-dispatch happening when using low widget update frequency on variable already being updated with high frequency by other widgets.
Edouard Tisserant
parents:
3686
diff
changeset
|
472 |
this.lastdispatch[index] = Date.now(); |
3600
c9ecf7d50888
SVGHMI: refactor an factorize widget dispatch() method calling
Edouard Tisserant
parents:
3596
diff
changeset
|
473 |
this.do_dispatch(new_val, old_val, index); |
3504
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
474 |
} |
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
475 |
|
3593
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
476 |
enable(enabled){ |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
477 |
if(this.enable_state != enabled){ |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
478 |
this.enable_state = enabled; |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
479 |
this.request_animate(); |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
480 |
} |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
481 |
} |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
482 |
|
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
483 |
animate_enable(){ |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
484 |
if(this.enable_state && !this.enable_displayed_state){ |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
485 |
//show widget |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
486 |
for(let child of this.enabled_elts){ |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
487 |
this.element.appendChild(child); |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
488 |
} |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
489 |
|
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
490 |
//hide disabled content |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
491 |
if(this.disabled_elt && this.disabled_elt.parentNode != null) |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
492 |
this.element.removeChild(this.disabled_elt); |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
493 |
|
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
494 |
this.enable_displayed_state = true; |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
495 |
|
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
496 |
}else if(!this.enable_state && this.enable_displayed_state){ |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
497 |
|
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
498 |
//hide widget |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
499 |
for(let child of this.enabled_elts){ |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
500 |
if(child.parentNode != null) |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
501 |
this.element.removeChild(child); |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
502 |
} |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
503 |
|
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
504 |
//show disabled content |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
505 |
if(this.disabled_elt) |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
506 |
this.element.appendChild(this.disabled_elt); |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
507 |
|
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
508 |
this.enable_displayed_state = false; |
3596
9c725829d8f0
SVGHMI: continue rework of Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3595
diff
changeset
|
509 |
|
9c725829d8f0
SVGHMI: continue rework of Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3595
diff
changeset
|
510 |
// once disabled activity display is lost |
9c725829d8f0
SVGHMI: continue rework of Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3595
diff
changeset
|
511 |
this.activity_displayed_state = undefined; |
3593
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
512 |
} |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
513 |
} |
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
514 |
|
3600
c9ecf7d50888
SVGHMI: refactor an factorize widget dispatch() method calling
Edouard Tisserant
parents:
3596
diff
changeset
|
515 |
feed_data_for_dispatch(value, oldval, varnum) { |
c9ecf7d50888
SVGHMI: refactor an factorize widget dispatch() method calling
Edouard Tisserant
parents:
3596
diff
changeset
|
516 |
if(this.dispatch || this.enable_expr){ |
3504
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
517 |
if(this.deafen[varnum] == undefined){ |
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
518 |
let now = Date.now(); |
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
519 |
let min_interval = 1000/this.frequency; |
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
520 |
let lastdispatch = this.lastdispatch[varnum]; |
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
521 |
if(lastdispatch == undefined || now > lastdispatch + min_interval){ |
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
522 |
this.lastdispatch[varnum] = now; |
3600
c9ecf7d50888
SVGHMI: refactor an factorize widget dispatch() method calling
Edouard Tisserant
parents:
3596
diff
changeset
|
523 |
this.do_dispatch(value, oldval, varnum) |
3504
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
524 |
} |
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
525 |
else { |
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
526 |
let elapsed = now - lastdispatch; |
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
527 |
this.incoming[varnum] = [value, oldval]; |
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
528 |
this.deafen[varnum] = setTimeout(this.bound_undeafen, min_interval - elapsed, varnum); |
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
529 |
} |
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
530 |
} |
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
531 |
else { |
9d895a103019
SVGHMI: add widget update rate limit on variable change.
Edouard Tisserant
parents:
3473
diff
changeset
|
532 |
this.incoming[varnum] = [value, oldval]; |
3026
d454ed480c0f
SVGHMI: factorize dispatch calling logic.
Edouard Tisserant
parents:
3025
diff
changeset
|
533 |
} |
d454ed480c0f
SVGHMI: factorize dispatch calling logic.
Edouard Tisserant
parents:
3025
diff
changeset
|
534 |
} |
d454ed480c0f
SVGHMI: factorize dispatch calling logic.
Edouard Tisserant
parents:
3025
diff
changeset
|
535 |
} |
d454ed480c0f
SVGHMI: factorize dispatch calling logic.
Edouard Tisserant
parents:
3025
diff
changeset
|
536 |
|
3600
c9ecf7d50888
SVGHMI: refactor an factorize widget dispatch() method calling
Edouard Tisserant
parents:
3596
diff
changeset
|
537 |
do_dispatch(value, oldval, varnum) { |
c9ecf7d50888
SVGHMI: refactor an factorize widget dispatch() method calling
Edouard Tisserant
parents:
3596
diff
changeset
|
538 |
if(this.dispatch) try { |
c9ecf7d50888
SVGHMI: refactor an factorize widget dispatch() method calling
Edouard Tisserant
parents:
3596
diff
changeset
|
539 |
this.dispatch(value, oldval, varnum); |
c9ecf7d50888
SVGHMI: refactor an factorize widget dispatch() method calling
Edouard Tisserant
parents:
3596
diff
changeset
|
540 |
} catch(err) { |
c9ecf7d50888
SVGHMI: refactor an factorize widget dispatch() method calling
Edouard Tisserant
parents:
3596
diff
changeset
|
541 |
console.log(err); |
c9ecf7d50888
SVGHMI: refactor an factorize widget dispatch() method calling
Edouard Tisserant
parents:
3596
diff
changeset
|
542 |
} |
c9ecf7d50888
SVGHMI: refactor an factorize widget dispatch() method calling
Edouard Tisserant
parents:
3596
diff
changeset
|
543 |
if(this.enable_expr) try { |
c9ecf7d50888
SVGHMI: refactor an factorize widget dispatch() method calling
Edouard Tisserant
parents:
3596
diff
changeset
|
544 |
this.compute_enable(value, oldval, varnum); |
c9ecf7d50888
SVGHMI: refactor an factorize widget dispatch() method calling
Edouard Tisserant
parents:
3596
diff
changeset
|
545 |
} catch(err) { |
c9ecf7d50888
SVGHMI: refactor an factorize widget dispatch() method calling
Edouard Tisserant
parents:
3596
diff
changeset
|
546 |
console.log(err); |
c9ecf7d50888
SVGHMI: refactor an factorize widget dispatch() method calling
Edouard Tisserant
parents:
3596
diff
changeset
|
547 |
} |
c9ecf7d50888
SVGHMI: refactor an factorize widget dispatch() method calling
Edouard Tisserant
parents:
3596
diff
changeset
|
548 |
} |
c9ecf7d50888
SVGHMI: refactor an factorize widget dispatch() method calling
Edouard Tisserant
parents:
3596
diff
changeset
|
549 |
|
3019
497aac6522a3
SVGHMI: provide request_animate() to Widget authors so that they can register redraw code when events lead to redraw. Widget member animate() is called when it is time to update DOM.
Edouard Tisserant
parents:
3007
diff
changeset
|
550 |
_animate(){ |
3594
30f7eade322f
SVGHMI: add support for "enable expressions" with arbitrary variable name assignment.
Edouard Tisserant
parents:
3593
diff
changeset
|
551 |
if(this.enable_expr) |
3593
122b1094b8e6
SVGHMI: preliminary implementation of a general enable bit for all widgets, using "#" at the end of widget declaration, and a "disabled" element that becomes visible instead of widget when disabled.
Edouard Tisserant
parents:
3556
diff
changeset
|
552 |
this.animate_enable(); |
3596
9c725829d8f0
SVGHMI: continue rework of Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3595
diff
changeset
|
553 |
// inhibit widget animation when disabled |
9c725829d8f0
SVGHMI: continue rework of Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3595
diff
changeset
|
554 |
if(!this.enable_expr || this.enable_state){ |
9c725829d8f0
SVGHMI: continue rework of Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3595
diff
changeset
|
555 |
if(this.has_activity) |
9c725829d8f0
SVGHMI: continue rework of Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3595
diff
changeset
|
556 |
this.animate_activity(); |
9c725829d8f0
SVGHMI: continue rework of Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3595
diff
changeset
|
557 |
if(this.animate != undefined) |
9c725829d8f0
SVGHMI: continue rework of Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3595
diff
changeset
|
558 |
this.animate(); |
9c725829d8f0
SVGHMI: continue rework of Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3595
diff
changeset
|
559 |
} |
3019
497aac6522a3
SVGHMI: provide request_animate() to Widget authors so that they can register redraw code when events lead to redraw. Widget member animate() is called when it is time to update DOM.
Edouard Tisserant
parents:
3007
diff
changeset
|
560 |
this.pending_animate = false; |
497aac6522a3
SVGHMI: provide request_animate() to Widget authors so that they can register redraw code when events lead to redraw. Widget member animate() is called when it is time to update DOM.
Edouard Tisserant
parents:
3007
diff
changeset
|
561 |
} |
497aac6522a3
SVGHMI: provide request_animate() to Widget authors so that they can register redraw code when events lead to redraw. Widget member animate() is called when it is time to update DOM.
Edouard Tisserant
parents:
3007
diff
changeset
|
562 |
|
497aac6522a3
SVGHMI: provide request_animate() to Widget authors so that they can register redraw code when events lead to redraw. Widget member animate() is called when it is time to update DOM.
Edouard Tisserant
parents:
3007
diff
changeset
|
563 |
request_animate(){ |
497aac6522a3
SVGHMI: provide request_animate() to Widget authors so that they can register redraw code when events lead to redraw. Widget member animate() is called when it is time to update DOM.
Edouard Tisserant
parents:
3007
diff
changeset
|
564 |
if(!this.pending_animate){ |
497aac6522a3
SVGHMI: provide request_animate() to Widget authors so that they can register redraw code when events lead to redraw. Widget member animate() is called when it is time to update DOM.
Edouard Tisserant
parents:
3007
diff
changeset
|
565 |
pending_widget_animates.push(this); |
497aac6522a3
SVGHMI: provide request_animate() to Widget authors so that they can register redraw code when events lead to redraw. Widget member animate() is called when it is time to update DOM.
Edouard Tisserant
parents:
3007
diff
changeset
|
566 |
this.pending_animate = true; |
497aac6522a3
SVGHMI: provide request_animate() to Widget authors so that they can register redraw code when events lead to redraw. Widget member animate() is called when it is time to update DOM.
Edouard Tisserant
parents:
3007
diff
changeset
|
567 |
requestHMIAnimation(); |
497aac6522a3
SVGHMI: provide request_animate() to Widget authors so that they can register redraw code when events lead to redraw. Widget member animate() is called when it is time to update DOM.
Edouard Tisserant
parents:
3007
diff
changeset
|
568 |
} |
3520
b27e50143083
SVGHMI: generalize detach/re-attach of binary choices for ToggleButton, PushButton, Button and Keypad's Shit and CapsLock.
Edouard Tisserant
parents:
3504
diff
changeset
|
569 |
} |
b27e50143083
SVGHMI: generalize detach/re-attach of binary choices for ToggleButton, PushButton, Button and Keypad's Shit and CapsLock.
Edouard Tisserant
parents:
3504
diff
changeset
|
570 |
|
3596
9c725829d8f0
SVGHMI: continue rework of Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3595
diff
changeset
|
571 |
animate_activity(){ |
9c725829d8f0
SVGHMI: continue rework of Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3595
diff
changeset
|
572 |
if(this.activity_displayed_state != this.activity_state){ |
9c725829d8f0
SVGHMI: continue rework of Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3595
diff
changeset
|
573 |
set_activity_state(this.activable_sub, this.activity_state); |
9c725829d8f0
SVGHMI: continue rework of Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3595
diff
changeset
|
574 |
this.activity_displayed_state = this.activity_state; |
9c725829d8f0
SVGHMI: continue rework of Jump widget to cope with Enable Expressions.
Edouard Tisserant
parents:
3595
diff
changeset
|
575 |
} |
3125
1fb0c07bd97b
SVGHMI: widget activable elements : moved code to wher it belongs, rewrote cleaner
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3123
diff
changeset
|
576 |
} |
2949
e50908ddec60
SVGHMI: One class per widget type, widget objects are instances of these classes, and members are passed through constructor. This allows to keep compatible with previous widget_defs template used in most widgets.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2948
diff
changeset
|
577 |
} |
e50908ddec60
SVGHMI: One class per widget type, widget objects are instances of these classes, and members are passed through constructor. This allows to keep compatible with previous widget_defs template used in most widgets.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2948
diff
changeset
|
578 |
|| |
e50908ddec60
SVGHMI: One class per widget type, widget objects are instances of these classes, and members are passed through constructor. This allows to keep compatible with previous widget_defs template used in most widgets.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2948
diff
changeset
|
579 |
} |
e50908ddec60
SVGHMI: One class per widget type, widget objects are instances of these classes, and members are passed through constructor. This allows to keep compatible with previous widget_defs template used in most widgets.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2948
diff
changeset
|
580 |
|
3128
32a4675af377
SVGHMI: Added HMI:VarInitPersistent to initialize persistent HMI_LOCAL and PAGE_LOCAL variables, stored as cookies in browser.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3125
diff
changeset
|
581 |
const "excluded_types", "str:split('Page VarInit VarInitPersistent')"; |
3120
7ecaefe38f6f
SVGHMI: Remove recursive walk in parsed widget to find unique type and use xsl:key instead.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3119
diff
changeset
|
582 |
|
7ecaefe38f6f
SVGHMI: Remove recursive walk in parsed widget to find unique type and use xsl:key instead.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3119
diff
changeset
|
583 |
// Key to filter unique types |
7ecaefe38f6f
SVGHMI: Remove recursive walk in parsed widget to find unique type and use xsl:key instead.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3119
diff
changeset
|
584 |
key "TypesKey", "widget", "@type"; |
7ecaefe38f6f
SVGHMI: Remove recursive walk in parsed widget to find unique type and use xsl:key instead.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3119
diff
changeset
|
585 |
|
3007
360300a8b995
SVGHMI : have to move some JS declarations from "preamble" to "declarations" and others from "declarations" to "definitions" section to make room for JS libraries that would be used by widget classes.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3006
diff
changeset
|
586 |
emit "declarations:hmi-classes" { |
3120
7ecaefe38f6f
SVGHMI: Remove recursive walk in parsed widget to find unique type and use xsl:key instead.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3119
diff
changeset
|
587 |
const "used_widget_types", """$parsed_widgets/widget[ |
7ecaefe38f6f
SVGHMI: Remove recursive walk in parsed widget to find unique type and use xsl:key instead.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3119
diff
changeset
|
588 |
generate-id() = generate-id(key('TypesKey', @type)) and |
7ecaefe38f6f
SVGHMI: Remove recursive walk in parsed widget to find unique type and use xsl:key instead.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3119
diff
changeset
|
589 |
not(@type = $excluded_types)]"""; |
2948
faaf677ea99d
SVGHMI: Add an exslt function to collect used widget types, in order to only include necessary JS definitions in furure changes.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2941
diff
changeset
|
590 |
apply "$used_widget_types", mode="widget_class"; |
3556
5d73bed497de
SVGHMI: Warn at build time when SVG refers to non-existing widget types.
Edouard Tisserant
parents:
3522
diff
changeset
|
591 |
|
5d73bed497de
SVGHMI: Warn at build time when SVG refers to non-existing widget types.
Edouard Tisserant
parents:
3522
diff
changeset
|
592 |
} |
5d73bed497de
SVGHMI: Warn at build time when SVG refers to non-existing widget types.
Edouard Tisserant
parents:
3522
diff
changeset
|
593 |
|
5d73bed497de
SVGHMI: Warn at build time when SVG refers to non-existing widget types.
Edouard Tisserant
parents:
3522
diff
changeset
|
594 |
template "widget", mode="widget_class" { |
5d73bed497de
SVGHMI: Warn at build time when SVG refers to non-existing widget types.
Edouard Tisserant
parents:
3522
diff
changeset
|
595 |
|| |
5d73bed497de
SVGHMI: Warn at build time when SVG refers to non-existing widget types.
Edouard Tisserant
parents:
3522
diff
changeset
|
596 |
class «@type»Widget extends Widget{ |
5d73bed497de
SVGHMI: Warn at build time when SVG refers to non-existing widget types.
Edouard Tisserant
parents:
3522
diff
changeset
|
597 |
/* empty class, as «@type» widget didn't provide any */ |
5d73bed497de
SVGHMI: Warn at build time when SVG refers to non-existing widget types.
Edouard Tisserant
parents:
3522
diff
changeset
|
598 |
} |
5d73bed497de
SVGHMI: Warn at build time when SVG refers to non-existing widget types.
Edouard Tisserant
parents:
3522
diff
changeset
|
599 |
|| |
5d73bed497de
SVGHMI: Warn at build time when SVG refers to non-existing widget types.
Edouard Tisserant
parents:
3522
diff
changeset
|
600 |
warning > «@type» widget is used in SVG but widget type is not declared |
5d73bed497de
SVGHMI: Warn at build time when SVG refers to non-existing widget types.
Edouard Tisserant
parents:
3522
diff
changeset
|
601 |
} |
2949
e50908ddec60
SVGHMI: One class per widget type, widget objects are instances of these classes, and members are passed through constructor. This allows to keep compatible with previous widget_defs template used in most widgets.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2948
diff
changeset
|
602 |
|
3119
17a9c7a334f7
SVGHMI: Fix browser side exception when some widget are not used, and are then discarded and not present in final SVG. In that case JS code was still making reference to discarded widget elements and was raising exception at init.
Edouard Tisserant
parents:
3101
diff
changeset
|
603 |
const "included_ids","$parsed_widgets/widget[not(@type = $excluded_types) and not(@id = $discardable_elements/@id)]/@id"; |
3685
570a738239f4
SVGHMI: Add arbitrary variable assignment when entering Pages
Edouard Tisserant
parents:
3624
diff
changeset
|
604 |
const "page_ids","$parsed_widgets/widget[@type = 'Page']/@id"; |
3121
8094494113b6
SVGHMI: Prevent excluded widget to appear in generated pages' widget list.
Edouard Tisserant
parents:
3119
diff
changeset
|
605 |
const "hmi_widgets","$hmi_elements[@id = $included_ids]"; |
3685
570a738239f4
SVGHMI: Add arbitrary variable assignment when entering Pages
Edouard Tisserant
parents:
3624
diff
changeset
|
606 |
const "page_widgets","$hmi_elements[@id = $page_ids]"; |
3162
fbe1ffaa56cf
SVGHMI: More build time optimization : def_by_label now takes far less time.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3152
diff
changeset
|
607 |
const "result_widgets","$result_svg_ns//*[@id = $hmi_widgets/@id]"; |
2955
64e603b84aa3
SVGHMI: Exclude non-widget HMI:* labeled elements from hmi_widget. Namely : HMI:Page HMI:Lang and HMI:List have been excluded.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2954
diff
changeset
|
608 |
|
3007
360300a8b995
SVGHMI : have to move some JS declarations from "preamble" to "declarations" and others from "declarations" to "definitions" section to make room for JS libraries that would be used by widget classes.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3006
diff
changeset
|
609 |
emit "declarations:hmi-elements" { |
2941
ef13a4007538
SVGHMI: spread JS code from svghmi/scripts.ysl2 in other .ysl2 files, using dedicated preamble and epilogue namespaces
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2937
diff
changeset
|
610 |
| var hmi_widgets = { |
3685
570a738239f4
SVGHMI: Add arbitrary variable assignment when entering Pages
Edouard Tisserant
parents:
3624
diff
changeset
|
611 |
apply "$hmi_widgets | $page_widgets", mode="hmi_widgets"; |
2941
ef13a4007538
SVGHMI: spread JS code from svghmi/scripts.ysl2 in other .ysl2 files, using dedicated preamble and epilogue namespaces
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2937
diff
changeset
|
612 |
| } |
3556
5d73bed497de
SVGHMI: Warn at build time when SVG refers to non-existing widget types.
Edouard Tisserant
parents:
3522
diff
changeset
|
613 |
| |
2941
ef13a4007538
SVGHMI: spread JS code from svghmi/scripts.ysl2 in other .ysl2 files, using dedicated preamble and epilogue namespaces
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2937
diff
changeset
|
614 |
} |
ef13a4007538
SVGHMI: spread JS code from svghmi/scripts.ysl2 in other .ysl2 files, using dedicated preamble and epilogue namespaces
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2937
diff
changeset
|
615 |
|
2881 | 616 |
function "defs_by_labels" { |
617 |
param "labels","''"; |
|
618 |
param "mandatory","'yes'"; |
|
2920
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
619 |
param "subelements","/.."; |
2881 | 620 |
param "hmi_element"; |
621 |
const "widget_type","@type"; |
|
3522
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
622 |
const "widget_id","@id"; |
2881 | 623 |
foreach "str:split($labels)" { |
3452
a0bd2c4cb8f7
SVGHMI: allow designating widget's sub-elements as main element child rather than descendant. Names staring with "/" in yslt call to labels() only match direct widget childs.
Edouard Tisserant
parents:
3417
diff
changeset
|
624 |
const "absolute", "starts-with(., '/')"; |
a0bd2c4cb8f7
SVGHMI: allow designating widget's sub-elements as main element child rather than descendant. Names staring with "/" in yslt call to labels() only match direct widget childs.
Edouard Tisserant
parents:
3417
diff
changeset
|
625 |
const "name","substring(.,number($absolute)+1)"; |
a0bd2c4cb8f7
SVGHMI: allow designating widget's sub-elements as main element child rather than descendant. Names staring with "/" in yslt call to labels() only match direct widget childs.
Edouard Tisserant
parents:
3417
diff
changeset
|
626 |
const "widget","$result_widgets[@id = $hmi_element/@id]"; |
a0bd2c4cb8f7
SVGHMI: allow designating widget's sub-elements as main element child rather than descendant. Names staring with "/" in yslt call to labels() only match direct widget childs.
Edouard Tisserant
parents:
3417
diff
changeset
|
627 |
const "elt","($widget//*[not($absolute) and @inkscape:label=$name] | $widget/*[$absolute and @inkscape:label=$name])[1]"; |
2881 | 628 |
choose { |
2920
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
629 |
when "not($elt/@id)" { |
3522
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
630 |
if "$mandatory!='no'" { |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
631 |
const "errmsg" > «$widget_type» widget (id=«$widget_id») must have a «$name» element |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
632 |
choose { |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
633 |
when "$mandatory='yes'" { |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
634 |
error > «$errmsg» |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
635 |
} |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
636 |
otherwise { |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
637 |
warning > «$errmsg» |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
638 |
} |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
639 |
} |
2834
6ac6a9dff594
SVGHMI: be a bit more tolerant with missing HMI paths or missing elements in widgets : continue build (with warning) and fail silently at runtime.
Edouard Tisserant
parents:
2833
diff
changeset
|
640 |
} |
2881 | 641 |
// otherwise produce nothing |
2797
c5ba1e77f054
SVGHMI: added a widgets description object, accessed by id. Added frequency to widgets, as separate template to allow future customization. Excluded non svg elements (i.e inkscape Sets) with HMI: labels from widgets.
Edouard Tisserant
parents:
2796
diff
changeset
|
642 |
} |
2881 | 643 |
otherwise { |
2920
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
644 |
| «$name»_elt: id("«$elt/@id»"), |
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
645 |
if "$subelements" { |
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
646 |
| «$name»_sub: { |
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
647 |
foreach "str:split($subelements)" { |
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
648 |
const "subname","."; |
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
649 |
const "subelt","$elt/*[@inkscape:label=$subname][1]"; |
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
650 |
choose { |
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
651 |
when "not($subelt/@id)" { |
3522
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
652 |
if "$mandatory!='no'" { |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
653 |
const "errmsg" > «$widget_type» widget (id=«$widget_id») must have a «$name»/«$subname» element |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
654 |
choose { |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
655 |
when "$mandatory='yes'" { |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
656 |
error > «$errmsg» |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
657 |
} |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
658 |
otherwise { |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
659 |
warning > «$errmsg» |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
660 |
} |
f3a14422d56e
SVGHMI: add warning_labels, same as optional_labels but emits warnings at build time if element is missing.
Edouard Tisserant
parents:
3520
diff
changeset
|
661 |
} |
2920
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
662 |
} |
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
663 |
| /* missing «$name»/«$subname» element */ |
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
664 |
} |
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
665 |
otherwise { |
3520
b27e50143083
SVGHMI: generalize detach/re-attach of binary choices for ToggleButton, PushButton, Button and Keypad's Shit and CapsLock.
Edouard Tisserant
parents:
3504
diff
changeset
|
666 |
| "«$subname»_elt": id("«$subelt/@id»")`if "position()!=last()" > ,` |
2920
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
667 |
} |
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
668 |
} |
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
669 |
} |
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
670 |
| }, |
3ee337c8c769
SVGHMI: finished shift and capslock support n keypad widget. Added a helper in widgets_common to collect subelements likle active/inactive/disabled...
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2897
diff
changeset
|
671 |
} |
2836
ce6cecdb7320
SVGHMI : still behave, even if important things are missing in SVG widget definitions (ex: needle missing for Meter widget)
Edouard Tisserant
parents:
2834
diff
changeset
|
672 |
} |
2808
dc78ffa5253d
SVGHMI: SVG viewport now defined so that HMI take scales and fit to the view. Implemented page switch through viewport change, no hiding of widget for now.
Edouard Tisserant
parents:
2807
diff
changeset
|
673 |
} |
dc78ffa5253d
SVGHMI: SVG viewport now defined so that HMI take scales and fit to the view. Implemented page switch through viewport change, no hiding of widget for now.
Edouard Tisserant
parents:
2807
diff
changeset
|
674 |
} |
2881 | 675 |
} |
2808
dc78ffa5253d
SVGHMI: SVG viewport now defined so that HMI take scales and fit to the view. Implemented page switch through viewport change, no hiding of widget for now.
Edouard Tisserant
parents:
2807
diff
changeset
|
676 |
|
2883
8e3d130399b0
SVGHMI: created widget_*.ysl2. Renamed widget_common in widgets_common, so that it doesn't match globing.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2881
diff
changeset
|
677 |
def "func:escape_quotes" { |
8e3d130399b0
SVGHMI: created widget_*.ysl2. Renamed widget_common in widgets_common, so that it doesn't match globing.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2881
diff
changeset
|
678 |
param "txt"; |
8e3d130399b0
SVGHMI: created widget_*.ysl2. Renamed widget_common in widgets_common, so that it doesn't match globing.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2881
diff
changeset
|
679 |
// have to use a python string to enter escaped quote |
3024 | 680 |
// const "frstln", "string-length($frst)"; |
2883
8e3d130399b0
SVGHMI: created widget_*.ysl2. Renamed widget_common in widgets_common, so that it doesn't match globing.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2881
diff
changeset
|
681 |
choose { |
3024 | 682 |
when !"contains($txt,'\"')"! { |
683 |
result !"concat(substring-before($txt,'\"'),'\\\"',func:escape_quotes(substring-after($txt,'\"')))"!; |
|
2883
8e3d130399b0
SVGHMI: created widget_*.ysl2. Renamed widget_common in widgets_common, so that it doesn't match globing.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2881
diff
changeset
|
684 |
} |
8e3d130399b0
SVGHMI: created widget_*.ysl2. Renamed widget_common in widgets_common, so that it doesn't match globing.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2881
diff
changeset
|
685 |
otherwise { |
8e3d130399b0
SVGHMI: created widget_*.ysl2. Renamed widget_common in widgets_common, so that it doesn't match globing.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2881
diff
changeset
|
686 |
result "$txt"; |
8e3d130399b0
SVGHMI: created widget_*.ysl2. Renamed widget_common in widgets_common, so that it doesn't match globing.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2881
diff
changeset
|
687 |
} |
8e3d130399b0
SVGHMI: created widget_*.ysl2. Renamed widget_common in widgets_common, so that it doesn't match globing.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2881
diff
changeset
|
688 |
} |
8e3d130399b0
SVGHMI: created widget_*.ysl2. Renamed widget_common in widgets_common, so that it doesn't match globing.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2881
diff
changeset
|
689 |
} |
8e3d130399b0
SVGHMI: created widget_*.ysl2. Renamed widget_common in widgets_common, so that it doesn't match globing.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2881
diff
changeset
|
690 |