beremiz

add custom TextCtrl allowed to enter long integer with bounds checking

It's needed because wx.SpinCtrl supports only 'int' type. For UDINT
and (U)LINT long type is necessary.
include yslt.yml2
estylesheet xmlns:ppx="http://www.plcopen.org/xml/tc6_0201"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:ns="var_infos_ns"
extension-element-prefixes="ns"
exclude-result-prefixes="ns" {
param "tree";
template "text()";
variable "project" {
copy "document('project')/project/*";
}
variable "stdlib" {
copy "document('stdlib')/stdlib/*";
}
variable "extensions" {
copy "document('extensions')/extensions/*";
}
template "ppx:configuration" {
apply "ppx:globalVars";
}
template "ppx:resource" {
apply "ppx:globalVars";
}
template "ppx:pou" {
apply "ppx:interface/*";
}
template "ppx:returnType" {
value "ns:AddTree()";
apply ".", mode="var_type";
}
function "variables_infos" {
param "var_class";
variable "var_option" {
choose {
when "@constant='true' or @constant='1'" > Constant
when "@retain='true' or @retain='1'" > Retain
when "@nonretain='true' or @nonretain='1'" > Non-Retain
}
}
foreach "ppx:variable" {
variable "initial_value" {
apply "ppx:initialValue";
}
variable "edit" {
choose {
when "$var_class='Global' or $var_class='External'" > true
otherwise {
apply "ppx:type", mode="var_edit";
}
}
}
value "ns:AddTree()";
apply "ppx:type", mode="var_type";
value "ns:AddVariable(@name, $var_class, $var_option, @address, $initial_value, $edit, ppx:documentation/xhtml:p/text())";
}
}
template "ppx:localVars" {
call "variables_infos" {
with "var_class" > Local
}
}
template "ppx:globalVars" {
call "variables_infos" {
with "var_class" > Global
}
}
template "ppx:externalVars" {
call "variables_infos" {
with "var_class" > External
}
}
template "ppx:tempVars" {
call "variables_infos" {
with "var_class" > Temp
}
}
template "ppx:inputVars" {
call "variables_infos" {
with "var_class" > Input
}
}
template "ppx:outputVars" {
call "variables_infos" {
with "var_class" > Output
}
}
template "ppx:inOutVars" {
call "variables_infos" {
with "var_class" > InOut
}
}
template "ppx:pou", mode="var_type" {
apply "ppx:interface/*[self::ppx:inputVars or self::ppx:inOutVars or self::ppx:outputVars]/ppx:variable", mode="var_type";
}
template "ppx:variable", mode="var_type" {
variable "name" > «@name»
value "ns:AddTree()";
apply "ppx:type", mode="var_type";
value "ns:AddVarToTree($name)";
}
template "ppx:dataType", mode="var_type" {
apply "ppx:baseType", mode="var_type";
}
template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:struct", mode="var_type" {
apply "ppx:variable", mode="var_type";
}
template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:derived", mode="var_type" {
variable "type_name" > «@name»
choose {
when "$tree='True'" {
apply """exsl:node-set($project)/ppx:project/ppx:types/ppx:pous/ppx:pou[@name=$type_name] |
exsl:node-set($project)/ppx:project/ppx:types/ppx:dataTypes/ppx:dataType[@name=$type_name] |
exsl:node-set($stdlib)/ppx:project/ppx:types/ppx:pous/ppx:pou[@name=$type_name] |
exsl:node-set($stdlib)/ppx:project/ppx:types/ppx:dataTypes/ppx:dataType[@name=$type_name] |
exsl:node-set($extensions)/ppx:project/ppx:types/ppx:pous/ppx:pou[@name=$type_name] |
exsl:node-set($extensions)/ppx:project/ppx:types/ppx:dataTypes/ppx:dataType[@name=$type_name]""", mode="var_type";
}
}
value "ns:SetType($type_name)";
}
template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:array", mode="var_type" {
apply "ppx:baseType", mode="var_type";
foreach "ppx:dimension" {
variable "lower" > «@lower»
variable "upper" > «@upper»
value "ns:AddDimension($lower, $upper)";
}
}
template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:string", mode="var_type" {
variable "name" > STRING
value "ns:SetType($name)";
}
template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:wstring", mode="var_type" {
variable "name" > WSTRING
value "ns:SetType($name)";
}
template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/*", mode="var_type" {
variable "name" > «local-name()»
value "ns:SetType($name)";
}
template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/ppx:derived", mode="var_edit" {
variable "type_name" > «@name»
variable "pou_infos" {
copy """exsl:node-set($project)/ppx:project/ppx:types/ppx:pous/ppx:pou[@name=$type_name] |
exsl:node-set($stdlib)/ppx:project/ppx:types/ppx:pous/ppx:pou[@name=$type_name] |
exsl:node-set($extensions)/ppx:project/ppx:types/ppx:pous/ppx:pou[@name=$type_name]""";
}
choose {
when "$pou_infos != ''" > false
otherwise > true
}
}
template "*[self::ppx:type or self::ppx:baseType or self::ppx:returnType]/*", mode="var_edit" {
> true
}
template "ppx:value" {
choose {
when "@repetitionValue" {
> «@repetitionValue»(
apply;
> )
}
when "@member" {
> «@member» :=
apply;
}
otherwise {
apply;
}
}
}
template "ppx:simpleValue" {
> «@value»
}
function "complex_type_value" {
param "start_bracket";
param "end_bracket";
> «$start_bracket»
foreach "ppx:value" {
apply ".";
choose {
when "position()!=last()" > ,
}
}
> «$end_bracket»
}
template "ppx:arrayValue" {
call "complex_type_value" {
with "start_bracket" > [
with "end_bracket" > ]
}
}
template "ppx:structValue" {
call "complex_type_value" {
with "start_bracket" > (
with "end_bracket" > )
}
}
}