Added minimal functionality for Robot teaching

- Added minimal HMI
- Added possibility to open and close all chamber doors
This commit is contained in:
2026-01-17 09:20:39 +01:00
parent 9f058db2a3
commit 2d11c43579
2274 changed files with 912690 additions and 162 deletions

3
.gitignore vendored
View File

@@ -55,3 +55,6 @@ commit.txt
*.txt *.txt
*.exe *.exe
*.xlsx *.xlsx
# TwinCAT HMI, filter downloaded JSON schema files
json-schema.org

View File

@@ -5,8 +5,11 @@ VisualStudioVersion = 17.10.35827.194
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{B1E792BE-AA5F-4E3C-8C82-674BF9C0715B}") = "Infineon", "Infineon.tsproj", "{CB97A0B0-7E22-470D-8550-AA318EA46E50}" Project("{B1E792BE-AA5F-4E3C-8C82-674BF9C0715B}") = "Infineon", "Infineon.tsproj", "{CB97A0B0-7E22-470D-8550-AA318EA46E50}"
EndProject EndProject
Project("{FE7A1B72-C5B7-4D7C-BB7D-76384D4DE8E1}") = "Infineon_HMI", "..\Infineon_HMI\Infineon_HMI.hmiproj", "{B4B0E423-9884-4277-82A6-6D7062793303}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|TwinCAT HMI = Debug|TwinCAT HMI
Debug|TwinCAT OS (ARMV7-A) = Debug|TwinCAT OS (ARMV7-A) Debug|TwinCAT OS (ARMV7-A) = Debug|TwinCAT OS (ARMV7-A)
Debug|TwinCAT OS (ARMV7-M) = Debug|TwinCAT OS (ARMV7-M) Debug|TwinCAT OS (ARMV7-M) = Debug|TwinCAT OS (ARMV7-M)
Debug|TwinCAT OS (ARMV8-A) = Debug|TwinCAT OS (ARMV8-A) Debug|TwinCAT OS (ARMV8-A) = Debug|TwinCAT OS (ARMV8-A)
@@ -14,6 +17,7 @@ Global
Debug|TwinCAT OS (x64-E) = Debug|TwinCAT OS (x64-E) Debug|TwinCAT OS (x64-E) = Debug|TwinCAT OS (x64-E)
Debug|TwinCAT RT (x64) = Debug|TwinCAT RT (x64) Debug|TwinCAT RT (x64) = Debug|TwinCAT RT (x64)
Debug|TwinCAT RT (x86) = Debug|TwinCAT RT (x86) Debug|TwinCAT RT (x86) = Debug|TwinCAT RT (x86)
Release|TwinCAT HMI = Release|TwinCAT HMI
Release|TwinCAT OS (ARMV7-A) = Release|TwinCAT OS (ARMV7-A) Release|TwinCAT OS (ARMV7-A) = Release|TwinCAT OS (ARMV7-A)
Release|TwinCAT OS (ARMV7-M) = Release|TwinCAT OS (ARMV7-M) Release|TwinCAT OS (ARMV7-M) = Release|TwinCAT OS (ARMV7-M)
Release|TwinCAT OS (ARMV8-A) = Release|TwinCAT OS (ARMV8-A) Release|TwinCAT OS (ARMV8-A) = Release|TwinCAT OS (ARMV8-A)
@@ -23,6 +27,8 @@ Global
Release|TwinCAT RT (x86) = Release|TwinCAT RT (x86) Release|TwinCAT RT (x86) = Release|TwinCAT RT (x86)
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT HMI.ActiveCfg = Debug|TwinCAT RT (x86)
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT HMI.Build.0 = Debug|TwinCAT RT (x86)
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT OS (ARMV7-A).ActiveCfg = Debug|TwinCAT OS (ARMV7-A) {CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT OS (ARMV7-A).ActiveCfg = Debug|TwinCAT OS (ARMV7-A)
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT OS (ARMV7-A).Build.0 = Debug|TwinCAT OS (ARMV7-A) {CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT OS (ARMV7-A).Build.0 = Debug|TwinCAT OS (ARMV7-A)
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT OS (ARMV7-M).ActiveCfg = Debug|TwinCAT OS (ARMV7-M) {CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT OS (ARMV7-M).ActiveCfg = Debug|TwinCAT OS (ARMV7-M)
@@ -37,6 +43,8 @@ Global
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64) {CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64)
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86) {CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86)
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86) {CB97A0B0-7E22-470D-8550-AA318EA46E50}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86)
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT HMI.ActiveCfg = Release|TwinCAT RT (x86)
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT HMI.Build.0 = Release|TwinCAT RT (x86)
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT OS (ARMV7-A).ActiveCfg = Release|TwinCAT OS (ARMV7-A) {CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT OS (ARMV7-A).ActiveCfg = Release|TwinCAT OS (ARMV7-A)
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT OS (ARMV7-A).Build.0 = Release|TwinCAT OS (ARMV7-A) {CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT OS (ARMV7-A).Build.0 = Release|TwinCAT OS (ARMV7-A)
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT OS (ARMV7-M).ActiveCfg = Release|TwinCAT OS (ARMV7-M) {CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT OS (ARMV7-M).ActiveCfg = Release|TwinCAT OS (ARMV7-M)
@@ -51,34 +59,40 @@ Global
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64) {CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64)
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86) {CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86)
{CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86) {CB97A0B0-7E22-470D-8550-AA318EA46E50}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (ARMV7-A).ActiveCfg = Debug|TwinCAT OS (ARMV7-A) {B4B0E423-9884-4277-82A6-6D7062793303}.Debug|TwinCAT HMI.ActiveCfg = Debug|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (ARMV7-A).Build.0 = Debug|TwinCAT OS (ARMV7-A) {B4B0E423-9884-4277-82A6-6D7062793303}.Debug|TwinCAT HMI.Build.0 = Debug|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (ARMV7-M).ActiveCfg = Debug|TwinCAT OS (ARMV7-M) {B4B0E423-9884-4277-82A6-6D7062793303}.Debug|TwinCAT OS (ARMV7-A).ActiveCfg = Debug|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (ARMV7-M).Build.0 = Debug|TwinCAT OS (ARMV7-M) {B4B0E423-9884-4277-82A6-6D7062793303}.Debug|TwinCAT OS (ARMV7-A).Build.0 = Debug|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (ARMV8-A).ActiveCfg = Debug|TwinCAT OS (ARMV8-A) {B4B0E423-9884-4277-82A6-6D7062793303}.Debug|TwinCAT OS (ARMV7-M).ActiveCfg = Debug|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (ARMV8-A).Build.0 = Debug|TwinCAT OS (ARMV8-A) {B4B0E423-9884-4277-82A6-6D7062793303}.Debug|TwinCAT OS (ARMV7-M).Build.0 = Debug|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (x64).ActiveCfg = Debug|TwinCAT OS (x64) {B4B0E423-9884-4277-82A6-6D7062793303}.Debug|TwinCAT OS (ARMV8-A).ActiveCfg = Debug|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (x64).Build.0 = Debug|TwinCAT OS (x64) {B4B0E423-9884-4277-82A6-6D7062793303}.Debug|TwinCAT OS (ARMV8-A).Build.0 = Debug|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (x64-E).ActiveCfg = Debug|TwinCAT OS (x64-E) {B4B0E423-9884-4277-82A6-6D7062793303}.Debug|TwinCAT OS (x64).ActiveCfg = Debug|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (x64-E).Build.0 = Debug|TwinCAT OS (x64-E) {B4B0E423-9884-4277-82A6-6D7062793303}.Debug|TwinCAT OS (x64).Build.0 = Debug|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT RT (x64).ActiveCfg = Debug|TwinCAT RT (x64) {B4B0E423-9884-4277-82A6-6D7062793303}.Debug|TwinCAT OS (x64-E).ActiveCfg = Debug|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64) {B4B0E423-9884-4277-82A6-6D7062793303}.Debug|TwinCAT OS (x64-E).Build.0 = Debug|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86) {B4B0E423-9884-4277-82A6-6D7062793303}.Debug|TwinCAT RT (x64).ActiveCfg = Debug|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86) {B4B0E423-9884-4277-82A6-6D7062793303}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (ARMV7-A).ActiveCfg = Release|TwinCAT OS (ARMV7-A) {B4B0E423-9884-4277-82A6-6D7062793303}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (ARMV7-A).Build.0 = Release|TwinCAT OS (ARMV7-A) {B4B0E423-9884-4277-82A6-6D7062793303}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (ARMV7-M).ActiveCfg = Release|TwinCAT OS (ARMV7-M) {B4B0E423-9884-4277-82A6-6D7062793303}.Release|TwinCAT HMI.ActiveCfg = Release|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (ARMV7-M).Build.0 = Release|TwinCAT OS (ARMV7-M) {B4B0E423-9884-4277-82A6-6D7062793303}.Release|TwinCAT HMI.Build.0 = Release|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (ARMV8-A).ActiveCfg = Release|TwinCAT OS (ARMV8-A) {B4B0E423-9884-4277-82A6-6D7062793303}.Release|TwinCAT OS (ARMV7-A).ActiveCfg = Release|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (ARMV8-A).Build.0 = Release|TwinCAT OS (ARMV8-A) {B4B0E423-9884-4277-82A6-6D7062793303}.Release|TwinCAT OS (ARMV7-A).Build.0 = Release|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (x64).ActiveCfg = Release|TwinCAT OS (x64) {B4B0E423-9884-4277-82A6-6D7062793303}.Release|TwinCAT OS (ARMV7-M).ActiveCfg = Release|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (x64).Build.0 = Release|TwinCAT OS (x64) {B4B0E423-9884-4277-82A6-6D7062793303}.Release|TwinCAT OS (ARMV7-M).Build.0 = Release|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (x64-E).ActiveCfg = Release|TwinCAT OS (x64-E) {B4B0E423-9884-4277-82A6-6D7062793303}.Release|TwinCAT OS (ARMV8-A).ActiveCfg = Release|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (x64-E).Build.0 = Release|TwinCAT OS (x64-E) {B4B0E423-9884-4277-82A6-6D7062793303}.Release|TwinCAT OS (ARMV8-A).Build.0 = Release|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT RT (x64).ActiveCfg = Release|TwinCAT RT (x64) {B4B0E423-9884-4277-82A6-6D7062793303}.Release|TwinCAT OS (x64).ActiveCfg = Release|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64) {B4B0E423-9884-4277-82A6-6D7062793303}.Release|TwinCAT OS (x64).Build.0 = Release|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86) {B4B0E423-9884-4277-82A6-6D7062793303}.Release|TwinCAT OS (x64-E).ActiveCfg = Release|TwinCAT HMI
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86) {B4B0E423-9884-4277-82A6-6D7062793303}.Release|TwinCAT OS (x64-E).Build.0 = Release|TwinCAT HMI
{B4B0E423-9884-4277-82A6-6D7062793303}.Release|TwinCAT RT (x64).ActiveCfg = Release|TwinCAT HMI
{B4B0E423-9884-4277-82A6-6D7062793303}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT HMI
{B4B0E423-9884-4277-82A6-6D7062793303}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT HMI
{B4B0E423-9884-4277-82A6-6D7062793303}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT HMI
{384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT HMI.ActiveCfg = Debug|TwinCAT RT (x86)
{384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT HMI.Build.0 = Debug|TwinCAT RT (x86)
{384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT OS (ARMV7-A).ActiveCfg = Debug|TwinCAT OS (ARMV7-A) {384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT OS (ARMV7-A).ActiveCfg = Debug|TwinCAT OS (ARMV7-A)
{384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT OS (ARMV7-A).Build.0 = Debug|TwinCAT OS (ARMV7-A) {384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT OS (ARMV7-A).Build.0 = Debug|TwinCAT OS (ARMV7-A)
{384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT OS (ARMV7-M).ActiveCfg = Debug|TwinCAT OS (ARMV7-M) {384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT OS (ARMV7-M).ActiveCfg = Debug|TwinCAT OS (ARMV7-M)
@@ -93,6 +107,8 @@ Global
{384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64) {384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64)
{384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86) {384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86)
{384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86) {384A40E7-3107-4D80-8361-04B00829260A}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86)
{384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT HMI.ActiveCfg = Release|TwinCAT RT (x86)
{384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT HMI.Build.0 = Release|TwinCAT RT (x86)
{384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT OS (ARMV7-A).ActiveCfg = Release|TwinCAT OS (ARMV7-A) {384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT OS (ARMV7-A).ActiveCfg = Release|TwinCAT OS (ARMV7-A)
{384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT OS (ARMV7-A).Build.0 = Release|TwinCAT OS (ARMV7-A) {384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT OS (ARMV7-A).Build.0 = Release|TwinCAT OS (ARMV7-A)
{384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT OS (ARMV7-M).ActiveCfg = Release|TwinCAT OS (ARMV7-M) {384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT OS (ARMV7-M).ActiveCfg = Release|TwinCAT OS (ARMV7-M)
@@ -107,6 +123,38 @@ Global
{384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64) {384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64)
{384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86) {384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86)
{384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86) {384A40E7-3107-4D80-8361-04B00829260A}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT HMI.ActiveCfg = Debug|TwinCAT RT (x86)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT HMI.Build.0 = Debug|TwinCAT RT (x86)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (ARMV7-A).ActiveCfg = Debug|TwinCAT OS (ARMV7-A)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (ARMV7-A).Build.0 = Debug|TwinCAT OS (ARMV7-A)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (ARMV7-M).ActiveCfg = Debug|TwinCAT OS (ARMV7-M)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (ARMV7-M).Build.0 = Debug|TwinCAT OS (ARMV7-M)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (ARMV8-A).ActiveCfg = Debug|TwinCAT OS (ARMV8-A)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (ARMV8-A).Build.0 = Debug|TwinCAT OS (ARMV8-A)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (x64).ActiveCfg = Debug|TwinCAT OS (x64)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (x64).Build.0 = Debug|TwinCAT OS (x64)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (x64-E).ActiveCfg = Debug|TwinCAT OS (x64-E)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT OS (x64-E).Build.0 = Debug|TwinCAT OS (x64-E)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT RT (x64).ActiveCfg = Debug|TwinCAT RT (x64)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT RT (x64).Build.0 = Debug|TwinCAT RT (x64)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT RT (x86).ActiveCfg = Debug|TwinCAT RT (x86)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Debug|TwinCAT RT (x86).Build.0 = Debug|TwinCAT RT (x86)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT HMI.ActiveCfg = Release|TwinCAT RT (x86)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT HMI.Build.0 = Release|TwinCAT RT (x86)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (ARMV7-A).ActiveCfg = Release|TwinCAT OS (ARMV7-A)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (ARMV7-A).Build.0 = Release|TwinCAT OS (ARMV7-A)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (ARMV7-M).ActiveCfg = Release|TwinCAT OS (ARMV7-M)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (ARMV7-M).Build.0 = Release|TwinCAT OS (ARMV7-M)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (ARMV8-A).ActiveCfg = Release|TwinCAT OS (ARMV8-A)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (ARMV8-A).Build.0 = Release|TwinCAT OS (ARMV8-A)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (x64).ActiveCfg = Release|TwinCAT OS (x64)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (x64).Build.0 = Release|TwinCAT OS (x64)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (x64-E).ActiveCfg = Release|TwinCAT OS (x64-E)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT OS (x64-E).Build.0 = Release|TwinCAT OS (x64-E)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT RT (x64).ActiveCfg = Release|TwinCAT RT (x64)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT RT (x64).Build.0 = Release|TwinCAT RT (x64)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT RT (x86).ActiveCfg = Release|TwinCAT RT (x86)
{16E7B360-DCD5-431E-9380-EF0E96A38071}.Release|TwinCAT RT (x86).Build.0 = Release|TwinCAT RT (x86)
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View File

@@ -2,6 +2,12 @@
<TcSmProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.19"> <TcSmProject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.beckhoff.com/schemas/2012/07/TcSmProject" TcSmVersion="1.0" TcVersion="3.1.4026.19">
<Project ProjectGUID="{CB97A0B0-7E22-470D-8550-AA318EA46E50}" TargetNetId="5.127.104.206.1.1" Target64Bit="true" ShowHideConfigurations="#x6"> <Project ProjectGUID="{CB97A0B0-7E22-470D-8550-AA318EA46E50}" TargetNetId="5.127.104.206.1.1" Target64Bit="true" ShowHideConfigurations="#x6">
<System> <System>
<Licenses>
<Target>
<ManualSelect>{2752D285-16AD-4E89-AE6C-80E72784D264}</ManualSelect>
<LicenseDevice DongleHardwareId="2" DongleDevice="#x03020036" DongleLevel="60" DongleSystemId="{62CA069B-335C-D22F-33C1-C939EDC0FF9A}" DongleSerialNumber="000brrhk" DongleCacheLicense="true"/>
</Target>
</Licenses>
<Tasks> <Tasks>
<Task Id="3" Priority="20" CycleTime="100000" AmsPort="350" AdtTasks="true"> <Task Id="3" Priority="20" CycleTime="100000" AmsPort="350" AdtTasks="true">
<Name>PlcTask</Name> <Name>PlcTask</Name>
@@ -31,7 +37,9 @@
</Io> </Io>
</Project> </Project>
<Mappings> <Mappings>
<MappingInfo Identifier="{00000000-2001-0850-0020-500810000403}" Id="#x02030020"/> <MappingInfo Identifier="{00000000-2001-0850-0020-500851000403}" Id="#x02030030"/>
<MappingInfo Identifier="{03040010-0010-0304-1000-040310000403}" Id="#x02030010" Watchdog="04000000040000000400000004000000"/> <MappingInfo Identifier="{00000000-0010-0304-3000-040310000403}" Id="#x02030010"/>
<MappingInfo Identifier="{00000000-0020-0304-3000-040322000403}" Id="#x02030040"/>
<MappingInfo Identifier="{03040050-0050-0304-5000-040350000403}" Id="#x02030020" Watchdog="04000000040000000400000004000000"/>
</Mappings> </Mappings>
</TcSmProject> </TcSmProject>

View File

@@ -3,10 +3,31 @@
<POU Name="PRG_Main" Id="{e44f5145-cb67-4abd-8a28-92b41a0d9dbd}" SpecialFunc="None"> <POU Name="PRG_Main" Id="{e44f5145-cb67-4abd-8a28-92b41a0d9dbd}" SpecialFunc="None">
<Declaration><![CDATA[PROGRAM PRG_Main <Declaration><![CDATA[PROGRAM PRG_Main
VAR VAR
_fbRobot : FB_KukaRobot;
_fbHVTester : FB_HVTester;
_fbEtcher1 : FB_Etcher;
_fbEtcher2 : FB_Etcher;
_xFirstCycle : BOOL := TRUE;
END_VAR END_VAR
]]></Declaration> ]]></Declaration>
<Implementation> <Implementation>
<ST><![CDATA[PRG_Safety();]]></ST> <ST><![CDATA[IF _xFirstCycle THEN
_xFirstCycle := FALSE;
END_IF
_fbRobot(xExecute:= , eCMD:= , eCurrentState=> , eCurrentCMD=> );
_fbHVTester(xOpenChambers:= GVL_SCADA.xOpenAllChambers);
_fbEtcher1(xOpenDoor:= GVL_SCADA.xOpenAllChambers);
_fbEtcher2(xOpenDoor:= GVL_SCADA.xOpenAllChambers);
// Call safety program
PRG_Safety(xConfirmAlarms := GVL_SCADA.xErrAck);
// Reset alarm reset request
GVL_SCADA.xErrAck := FALSE;]]></ST>
</Implementation> </Implementation>
</POU> </POU>
</TcPlcObject> </TcPlcObject>

View File

@@ -2,12 +2,33 @@
<TcPlcObject Version="1.1.0.1"> <TcPlcObject Version="1.1.0.1">
<POU Name="PRG_Safety" Id="{3b12eabc-3e96-45aa-8279-75f07072b9b0}" SpecialFunc="None"> <POU Name="PRG_Safety" Id="{3b12eabc-3e96-45aa-8279-75f07072b9b0}" SpecialFunc="None">
<Declaration><![CDATA[PROGRAM PRG_Safety <Declaration><![CDATA[PROGRAM PRG_Safety
VAR_INPUT
xConfirmAlarms : BOOL;
END_VAR
VAR VAR
_xRun AT %Q* : BOOL := TRUE; _xRun AT %Q* : BOOL;
_xRequestOpenDoor AT %I* : BOOL;
_rtrigDoorUnlock : R_TRIG;
_xLockDoor AT %Q* : BOOL := TRUE;
_xComStartup AT %I* : BOOL;
_xErrorAck AT %Q* : BOOL;
_tofErrorAck : TOF := (PT := T#500MS);
END_VAR END_VAR
]]></Declaration> ]]></Declaration>
<Implementation> <Implementation>
<ST><![CDATA[]]></ST> <ST><![CDATA[_xRun := NOT _xComStartup;
_rtrigDoorUnlock(CLK := _xRequestOpenDoor);
IF _rtrigDoorUnlock.Q THEN
_xLockDoor := (NOT _xLockDoor);
END_IF
// Reset safety group errors
_tofErrorAck(IN:= xConfirmAlarms, PT:= T#500MS, Q=> _xErrorAck, ET=> );]]></ST>
</Implementation> </Implementation>
</POU> </POU>
</TcPlcObject> </TcPlcObject>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<POU Name="FB_Etcher" Id="{e75b6d70-36db-4c78-b78d-a594609441d1}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_Etcher
VAR_INPUT
xOpenDoor : BOOL;
END_VAR
VAR_OUTPUT
END_VAR
VAR
_xOpenDoor AT %Q* : BOOL;
_xCloseDoor AT %Q* : BOOL;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[IF xOpenDoor THEN
_xOpenDoor := TRUE;
_xCloseDoor := FALSE;
ELSE
_xOpenDoor := FALSE;
_xCloseDoor := TRUE;
END_IF]]></ST>
</Implementation>
</POU>
</TcPlcObject>

View File

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<POU Name="FB_HVTester" Id="{63fd7fbb-2896-492c-ad94-827a20571a58}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FB_HVTester
VAR_INPUT
xOpenChambers : BOOL;
END_VAR
VAR_OUTPUT
END_VAR
VAR
_xOpenDoor1 AT %Q* : BOOL;
_xOpenDoor2 AT %Q* : BOOL;
_xCloseDoor1 AT %Q* : BOOL;
_xCloseDoor2 AT %Q* : BOOL;
// Chamber is the big cylinder not the door
_xOpenChamber1 AT %Q* : BOOL;
_xOpenChamber2 AT %Q* : BOOL;
_xCloseChamber1 AT %Q* : BOOL;
_xCloseChamber2 AT %Q* : BOOL;
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[IF xOpenChambers THEN
_xOpenDoor1 := TRUE;
_xOpenDoor2 := TRUE;
_xCloseDoor1 := FALSE;
_xCloseDoor2 := FALSE;
ELSE
_xOpenDoor1 := FALSE;
_xOpenDoor2 := FALSE;
_xCloseDoor1 := TRUE;
_xCloseDoor2 := TRUE;
END_IF]]></ST>
</Implementation>
</POU>
</TcPlcObject>

View File

@@ -1,17 +1,91 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1"> <TcPlcObject Version="1.1.0.1">
<POU Name="FB_KukaRobot" Id="{6ca3e82a-4047-4132-872d-1f49057f08d6}" SpecialFunc="None"> <POU Name="FB_KukaRobot" Id="{6ca3e82a-4047-4132-872d-1f49057f08d6}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FINAL FB_KukaRobot <Declaration><![CDATA[FUNCTION_BLOCK FINAL FB_KukaRobot EXTENDS FB_Isa88_SM
VAR_INPUT VAR_INPUT
END_VAR END_VAR
VAR_OUTPUT VAR_OUTPUT
END_VAR END_VAR
VAR VAR
_eState : E_Isa88_State; // 0 - Nicht aus
// 1 - Enable
// 2 - Enable move
// 3 - Conf_Mess (Reset)
_uCtrl AT %Q* : U_KukaRobot_Ctrl;
// 0 -> Robot job to do
// 1 -> PLC job which is finished
_uJobs AT %Q* : U_KukaRobot_Jobs;
// 0 - Greifer nummer
// 1 - Drehteller Nummer
// 2 - Position Heizplatte
// 3 - Position Kuehlplatte
_abToolsAndPositions AT %Q* : ARRAY[0..3] OF BYTE;
// Positions in um
_diOffsetPosX AT %Q* : DINT;
_diOffsetPosY AT %Q* : DINT;
_diThickness AT %Q* : DINT;
// Inputs
_uState AT %I* : U_KukaRobot_State;
_dwErrorBits AT %I* : DWORD;
_awJobStatesFromRobot AT %I* : ARRAY[0..1] OF WORD;
_dwJobForPLC AT %I* : DWORD;
_abMirrorToolsAndPositions AT %I* : ARRAY[0..3] OF BYTE;
// Position mirrors
_diMirrorOffsetPosX AT %I* : DINT;
_diMirrorOffsetPosY AT %I* : DINT;
_diMirrorThickness AT %I* : DINT;
// Motortemperaturen
_asiMotorTemps1To4 AT %I* : ARRAY[0..3] OF SINT;
_asiMotorTemps5To8 AT %I* : ARRAY[0..3] OF SINT;
END_VAR
VAR CONSTANT
// Bit indices for robot interface
NOT_DISABLE_AXES : USINT := 0;
ENABLE_AXES : USINT := 1;
ENABLE_MOVE : USINT := 2;
CONF_MESS : USINT := 3;
// Array indices for Job interface
ROBOT_JOB : USINT := 0;
PLC_JOB_FINISHED : USINT := 1;
// Array indices for tools and plate positions
GRIPPER_NR : USINT := 0;
TURN_TABLE_NR : USINT := 1;
HEATING_PLATE_POS : USINT := 2;
COOLING_PLATE_POS : USINT := 3;
END_VAR END_VAR
]]></Declaration> ]]></Declaration>
<Implementation> <Implementation>
<ST><![CDATA[]]></ST> <ST><![CDATA[// Positionen in um <=> 0.001mm
// Zur Sicherheit im T2 Zustand die Fahrfreigabe wegnehmen (da standardpasswort bleibt)
// Call isa88 base state machine
SUPER^();]]></ST>
</Implementation> </Implementation>
<Method Name="M_StateIdle" Id="{025437ab-beb0-4ad6-bdc3-468dec599ff4}">
<Declaration><![CDATA[METHOD M_StateIdle
]]></Declaration>
<Implementation>
<ST><![CDATA[// Allow robot to be moved with programming pendant
_uCtrl.stCtrl.bNotDisableAxes := 1;
_uCtrl.stCtrl.bEnableAxes := 1;
_uCtrl.stCtrl.bEnableMove := 1;
_uCtrl.stCtrl.bConfMess := 0;
// Deselect all jobs and set plc finished job to none
//_awJobs[ROBOT_JOB] := 0;
//_awJobs[PLC_JOB_FINISHED] := 0;]]></ST>
</Implementation>
</Method>
</POU> </POU>
</TcPlcObject> </TcPlcObject>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="ST_KukaRobot_Ctrl" Id="{6a4fb617-ed87-4838-8f9a-7e8618b6ad47}">
<Declaration><![CDATA[{attribute 'pack_mode' := '0'}
TYPE ST_KukaRobot_Ctrl :
STRUCT
bNotDisableAxes : BIT;
bEnableAxes : BIT;
bEnableMove : BIT;
bConfMess : BIT;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="ST_KukaRobot_Jobs" Id="{149a955f-b7c0-4993-9b33-a66606ed8bcd}">
<Declaration><![CDATA[{attribute 'pack_mode' := '0'}
TYPE ST_KukaRobot_Jobs :
STRUCT
wJobNrForRobot : WORD;
wFinishedJobNrFromPlc : WORD;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="ST_KukaRobot_State" Id="{a63ba4ed-f6ed-4d69-91eb-1236a87f0780}">
<Declaration><![CDATA[{attribute 'pack_mode' := '0'}
TYPE ST_KukaRobot_State :
STRUCT
bUserSAF : BIT;
bAlarmStop : BIT;
bPeriRdy : BIT;
bIOActConf : BIT;
bStopMess : BIT;
bProAct : BIT;
bDummy : BIT;
bRobStopped : BIT;
bInHome : BIT;
bRCRdy1 : BIT;
bT1 : BIT;
bT2 : BIT;
bAut : BIT;
bExt : BIT;
END_STRUCT
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="U_KukaRobot_Ctrl" Id="{c0890327-8227-4b1a-8f53-5fe8dcabd304}">
<Declaration><![CDATA[TYPE U_KukaRobot_Ctrl :
UNION
dwCtrl : DWORD;
stCtrl : ST_KukaRobot_Ctrl;
END_UNION
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="U_KukaRobot_Jobs" Id="{590c2205-ccc7-4ffe-977e-f7594d299bfd}">
<Declaration><![CDATA[TYPE U_KukaRobot_Jobs :
UNION
dwJobs : DWORD;
stJobs : ST_KukaRobot_Jobs;
END_UNION
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<DUT Name="U_KukaRobot_State" Id="{955531d4-f458-4580-a2f2-ab760c7d37eb}">
<Declaration><![CDATA[TYPE U_KukaRobot_State :
UNION
dwState : DWORD;
stState : ST_KukaRobot_State;
END_UNION
END_TYPE
]]></Declaration>
</DUT>
</TcPlcObject>

View File

@@ -1,28 +1,56 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1"> <TcPlcObject Version="1.1.0.1">
<POU Name="FB_TrayFeeder" Id="{e2e3e993-37de-42b1-80e1-7dba99a66e94}" SpecialFunc="None"> <POU Name="FB_TrayFeeder" Id="{e2e3e993-37de-42b1-80e1-7dba99a66e94}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FINAL FB_TrayFeeder <Declaration><![CDATA[FUNCTION_BLOCK FINAL FB_TrayFeeder EXTENDS FB_Isa88_SM
VAR_INPUT VAR_INPUT
xExecute : BOOL;
eCMD : E_Isa88_Cmd;
END_VAR END_VAR
VAR_OUTPUT VAR_OUTPUT
eCurrentState : E_Isa88_State;
eCurrentCMD : E_Isa88_Cmd;
END_VAR END_VAR
VAR VAR
_eState : E_Isa88_State; _fbTcpConnection : FB_ClientServerConnection;
_sIpAddr : STRING;
_udiPort : UDINT;
END_VAR END_VAR
]]></Declaration> ]]></Declaration>
<Implementation> <Implementation>
<ST><![CDATA[CASE _eState OF <ST><![CDATA[// Call client server connection fb
E_Isa88_State.IDLE: _fbTcpConnection(
; sSrvNetID:= '',
END_CASE nMode:= ,
sRemoteHost:= _sIpAddr,
nRemotePort:= ,
bEnable:= ,
tReconnect:= ,
bBusy=> ,
bError=> ,
nErrId=> ,
hSocket=> ,
eState=> );
// Call isa88 base state machine
SUPER^();
// IPs // IPs
// 192.168.1.10 // 192.168.1.10
// 192.168.1.11]]></ST> // 192.168.1.11]]></ST>
</Implementation> </Implementation>
<Method Name="FB_init" Id="{6c7048d9-3836-4289-b5f3-f8878267494f}">
<Declaration><![CDATA[//FB_Init ist immer implizit verfügbar und wird primär für die Initialisierung verwendet.
//Der Rückgabewert wird nicht ausgewertet. Für gezielte Einflussnahme können Sie
//die Methoden explizit deklarieren und darin mit dem Standard-Initialisierungscode
//zusätzlichen Code bereitstellen. Sie können den Rückgabewert auswerten.
METHOD FB_Init: BOOL
VAR_INPUT
bInitRetains: BOOL; // TRUE: Die Retain-Variablen werden initialisiert (Reset warm / Reset kalt)
bInCopyCode: BOOL; // TRUE: Die Instanz wird danach in den Kopiercode kopiert (Online-Change)
sIPAddr : STRING;
udiPort : UDINT;
END_VAR]]></Declaration>
<Implementation>
<ST><![CDATA[_sIpAddr := sIPAddr;
_udiPort := udiPort;]]></ST>
</Implementation>
</Method>
</POU> </POU>
</TcPlcObject> </TcPlcObject>

11
PLC/GVLs/GVL_SCADA.TcGVL Normal file
View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<GVL Name="GVL_SCADA" Id="{bb0d1251-7abb-4971-bbc9-72bee3b1c668}">
<Declaration><![CDATA[{attribute 'qualified_only'}
VAR_GLOBAL
xErrAck : BOOL;
xOpenAllChambers : BOOL;
END_VAR]]></Declaration>
</GVL>
</TcPlcObject>

29
PLC/GlobalTextList.TcGTLO Normal file
View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<GlobalTextList Name="GlobalTextList" Id="{71e616d8-9f28-44f9-85e4-c09f140a97bd}">
<XmlArchive>
<Data>
<o xml:space="preserve" t="GlobalTextListObject">
<l n="TextList" t="ArrayList" cet="TextListRow">
<o>
<v n="TextID">"134"</v>
<v n="TextDefault">"Rest"</v>
<l n="LanguageTexts" t="ArrayList" />
</o>
</l>
<l n="Languages" t="ArrayList" />
<v n="GuidInit">{70dbd3f8-6154-4749-9cca-681da551cf9b}</v>
<v n="GuidReInit">{7f241e67-9115-442d-b41b-9dac33ba1617}</v>
<v n="GuidExitX">{db2ea5fe-8596-4215-8845-f46ef9e4d4dc}</v>
</o>
</Data>
<TypeList>
<Type n="ArrayList">System.Collections.ArrayList</Type>
<Type n="GlobalTextListObject">{63784cbb-9ba0-45e6-9d69-babf3f040511}</Type>
<Type n="Guid">System.Guid</Type>
<Type n="String">System.String</Type>
<Type n="TextListRow">{53da1be7-ad25-47c3-b0e8-e26286dad2e0}</Type>
</TypeList>
</XmlArchive>
</GlobalTextList>
</TcPlcObject>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1"> <TcPlcObject Version="1.1.0.1">
<POU Name="FB_Isa88_SM" Id="{29def7dc-7eb7-4788-94bf-20badd909417}" SpecialFunc="None"> <POU Name="FB_Isa88_SM" Id="{29def7dc-7eb7-4788-94bf-20badd909417}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK FINAL FB_Isa88_SM <Declaration><![CDATA[FUNCTION_BLOCK FB_Isa88_SM IMPLEMENTS I_Isa88_SM
VAR_INPUT VAR_INPUT
xExecute : BOOL; xExecute : BOOL;
eCMD : E_Isa88_Cmd; eCMD : E_Isa88_Cmd;
@@ -15,10 +15,59 @@ VAR
END_VAR END_VAR
]]></Declaration> ]]></Declaration>
<Implementation> <Implementation>
<ST><![CDATA[]]></ST> <ST><![CDATA[CASE _eState OF
E_Isa88_State.IDLE:
M_StateIdle();
E_Isa88_State.RUNNING:
M_StateRunning();
E_Isa88_State.COMPLETE:
M_StateComplete();
E_Isa88_State.PAUSING:
IF M_StatePausing() THEN
_eState := E_Isa88_State.PAUSED;
END_IF
E_Isa88_State.PAUSED:
M_StatePaused();
E_Isa88_State.HOLDING:
IF M_StateHolding() THEN
_eState := E_Isa88_State.HELD;
END_IF
E_Isa88_State.HELD:
M_StateHeld();
E_Isa88_State.RESTARTING:
IF M_StateRestarting() THEN
_eState := E_Isa88_State.RUNNING;
END_IF
E_Isa88_State.STOPPING:
IF M_StateStopping() THEN
_eState := E_Isa88_State.STOPPED;
END_IF
E_Isa88_State.STOPPED:
M_StateStopped();
E_Isa88_State.ABORTING:
IF M_StateAborting() THEN
_eState := E_Isa88_State.ABORTED;
END_IF
E_Isa88_State.ABORTED:
M_StateAborted();
ELSE
;
END_CASE]]></ST>
</Implementation> </Implementation>
<Method Name="M_StateAborted" Id="{7d3ae447-cd1c-41c4-ac16-4adbba3ca9d2}"> <Method Name="M_StateAborted" Id="{7d3ae447-cd1c-41c4-ac16-4adbba3ca9d2}">
<Declaration><![CDATA[METHOD M_StateAborted : BOOL <Declaration><![CDATA[METHOD M_StateAborted
VAR_INPUT VAR_INPUT
END_VAR END_VAR
]]></Declaration> ]]></Declaration>
@@ -36,16 +85,15 @@ END_VAR
</Implementation> </Implementation>
</Method> </Method>
<Method Name="M_StateComplete" Id="{c6f588b5-faa7-4cdb-8ef7-15b60b1b3437}"> <Method Name="M_StateComplete" Id="{c6f588b5-faa7-4cdb-8ef7-15b60b1b3437}">
<Declaration><![CDATA[METHOD M_StateComplete : BOOL <Declaration><![CDATA[METHOD M_StateComplete
VAR_INPUT VAR_INPUT
END_VAR END_VAR]]></Declaration>
]]></Declaration>
<Implementation> <Implementation>
<ST><![CDATA[]]></ST> <ST><![CDATA[]]></ST>
</Implementation> </Implementation>
</Method> </Method>
<Method Name="M_StateHeld" Id="{d3017117-19ee-4be8-a004-3bf1cb3e986c}"> <Method Name="M_StateHeld" Id="{d3017117-19ee-4be8-a004-3bf1cb3e986c}">
<Declaration><![CDATA[METHOD M_StateHeld : BOOL <Declaration><![CDATA[METHOD M_StateHeld
VAR_INPUT VAR_INPUT
END_VAR END_VAR
]]></Declaration> ]]></Declaration>
@@ -63,7 +111,7 @@ END_VAR
</Implementation> </Implementation>
</Method> </Method>
<Method Name="M_StateIdle" Id="{a1e6fb67-08b4-4452-a103-1e87b93b70df}"> <Method Name="M_StateIdle" Id="{a1e6fb67-08b4-4452-a103-1e87b93b70df}">
<Declaration><![CDATA[METHOD M_StateIdle : BOOL <Declaration><![CDATA[METHOD M_StateIdle
VAR_INPUT VAR_INPUT
END_VAR END_VAR
]]></Declaration> ]]></Declaration>
@@ -72,7 +120,7 @@ END_VAR
</Implementation> </Implementation>
</Method> </Method>
<Method Name="M_StatePaused" Id="{e2e36464-c119-471f-8bba-3290f653d282}"> <Method Name="M_StatePaused" Id="{e2e36464-c119-471f-8bba-3290f653d282}">
<Declaration><![CDATA[METHOD M_StatePaused : BOOL <Declaration><![CDATA[METHOD M_StatePaused
VAR_INPUT VAR_INPUT
END_VAR END_VAR
]]></Declaration> ]]></Declaration>
@@ -99,7 +147,7 @@ END_VAR
</Implementation> </Implementation>
</Method> </Method>
<Method Name="M_StateRunning" Id="{e61c2773-08f6-421e-88fd-c87d0d7d7581}"> <Method Name="M_StateRunning" Id="{e61c2773-08f6-421e-88fd-c87d0d7d7581}">
<Declaration><![CDATA[METHOD M_StateRunning : BOOL <Declaration><![CDATA[METHOD M_StateRunning
VAR_INPUT VAR_INPUT
END_VAR END_VAR
]]></Declaration> ]]></Declaration>
@@ -108,7 +156,7 @@ END_VAR
</Implementation> </Implementation>
</Method> </Method>
<Method Name="M_StateStopped" Id="{0455a3a5-4745-4cf5-8c40-69d001c1d9aa}"> <Method Name="M_StateStopped" Id="{0455a3a5-4745-4cf5-8c40-69d001c1d9aa}">
<Declaration><![CDATA[METHOD M_StateStopped : BOOL <Declaration><![CDATA[METHOD M_StateStopped
VAR_INPUT VAR_INPUT
END_VAR END_VAR
]]></Declaration> ]]></Declaration>

View File

@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<Itf Name="I_Isa88_SM" Id="{40882424-4ec1-4664-8b86-b7a6af5bbb74}">
<Declaration><![CDATA[INTERFACE I_Isa88_SM
]]></Declaration>
<Method Name="M_StateAborted" Id="{e67083c3-128e-45d9-b1cc-0a35d94ac3bc}">
<Declaration><![CDATA[METHOD M_StateAborted
VAR_INPUT
END_VAR
]]></Declaration>
</Method>
<Method Name="M_StateAborting" Id="{d3e0a947-0574-444f-878b-6e216d4fca0c}">
<Declaration><![CDATA[METHOD M_StateAborting : BOOL
VAR_INPUT
END_VAR
]]></Declaration>
</Method>
<Method Name="M_StateComplete" Id="{bef858dc-1667-4bca-9f0f-99332f97e6e2}">
<Declaration><![CDATA[METHOD M_StateComplete
VAR_INPUT
END_VAR]]></Declaration>
</Method>
<Method Name="M_StateHeld" Id="{44494e88-dd2e-4465-9ead-95d76f1444b6}">
<Declaration><![CDATA[METHOD M_StateHeld
VAR_INPUT
END_VAR
]]></Declaration>
</Method>
<Method Name="M_StateHolding" Id="{2b2a3d8f-01ad-4938-b464-ceb50de62ddf}">
<Declaration><![CDATA[METHOD M_StateHolding : BOOL
VAR_INPUT
END_VAR
]]></Declaration>
</Method>
<Method Name="M_StateIdle" Id="{4ceced48-4f87-482f-a69a-e97b69ac8963}">
<Declaration><![CDATA[METHOD M_StateIdle
VAR_INPUT
END_VAR
]]></Declaration>
</Method>
<Method Name="M_StatePaused" Id="{fc81aaa6-18b7-4113-914d-8d5cd632e976}">
<Declaration><![CDATA[METHOD M_StatePaused
VAR_INPUT
END_VAR
]]></Declaration>
</Method>
<Method Name="M_StatePausing" Id="{48a7510c-d8b6-42c2-a5e4-f4ebcb66eb3b}">
<Declaration><![CDATA[METHOD M_StatePausing : BOOL
VAR_INPUT
END_VAR
]]></Declaration>
</Method>
<Method Name="M_StateRestarting" Id="{12cefe9f-48b4-4752-b95c-8ffb5612b7c4}">
<Declaration><![CDATA[METHOD M_StateRestarting : BOOL
VAR_INPUT
END_VAR
]]></Declaration>
</Method>
<Method Name="M_StateRunning" Id="{90fa6b25-1c31-4d7c-a91d-56a908196ed4}">
<Declaration><![CDATA[METHOD M_StateRunning
VAR_INPUT
END_VAR
]]></Declaration>
</Method>
<Method Name="M_StateStopped" Id="{62d558ef-79a2-484a-a156-d8057fe6d97a}">
<Declaration><![CDATA[METHOD M_StateStopped
VAR_INPUT
END_VAR
]]></Declaration>
</Method>
<Method Name="M_StateStopping" Id="{7ecd335a-ebd9-4170-b5b7-2f9add02b49d}">
<Declaration><![CDATA[METHOD M_StateStopping : BOOL
VAR_INPUT
END_VAR
]]></Declaration>
</Method>
</Itf>
</TcPlcObject>

View File

@@ -17,6 +17,7 @@
<Implicit_KindOfTask>{ddbceeba-d0c8-495b-9a5c-2661c67a1e92}</Implicit_KindOfTask> <Implicit_KindOfTask>{ddbceeba-d0c8-495b-9a5c-2661c67a1e92}</Implicit_KindOfTask>
<Implicit_Jitter_Distribution>{75f900e4-4087-4191-b701-8d2490967e28}</Implicit_Jitter_Distribution> <Implicit_Jitter_Distribution>{75f900e4-4087-4191-b701-8d2490967e28}</Implicit_Jitter_Distribution>
<LibraryReferences>{c257ae08-f675-4e0f-94b6-8cb38c7cb40e}</LibraryReferences> <LibraryReferences>{c257ae08-f675-4e0f-94b6-8cb38c7cb40e}</LibraryReferences>
<CompilerDefines>VISU_USEPROPERTYINFO</CompilerDefines>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Compile Include="00_Main\PRG_Main.TcPOU"> <Compile Include="00_Main\PRG_Main.TcPOU">
@@ -24,34 +25,125 @@
</Compile> </Compile>
<Compile Include="00_Main\PRG_Safety.TcPOU"> <Compile Include="00_Main\PRG_Safety.TcPOU">
<SubType>Code</SubType> <SubType>Code</SubType>
<ExcludeFromBuild>false</ExcludeFromBuild>
</Compile>
<Compile Include="01_Stationen\Etcher\FB_Etcher.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="01_Stationen\HVTester\FB_HVTester.TcPOU">
<SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="01_Stationen\Kuka_Robot\FB_KukaRobot.TcPOU"> <Compile Include="01_Stationen\Kuka_Robot\FB_KukaRobot.TcPOU">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="01_Stationen\Kuka_Robot\InterfaceStructs\ST_KukaRobot_Ctrl.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="01_Stationen\Kuka_Robot\InterfaceStructs\ST_KukaRobot_Jobs.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="01_Stationen\Kuka_Robot\InterfaceStructs\ST_KukaRobot_State.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="01_Stationen\Kuka_Robot\InterfaceUnions\U_KukaRobot_Jobs.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="01_Stationen\Kuka_Robot\InterfaceUnions\U_KukaRobot_State.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="01_Stationen\Kuka_Robot\InterfaceUnions\U_KukaRobot_Ctrl.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="01_Stationen\TrayFeeder\FB_TrayFeeder.TcPOU"> <Compile Include="01_Stationen\TrayFeeder\FB_TrayFeeder.TcPOU">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="ISA88\E_Isa88_Cmd.TcDUT"> <Compile Include="GlobalTextList.TcGTLO">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="ISA88\E_Isa88_State.TcDUT"> <Compile Include="GVLs\GVL_SCADA.TcGVL">
<SubType>Code</SubType>
<LinkAlways>true</LinkAlways>
</Compile>
<Compile Include="LibraryCandidates\ISA88\E_Isa88_Cmd.TcDUT">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="ISA88\FB_Isa88_SM.TcPOU"> <Compile Include="LibraryCandidates\ISA88\E_Isa88_State.TcDUT">
<SubType>Code</SubType>
</Compile>
<Compile Include="LibraryCandidates\ISA88\FB_Isa88_SM.TcPOU">
<SubType>Code</SubType>
</Compile>
<Compile Include="LibraryCandidates\ISA88\I_Isa88_SM.TcIO">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="PlcTask.TcTTO"> <Compile Include="PlcTask.TcTTO">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="Visualization Manager.TcVMO">
<SubType>Code</SubType>
</Compile>
<Compile Include="Visu\Visualization.TcVIS">
<SubType>Code</SubType>
<DependentUpon>Visualization Manager.TcVMO</DependentUpon>
</Compile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Folder Include="01_Stationen\Kuka_Robot" /> <Folder Include="01_Stationen\Kuka_Robot" />
<Folder Include="01_Stationen\Kuka_Robot\InterfaceStructs" />
<Folder Include="01_Stationen\Kuka_Robot\InterfaceUnions" />
<Folder Include="01_Stationen\HVTester" />
<Folder Include="01_Stationen\Etcher" />
<Folder Include="01_Stationen\TrayFeeder" /> <Folder Include="01_Stationen\TrayFeeder" />
<Folder Include="01_Stationen" /> <Folder Include="01_Stationen" />
<Folder Include="00_Main" /> <Folder Include="00_Main" />
<Folder Include="ISA88" /> <Folder Include="LibraryCandidates" />
<Folder Include="LibraryCandidates\ISA88" />
<Folder Include="GVLs" />
<Folder Include="Visu" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PlaceholderReference Include="System_VisuElemMeter">
<DefaultResolution>VisuElemMeter, 4.7.0.0 (System)</DefaultResolution>
<Namespace>VisuElemMeter</Namespace>
<SystemLibrary>true</SystemLibrary>
<ResolverGuid>2717eb6a-dd07-4c66-8d8d-cacebd7b18ae</ResolverGuid>
</PlaceholderReference>
<PlaceholderReference Include="System_VisuElems">
<DefaultResolution>VisuElems, 4.8.0.0 (System)</DefaultResolution>
<Namespace>VisuElems</Namespace>
<SystemLibrary>true</SystemLibrary>
<ResolverGuid>2717eb6a-dd07-4c66-8d8d-cacebd7b18ae</ResolverGuid>
</PlaceholderReference>
<PlaceholderReference Include="System_VisuElemsSpecialControls">
<DefaultResolution>VisuElemsSpecialControls, 4.7.0.0 (System)</DefaultResolution>
<Namespace>VisuElemsSpecialControls</Namespace>
<SystemLibrary>true</SystemLibrary>
<ResolverGuid>2717eb6a-dd07-4c66-8d8d-cacebd7b18ae</ResolverGuid>
</PlaceholderReference>
<PlaceholderReference Include="System_VisuElemsWinControls">
<DefaultResolution>VisuElemsWinControls, 4.8.0.0 (System)</DefaultResolution>
<Namespace>VisuElemsWinControls</Namespace>
<SystemLibrary>true</SystemLibrary>
<ResolverGuid>2717eb6a-dd07-4c66-8d8d-cacebd7b18ae</ResolverGuid>
</PlaceholderReference>
<PlaceholderReference Include="System_VisuElemTextEditor">
<DefaultResolution>VisuElemTextEditor, 4.8.0.0 (System)</DefaultResolution>
<Namespace>VisuElemTextEditor</Namespace>
<SystemLibrary>true</SystemLibrary>
<ResolverGuid>2717eb6a-dd07-4c66-8d8d-cacebd7b18ae</ResolverGuid>
</PlaceholderReference>
<PlaceholderReference Include="System_VisuInputs">
<DefaultResolution>VisuInputs, 4.7.0.0 (System)</DefaultResolution>
<Namespace>VisuInputs</Namespace>
<SystemLibrary>true</SystemLibrary>
<ResolverGuid>2717eb6a-dd07-4c66-8d8d-cacebd7b18ae</ResolverGuid>
</PlaceholderReference>
<PlaceholderReference Include="System_VisuNativeControl">
<DefaultResolution>VisuNativeControl, 4.8.0.0 (System)</DefaultResolution>
<Namespace>VisuNativeControl</Namespace>
<SystemLibrary>true</SystemLibrary>
<ResolverGuid>2717eb6a-dd07-4c66-8d8d-cacebd7b18ae</ResolverGuid>
</PlaceholderReference>
<PlaceholderReference Include="Tc2_Standard"> <PlaceholderReference Include="Tc2_Standard">
<DefaultResolution>Tc2_Standard, * (Beckhoff Automation GmbH)</DefaultResolution> <DefaultResolution>Tc2_Standard, * (Beckhoff Automation GmbH)</DefaultResolution>
<Namespace>Tc2_Standard</Namespace> <Namespace>Tc2_Standard</Namespace>
@@ -60,6 +152,10 @@
<DefaultResolution>Tc2_System, * (Beckhoff Automation GmbH)</DefaultResolution> <DefaultResolution>Tc2_System, * (Beckhoff Automation GmbH)</DefaultResolution>
<Namespace>Tc2_System</Namespace> <Namespace>Tc2_System</Namespace>
</PlaceholderReference> </PlaceholderReference>
<PlaceholderReference Include="Tc2_TcpIp">
<DefaultResolution>Tc2_TcpIp, * (Beckhoff Automation GmbH)</DefaultResolution>
<Namespace>Tc2_TcpIp</Namespace>
</PlaceholderReference>
<PlaceholderReference Include="Tc3_Module"> <PlaceholderReference Include="Tc3_Module">
<DefaultResolution>Tc3_Module, * (Beckhoff Automation GmbH)</DefaultResolution> <DefaultResolution>Tc3_Module, * (Beckhoff Automation GmbH)</DefaultResolution>
<Namespace>Tc3_Module</Namespace> <Namespace>Tc3_Module</Namespace>
@@ -84,6 +180,17 @@
<d n="SubKeys" t="Hashtable" /> <d n="SubKeys" t="Hashtable" />
<d n="Values" t="Hashtable" /> <d n="Values" t="Hashtable" />
</o> </o>
<v>{246001F4-279D-43AC-B241-948EB31120E1}</v>
<o>
<v n="Name">"{246001F4-279D-43AC-B241-948EB31120E1}"</v>
<d n="SubKeys" t="Hashtable" />
<d n="Values" t="Hashtable" ckt="String" cvt="Boolean">
<v>GeneralPropertySupport</v>
<v>True</v>
<v>UnicodeStrings</v>
<v>False</v>
</d>
</o>
<v>{29BD8D0C-3586-4548-BB48-497B9A01693F}</v> <v>{29BD8D0C-3586-4548-BB48-497B9A01693F}</v>
<o> <o>
<v n="Name">"{29BD8D0C-3586-4548-BB48-497B9A01693F}"</v> <v n="Name">"{29BD8D0C-3586-4548-BB48-497B9A01693F}"</v>

View File

@@ -0,0 +1,397 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<Visu Name="Visualization" Id="{c7f813ad-d496-46cf-913b-a7293dcf426c}">
<XmlArchive>
<Data>
<o xml:space="preserve" t="VisualObject">
<n n="LastVisuLanguageModelEntry" />
<v n="UniqueIdGenerator">"12"</v>
<o n="VisualElemList" t="VisualElemList">
<l n="VisualElementList" t="VisualElemCollection" cet="GenericVisualElem">
<o>
<a n="ConfiguredComplexInputs" et="ComplexInput" />
<l n="Elements" t="ArrayList" />
<n n="VisualElementDescription" />
<o n="VisualElemMemberList" t="VisualElemMemberList">
<l n="VisualElemMemberList" t="VisualElemMemberCollection" cet="VisualElemMember">
<o>
<v n="Id">571893170L</v>
<v n="Value">"Rest"</v>
</o>
<o>
<v n="Id">1931512087L</v>
<v n="Value">"TOGGLE"</v>
</o>
<o>
<v n="Id">300685745L</v>
<v n="Value">false</v>
</o>
<o>
<v n="Id">2812299069L</v>
<v n="Value">4294967295U</v>
</o>
<o>
<v n="Id">494569607L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">3719097617L</v>
<v n="Value">0</v>
</o>
<o>
<v n="Id">1649127785L</v>
<v n="Value">134</v>
</o>
<o>
<v n="Id">357335551L</v>
<v n="Value">150</v>
</o>
<o>
<v n="Id">2422045748L</v>
<v n="Value">229</v>
</o>
<o>
<v n="Id">2134141914L</v>
<v n="Value">177</v>
</o>
<o>
<v n="Id">4062784938L</v>
<v n="Value">"Element-Switch-PushSwitch-Gray"</v>
</o>
<o>
<v n="Id">550940142L</v>
<v n="Value">248</v>
</o>
<o>
<v n="Id">1473355128L</v>
<v n="Value">238</v>
</o>
<o>
<v n="Id">493260384L</v>
<v n="Value">4294967295U</v>
</o>
<o>
<v n="Id">135947015L</v>
<v n="Value">4278190080U</v>
</o>
<o>
<v n="Id">2678395525L</v>
<v n="Value">1U</v>
</o>
<o>
<v n="Id">2340015797L</v>
<v n="Value">"HCENTER"</v>
</o>
<o>
<v n="Id">2565699834L</v>
<v n="Value">"VCENTER"</v>
</o>
<o>
<v n="Id">296037572L</v>
<v n="Value">""</v>
</o>
<o>
<v n="Id">390574330L</v>
<v n="Value">""</v>
</o>
<o>
<v n="Id">2597686782L</v>
<v n="Value">false</v>
</o>
<o>
<v n="Id">743958181L</v>
<v n="Value">"GVL_SCADA.xErrAck"</v>
</o>
<o>
<v n="Id">3438453433L</v>
<v n="Value">"134"</v>
</o>
</l>
</o>
<v n="VisualElementName">"PushSwitch"</v>
<v n="VisualElementTypeName">"VisuFbElemPushSwitch"</v>
<v n="VisualElementIsRectangle">true</v>
<v n="VisualElementIdentifier">"GenElemInst_1"</v>
<n n="VisualElementOfflinePaintCommands" />
<n n="VisualElementFrameInformation" />
<d n="VisualElementInputActions" t="Hashtable" />
<v n="VisualElementIdentification">{a9fe58e2-2923-486b-83ae-c30f51fc53bc}</v>
<v n="VisualElementOwningObjectGuid">{c7f813ad-d496-46cf-913b-a7293dcf426c}</v>
<a n="LMGuids" et="Guid" />
<d n="SubElements" t="Hashtable" />
<v n="VisualElementId">0</v>
<l n="UserManagementAccessRights" t="ArrayList" />
<v n="AnimationDuration">"0"</v>
<v n="BringToForeground">""</v>
<v n="ElementVersion" t="Byte">1</v>
<n n="TabOrder" />
</o>
</l>
<v n="BackgroundBitmapId">""</v>
<v n="BackgroundColor">16777215</v>
<o n="Background" t="BackgroundSettings">
<n n="BgGradient" />
<n n="BgNamedColor" />
<v n="BgBmpId">""</v>
<v n="BgUseBmp">false</v>
<v n="BgColor">false</v>
<v n="BgUseColor">16777215</v>
<v n="BgUseGradient">false</v>
</o>
<v n="AllElementsHaveDynamicVisibility">false</v>
</o>
<o n="GeneratedLMMDescriptions" t="GeneratedLanguageModelEntriesData">
<o n="GeneratedVisuFbDescription" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>AreAllElementsHidden</v>
<v>a725eb54-6600-588a-9f13-869630ee3e7e</v>
<v>ContainsPoint</v>
<v>ab15b219-793c-4da0-bd07-15f4b9559413</v>
<v>Destruct</v>
<v>3ba10444-2f83-4df5-aa26-6b77c6d0abf6</v>
<v>ElementInfo</v>
<v>4fc818ce-9e66-4929-a86a-b286e246a68d</v>
<v>FB_Exit</v>
<v>77528b4c-c8c4-4f11-a991-6b9fe9e1a3d3</v>
<v>FB_Reinit</v>
<v>1d8a778c-cc51-47a7-a51d-3d9eb8125008</v>
<v>GetCallerNamespace</v>
<v>43a88302-5fea-54cf-b14f-4c85099970ea</v>
<v>GetClientData</v>
<v>cadc6a04-3260-4217-ae88-86a7d1978d67</v>
<v>GetDialogInterface</v>
<v>061c17d4-c1fd-4666-8fbf-29cb1f99ec8e</v>
<v>GetDialogInterfaceSize</v>
<v>e770c9e8-0fe5-4727-bbf9-e82c4cdde02f</v>
<v>GetElementArray</v>
<v>3453a92d-9e41-45ae-b333-a6fd05ecc05f</v>
<v>GetElementIdArray</v>
<v>01969ee2-370e-4639-8b9e-fcc1b5861ed4</v>
<v>GetElementName</v>
<v>5549a8ef-993d-5c8c-a19e-92b606693b43</v>
<v>GetInitializeVersion</v>
<v>87415d8b-3769-4476-ba47-778b9c7d9830</v>
<v>GetInstance</v>
<v>cb71613d-a9c0-4c65-af5b-0bf0cc1cc4a2</v>
<v>GetLocalUsergroup</v>
<v>a16842f4-6e61-487d-a546-e447ff985552</v>
<v>GetName</v>
<v>d299c55d-4dc9-4b9e-b9d7-81bcb628be24</v>
<v>GetNamespace</v>
<v>a00a8d02-710d-4837-b03e-8ac7f3cea203</v>
<v>GetResult</v>
<v>dd0c5ce2-d1c3-42c0-9d55-94b7f2ebfe7f</v>
<v>GetSize</v>
<v>aa96c3a1-2662-437e-b163-bed0cd701cbc</v>
<v>GetSurroundingRect</v>
<v>8a93fd36-40b4-408c-a8fa-f2094bc31dc1</v>
<v>GetTabOrderIdArray</v>
<v>22aa349f-aa1a-5a1e-b8d1-fa8b274978fc</v>
<v>GetText</v>
<v>26faf652-11c0-4434-b399-bdd6c186874b</v>
<v>GetTextProperties</v>
<v>76184248-eb5e-40ac-82e0-1b69e783afd2</v>
<v>GetTooltip</v>
<v>a0e4cc76-8d43-462d-b328-fda892a64d2d</v>
<v>GetTranslator</v>
<v>409c1071-0ab9-46d9-9cb0-f29de52cf28e</v>
<v>GetUpdateRects</v>
<v>df55534a-e997-42c4-9622-83f8a02d6684</v>
<v>HandleInput</v>
<v>0612a83a-5c13-462f-b5b0-94227cd1d4b4</v>
<v>HasInputAccess</v>
<v>27cfb0a9-611b-41e2-a755-37c98bd69211</v>
<v>HasInputAccessIntern</v>
<v>63cc92a5-408f-57e0-87e9-b2033b2b12ef</v>
<v>HasVisibilityAccess</v>
<v>f11fc703-d33e-412b-9764-588a000bede4</v>
<v>HasVisibilityAccessIntern</v>
<v>12b8a5d1-0920-5c63-846f-df1f593d4075</v>
<v>Initialize</v>
<v>28e2b0d4-7ee2-4256-bcf3-9b3d048989d7</v>
<v>IsAntialiasingInactive</v>
<v>2a637b19-2d31-4c64-a5a2-a50b98a54f46</v>
<v>Paint</v>
<v>359a8f28-6be2-40a9-b444-a14b59912a36</v>
<v>SetClientData</v>
<v>84598ba9-869d-4d41-af71-685b89f2e17f</v>
<v>SetContainerSize</v>
<v>d54f5458-6e96-5c6d-9516-413a21c534b5</v>
<v>SetDialogInterface</v>
<v>f991bc46-9bfd-4b50-87ce-4a160df90f4e</v>
<v>SetResult</v>
<v>31cc2a76-5ca2-40be-9c81-4ce91ffc8ceb</v>
<v>SetStaticState</v>
<v>a71f3a37-1f69-40b3-8810-7fbb9613ce2e</v>
<v>SetVisuFlagsInternal</v>
<v>c86bc3f1-839c-44f7-a86e-8c31b378e47d</v>
<v>Update</v>
<v>86c23628-283c-4cd6-9a8e-4fe213a72b01</v>
</d>
<d n="FbProperties" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>__getContainer</v>
<v>acc951a7-0e09-4639-b624-f1acf9de535a</v>
<v>__getVisu</v>
<v>699a8058-a362-4d94-b2bf-8d83cc15d117</v>
</d>
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{c7f813ad-d496-46cf-913b-a7293dcf426c}</v>
</o>
<v n="GeneratedGlobalVisuVarsGuid">{c3710736-16ea-4749-a94b-9a7cef0d94d9}</v>
<v n="GeneratedGlobalTheVisuVarlistGuid">{848dba92-ad40-4262-a0e6-c897149b4673}</v>
<v n="GeneratedGlobalVisuConstants">{4542b91b-c173-423b-a2e4-55fe1dcd4438}</v>
<d n="GeneratedAllElementsEntries" t="Hashtable" />
<o n="VisuRegDesc" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>FB_Exit</v>
<v>d076fe0e-7df0-431f-b3a9-736edf093162</v>
<v>FB_Init</v>
<v>28fb6bb3-47cc-457f-82ec-a2ee72ded81b</v>
<v>FB_Reinit</v>
<v>ee89efe4-78d3-4256-a7b0-564fc198a1d2</v>
</d>
<d n="FbProperties" t="CaseInsensitiveHashtable" />
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{cb986f24-4b1d-4e53-8e13-066c36701683}</v>
</o>
<v n="VisuRegisterGvl">{833946e1-5ee1-443a-a77a-490182229e46}</v>
<n n="SettingsPou" />
<n n="MemManPou" />
<o n="InputsPou" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>abstrGetDefaultCursor</v>
<v>f71cf66f-d4e9-4025-b35a-6cbbe1d389fb</v>
<v>ExecuteDialogClosed</v>
<v>e1501d0a-e558-483c-a9a5-a357640775bf</v>
<v>ExecuteKeyDown</v>
<v>4950c656-5a4e-4a24-a04d-c68e5fa80bc4</v>
<v>ExecuteKeyUp</v>
<v>cf6a31c1-32e2-4079-9359-06f71f51ac03</v>
<v>ExecuteLooseCapture</v>
<v>81003bd8-702b-46c6-8576-55b4cb3d6508</v>
<v>ExecuteMouseClick</v>
<v>38ba0b28-4b12-4493-9592-7295d83cee3f</v>
<v>ExecuteMouseDblClick</v>
<v>d096b23e-54a3-422f-b2ad-5cab7f415d68</v>
<v>ExecuteMouseDown</v>
<v>fd2a0ed4-cfa0-4c81-ac3a-154c476085bf</v>
<v>ExecuteMouseEnter</v>
<v>3eb196da-dbad-4a33-b599-c92ac619c961</v>
<v>ExecuteMouseLeave</v>
<v>4d127b58-1b2d-4421-a7a2-590f2ab04eb8</v>
<v>ExecuteMouseMove</v>
<v>ecfc61c4-6132-4304-b084-52c22b62b091</v>
<v>ExecuteMouseUp</v>
<v>97842947-afb6-4377-a1e0-497a4fad1b3a</v>
<v>ExecuteValueChanged</v>
<v>5134f3a0-6cfd-4802-91ba-4bc2ef3ec14f</v>
<v>GetElementInfo</v>
<v>18b304d4-0e71-4837-a644-83684312ccc5</v>
<v>Initialize</v>
<v>8f927b74-8f36-4a18-b313-e9657129d589</v>
</d>
<d n="FbProperties" t="CaseInsensitiveHashtable" />
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{c5c7227b-e260-46ca-81aa-66e288af04d0}</v>
</o>
<v n="DialogDut">{f68c5176-54d2-4538-b87e-5801589c0396}</v>
</o>
<v n="LastUsedIdForIdentifier">3</v>
<o n="TextDocument" t="TextDocument">
<v n="TextBlobForSerialisation">"VAR_IN_OUT
END_VAR"</v>
<n n="LineInfoPersistence" />
</o>
<v n="GvlCreated">false</v>
<n n="LMEntry" />
<v n="ProfileCompatibilityId">4140216668L</v>
<v n="LMVerMinor">0</v>
<v n="LMVerMajor">1</v>
<o n="Hotkeys" t="HotkeyConfiguration">
<v n="IdMin">481037385728L</v>
<v n="IdMax">549755813887L</v>
<v n="Id">481037385728L</v>
<v n="IdMask">549754765312L</v>
<v n="IdStep">1048576L</v>
<l2 n="Inputs" />
</o>
<o n="VisuSizeManager" t="VisualObjectSizeManager">
<d2 n="Size" ckt="Int32" cvt="VisualObjectSize">
<v>0</v>
<o>
<v n="Width">363</v>
<v n="Height">327</v>
</o>
<v>1</v>
<o>
<v n="Width">363</v>
<v n="Height">327</v>
</o>
<v>2</v>
<o>
<v n="Width">363</v>
<v n="Height">327</v>
</o>
</d2>
<v n="Version">2</v>
</o>
<n n="FrameInterfaceDataModel" />
</o>
</Data>
<TypeList>
<Type n="ArrayList">System.Collections.ArrayList</Type>
<Type n="BackgroundSettings">{1038f12c-dd4b-4f96-87a3-a350fe8f3552}</Type>
<Type n="Boolean">System.Boolean</Type>
<Type n="Byte">System.Byte</Type>
<Type n="CaseInsensitiveHashtable">{7df88604-7ac5-4e36-91c4-55e4fdad3e68}</Type>
<Type n="ComplexInput">{1de566f6-72a7-494c-9353-9a418172c96e}</Type>
<Type n="GeneratedLanguageModelEntriesData">{703465dc-4679-4ff2-bcc3-c57d0a204da3}</Type>
<Type n="GenericFbDescription">{40d6dd8d-dfd0-493a-8e29-c9a35e1e6539}</Type>
<Type n="GenericVisualElem">{f86c2928-8614-4cca-824b-e819ac4d58c4}</Type>
<Type n="Guid">System.Guid</Type>
<Type n="Hashtable">System.Collections.Hashtable</Type>
<Type n="HotkeyConfiguration">{6b108d46-58af-4e41-a3f4-174d8f160cc4}</Type>
<Type n="Int32">System.Int32</Type>
<Type n="Int64">System.Int64</Type>
<Type n="String">System.String</Type>
<Type n="TextDocument">{f3878285-8e4f-490b-bb1b-9acbb7eb04db}</Type>
<Type n="UInt32">System.UInt32</Type>
<Type n="VisualElemCollection">{ef9d0b20-c96e-48db-b361-2ded4063150e}</Type>
<Type n="VisualElemList">{f285c9a3-7019-446b-b98c-ccec3a0af8fa}</Type>
<Type n="VisualElemMember">{c694e3a2-5c0b-4177-ab35-cb06bd5a6a02}</Type>
<Type n="VisualElemMemberCollection">{a4b83bea-3742-489c-9fe8-d96d68dba7ab}</Type>
<Type n="VisualElemMemberList">{17e26cd1-bb9b-47fe-a3d5-18fcd63b9c96}</Type>
<Type n="VisualObject">{f18bec89-9fef-401d-9953-2f11739a6808}</Type>
<Type n="VisualObjectSize">{6ad3e88f-aee2-4766-a7ea-a8790037ef51}</Type>
<Type n="VisualObjectSizeManager">{5f612b0e-b404-455f-8177-27864e9f5332}</Type>
</TypeList>
</XmlArchive>
<ObjectProperties>
<XmlArchive>
<Data>
<o xml:space="preserve" t="VisualProperty">
<v n="VisuUsageType">0</v>
<v n="SizeX">1024</v>
<v n="SizeY">768</v>
<v n="IsStartVisu">false</v>
<v n="VisuSizeMode" t="VisualVisuSizeMode">AutoDetect</v>
<v n="Internal">false</v>
<v n="DialogIsOpaque">false</v>
<v n="DialogIsOpaqueIsSet">false</v>
<v n="UseParentSizeProperties">true</v>
<n n="ToolboxCategory" />
<n n="ToolboxImageId" />
<v n="IsCustomCategory">false</v>
</o>
</Data>
<TypeList>
<Type n="Boolean">System.Boolean</Type>
<Type n="Int32">System.Int32</Type>
<Type n="VisualProperty">{477d844b-9b2a-407e-90a4-d36fd6dde2fc}</Type>
<Type n="VisualVisuSizeMode">{34718b76-91f6-43de-8c65-b77e0b1ee621}</Type>
</TypeList>
</XmlArchive>
</ObjectProperties>
</Visu>
</TcPlcObject>

View File

@@ -0,0 +1,593 @@
<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1">
<VisuManager Name="Visualization Manager" Id="{99e7ae05-3563-4b1c-a1fe-76e9619e2955}">
<XmlArchive>
<Data>
<o xml:space="preserve" t="VisualManagerObject">
<v n="UseUnicodeStrings" t="UnicodeSupport">Undefined</v>
<v n="UseOverlay" t="OverlaySupport">Undefined</v>
<o n="ViewSettings" t="VisualManagerViewSettings">
<n n="StartVisu" />
<v n="StartVisu33">"Visualization"</v>
<v n="OpenTargetvisu">false</v>
<v n="BestFit">false</v>
<v n="ClientSizeMode" t="VisualClientSizeMode">AutoDetect</v>
<v n="ClientSizeX">2000</v>
<v n="ClientSizeY">2000</v>
<v n="ExtendedSettings">false</v>
<v n="PaintBufferSize">50000</v>
<v n="MemorybufferSize">400000</v>
<v n="VisuInternal">false</v>
<v n="CurrentVisuGlobal">false</v>
<v n="FileTransferMode">true</v>
<v n="VisuStyle">"Default, 3.1.9.0 (Beckhoff Automation GmbH)"</v>
<v n="MaxNumOfClients">100</v>
<n n="Language" />
<v n="NumpadDialog">"VisuDialogs.Numpad"</v>
<v n="KeypadDialog">"VisuDialogs.Keypad"</v>
<v n="InputWithLimitsDialog">"VisuDialogs.TextinputWithLimits"</v>
<v n="UseInputWithLimits">false</v>
<v n="TouchHandlingActive">false</v>
<v n="TouchScrollbarsActive">false</v>
<v n="SemiTransparentDrawingActive">true</v>
<v n="UpdateColorvariablesAfterActivationDone">true</v>
<v n="TransferSvgAndConvertedImages">false</v>
<v n="LoginDialog">"VisuUserManagement.VUM_Login"</v>
<v n="ChangePasswordDialog">"VisuUserManagement.VUM_ChangePassword"</v>
<v n="ChangeConfigDialog">"VisuUserManagement.VUM_UserManagementWide"</v>
<v n="GuidShowChangePasswordDialogFunction">{00000000-0000-0000-0000-000000000000}</v>
<v n="GuidShowChangeConfigDialogFunction">{00000000-0000-0000-0000-000000000000}</v>
<v n="UseStandardKeyboardHandling">true</v>
<v n="PaintDeactiveElementsGrayedOut">true</v>
<o n="GlobalOpenNumpadKeypadSettings" t="VisualManagerGlobalOpenNumpadKeypadSettings">
<v n="GlobalOpenNumpadKeypadType" t="GlobalOpenNumpadKeypadType">OpenCentered</v>
<n n="PositionX" />
<n n="PositionY" />
</o>
<v n="UseBackgroundForModalDialog">true</v>
<v n="AnimationDuration">200</v>
<v n="ConvertImages">false</v>
<v n="ConversionType">""</v>
<v n="BackImage">""</v>
<v n="BackImageTop">0</v>
<v n="BackImageLeft">0</v>
<v n="BackImageBot">0</v>
<v n="BackImageRight">0</v>
<v n="BackImageWarning">true</v>
<v n="BackImageLimit">true</v>
<v n="ResponsiveVisualizationSize">true</v>
</o>
<o n="RegisterDesc" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>FB_Exit</v>
<v>3b10f3d4-3918-46ea-8c63-adbf43a8a336</v>
<v>FB_Init</v>
<v>9df8d017-b198-465e-8e55-f69841ae986f</v>
<v>FB_Reinit</v>
<v>359af835-44f2-492f-a13c-f66f07fb0cd2</v>
</d>
<d n="FbProperties" t="CaseInsensitiveHashtable" />
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{f71ed0ce-2435-440b-9610-dc8f551135be}</v>
</o>
<o n="TargetProperties" t="VisualizationTargetProperties">
<o n="AvailableKeys" t="DeviceBasedHotkeysProvider">
<v n="Modifiers">7</v>
<v n="DevType">4096</v>
<v n="DevId">"1002 0004"</v>
<v n="DevVersion">"1.0.0.8"</v>
<v n="BaseProvider">{cb73a13e-6ccc-4bc6-8859-f5aa98bb116b}</v>
<l n="Keys" t="ArrayList" cet="DeviceBasedHotkeyItem">
<o>
<v n="FromBase">true</v>
<v n="KeyCode">48</v>
<v n="CanonicalName">"0"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">49</v>
<v n="CanonicalName">"1"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">50</v>
<v n="CanonicalName">"2"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">51</v>
<v n="CanonicalName">"3"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">52</v>
<v n="CanonicalName">"4"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">53</v>
<v n="CanonicalName">"5"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">54</v>
<v n="CanonicalName">"6"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">55</v>
<v n="CanonicalName">"7"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">56</v>
<v n="CanonicalName">"8"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">57</v>
<v n="CanonicalName">"9"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">65</v>
<v n="CanonicalName">"A"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">107</v>
<v n="CanonicalName">"ADDITION"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">66</v>
<v n="CanonicalName">"B"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">8</v>
<v n="CanonicalName">"BACKSPACE"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">67</v>
<v n="CanonicalName">"C"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">110</v>
<v n="CanonicalName">"COMMA"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">68</v>
<v n="CanonicalName">"D"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">46</v>
<v n="CanonicalName">"DELETE"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">111</v>
<v n="CanonicalName">"DIVIDE"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">40</v>
<v n="CanonicalName">"DOWN"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">69</v>
<v n="CanonicalName">"E"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">35</v>
<v n="CanonicalName">"END"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">27</v>
<v n="CanonicalName">"ESCAPE"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">70</v>
<v n="CanonicalName">"F"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">112</v>
<v n="CanonicalName">"F1"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">121</v>
<v n="CanonicalName">"F10"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">122</v>
<v n="CanonicalName">"F11"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">123</v>
<v n="CanonicalName">"F12"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">113</v>
<v n="CanonicalName">"F2"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">114</v>
<v n="CanonicalName">"F3"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">115</v>
<v n="CanonicalName">"F4"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">116</v>
<v n="CanonicalName">"F5"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">117</v>
<v n="CanonicalName">"F6"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">118</v>
<v n="CanonicalName">"F7"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">119</v>
<v n="CanonicalName">"F8"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">120</v>
<v n="CanonicalName">"F9"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">71</v>
<v n="CanonicalName">"G"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">72</v>
<v n="CanonicalName">"H"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">36</v>
<v n="CanonicalName">"HOME"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">73</v>
<v n="CanonicalName">"I"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">45</v>
<v n="CanonicalName">"INSERT"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">74</v>
<v n="CanonicalName">"J"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">75</v>
<v n="CanonicalName">"K"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">76</v>
<v n="CanonicalName">"L"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">37</v>
<v n="CanonicalName">"LEFT"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">77</v>
<v n="CanonicalName">"M"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">106</v>
<v n="CanonicalName">"MULTIPLY"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">78</v>
<v n="CanonicalName">"N"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">96</v>
<v n="CanonicalName">"NUM0"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">97</v>
<v n="CanonicalName">"NUM1"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">98</v>
<v n="CanonicalName">"NUM2"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">99</v>
<v n="CanonicalName">"NUM3"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">100</v>
<v n="CanonicalName">"NUM4"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">101</v>
<v n="CanonicalName">"NUM5"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">102</v>
<v n="CanonicalName">"NUM6"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">103</v>
<v n="CanonicalName">"NUM7"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">104</v>
<v n="CanonicalName">"NUM8"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">105</v>
<v n="CanonicalName">"NUM9"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">79</v>
<v n="CanonicalName">"O"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">80</v>
<v n="CanonicalName">"P"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">19</v>
<v n="CanonicalName">"PAUSE"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">42</v>
<v n="CanonicalName">"PRINT"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">81</v>
<v n="CanonicalName">"Q"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">82</v>
<v n="CanonicalName">"R"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">13</v>
<v n="CanonicalName">"RETURN_KEY"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">39</v>
<v n="CanonicalName">"RIGHT"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">83</v>
<v n="CanonicalName">"S"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">32</v>
<v n="CanonicalName">"SPACE"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">109</v>
<v n="CanonicalName">"SUBTRACT"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">84</v>
<v n="CanonicalName">"T"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">9</v>
<v n="CanonicalName">"TAB"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">85</v>
<v n="CanonicalName">"U"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">38</v>
<v n="CanonicalName">"UP"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">86</v>
<v n="CanonicalName">"V"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">87</v>
<v n="CanonicalName">"W"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">88</v>
<v n="CanonicalName">"X"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">89</v>
<v n="CanonicalName">"Y"</v>
</o>
<o>
<v n="FromBase">true</v>
<v n="KeyCode">90</v>
<v n="CanonicalName">"Z"</v>
</o>
</l>
</o>
</o>
<o n="ConfiguredHotkeys" t="HotkeyConfiguration">
<v n="IdMin">481037385728L</v>
<v n="IdMax">549755813887L</v>
<v n="Id">481037385728L</v>
<v n="IdMask">549754765312L</v>
<v n="IdStep">1048576L</v>
<l2 n="Inputs" />
</o>
<o n="DefInpHandlerGuids" t="GenericFbDescription">
<d n="FbMethods" t="CaseInsensitiveHashtable" ckt="String" cvt="Guid">
<v>abstrGetDefaultCursor</v>
<v>cc321d7f-2f37-4b53-bce2-a9bd974a8681</v>
<v>ExecuteDialogClosed</v>
<v>3bcbc0ce-81cd-4911-8914-44188c177411</v>
<v>ExecuteKeyDown</v>
<v>fc479f4f-e138-4aaa-b6d6-697590969705</v>
<v>ExecuteKeyUp</v>
<v>156daac4-6443-4540-9838-4cc30c6e8821</v>
<v>ExecuteLooseCapture</v>
<v>0626945c-155a-452e-99e1-bc92ccdce784</v>
<v>ExecuteMouseClick</v>
<v>1b7b169c-830d-4535-a164-ba6f8d1bf165</v>
<v>ExecuteMouseDblClick</v>
<v>b1f03962-2989-414f-a5bb-812a75d56c3b</v>
<v>ExecuteMouseDown</v>
<v>028a586e-2455-441f-8a8d-00d127345483</v>
<v>ExecuteMouseEnter</v>
<v>e2b598c7-7a39-486e-9017-323dac257c30</v>
<v>ExecuteMouseLeave</v>
<v>4718b2dc-1651-40fd-9361-ef7d890a938b</v>
<v>ExecuteMouseMove</v>
<v>03e1fd3f-3a59-4354-a91c-81e5a0428954</v>
<v>ExecuteMouseUp</v>
<v>047888b5-4c63-4490-9a8c-d7184e3c26ce</v>
<v>ExecuteValueChanged</v>
<v>d7dc51a1-595c-4e58-86b1-6d8e24a5fb22</v>
<v>FB_Exit</v>
<v>e93ac5c5-9b6e-4ca7-8d80-5d9bcb7edb63</v>
<v>FB_Init</v>
<v>fbbfef41-6677-40ae-8e1d-435b00930c8d</v>
<v>FB_Reinit</v>
<v>341a7933-16e7-4fa3-a7a8-6e3d2f3c148c</v>
<v>GetElementInfo</v>
<v>0ca14ef6-3126-4c73-9f23-beb3d2c12e33</v>
<v>Init</v>
<v>ebbdcf07-6ef1-440f-91b4-94e62b85242c</v>
<v>Initialize</v>
<v>d51c9946-c924-4a41-9a42-6e79c7023378</v>
</d>
<d n="FbProperties" t="CaseInsensitiveHashtable" />
<v n="FbName">"NotImportant"</v>
<v n="FbGuid">{5b10dcd0-a6a2-4394-8d7e-fc1a897d49c8}</v>
</o>
<n n="InstantiationStorage" />
<n n="VisuUserManagement" />
<v n="UseLocalUserMgmt">true</v>
<v n="UseUserMgmtInPlc">true</v>
<n n="RemoteUserMgmtPath" />
<n n="FontsConfig" />
<n n="FontDownloadConfig" />
<n n="VisuInitializationCode" />
<n n="FontSettings" />
<v n="GuidVisuSettingsPou">{7b398c37-b8f2-44fa-92e6-cd0ac4432e05}</v>
<v n="GuidVisuSettingsPouInit">{b7af0301-7d32-4dec-821a-a12a7de2afe2}</v>
<v n="GuidVisuSettingsPouReInit">{b114b7fc-7845-4db6-b717-6ef08132d0b3}</v>
<v n="GuidVisuSettingsPouBoolMethod">{f6e93e7a-f026-47f1-9ad6-9ad85a537957}</v>
<v n="GuidVisuSettingsPouDIntMethod">{05d2daea-b06a-4275-855d-b7edf1e9a29d}</v>
<v n="GuidVisuSettingsPouStringMethod">{699620e8-1df5-45c4-8a2d-7f8ef1544fd5}</v>
<v n="GuidVisuSettingsPouReservedMethod">{db37476f-f0fb-4fa9-8a33-33f55c6ee3e6}</v>
<v n="GuidMemManInitPou">{37f8aba3-8d02-4b60-b71d-909d434464e0}</v>
<v n="GuidMemManInitPouInit">{db09399b-72ff-43d1-8c3a-e078e68c9297}</v>
<v n="GuidMemManInitPouReInit">{6864ac69-a0df-43f7-bcd5-4b9c7dc64b57}</v>
<v n="GuidStartVisuInitPou">{406a9ed5-2529-4fd5-9ad9-3ae887dda070}</v>
<v n="GuidStartVisuInitPouInit">{a4b8d7f7-933b-40f3-9d72-9fe1ba44d7ed}</v>
<v n="GuidStartVisuInitPouReInit">{129b0553-f73f-4a63-a791-589dde777670}</v>
<v n="GuidVisuGVL0">{9003aa7f-2db3-4a80-9478-ff56da7ce674}</v>
<v n="GuidVisuGVL1">{c5aeb04a-4e37-466e-adb7-6e1defc764ae}</v>
<v n="GuidVisuGVL2">{94a93fd8-eed7-425b-b4e7-d49ab50e79cc}</v>
<v n="GuidVisuGVL_3">{bdccb31c-de80-4c34-8469-8d8f1b48172b}</v>
<v n="GuidReservedPou">{b8e3eef6-1f94-489e-bb87-7da6cde40255}</v>
<v n="GuidVisuGVL3">{ac528ee4-49b0-4bb2-8b8d-0881d5ce92e3}</v>
<v n="GuidReservedPouInit">{cb123efe-50d6-4c66-b719-5a9abc7b78be}</v>
<v n="GuidVisuGVL4">{925e8f6d-a925-4ccb-9007-f4aa925f657b}</v>
<v n="GuidVisuGVL5">{0e5d2904-0f49-4ca0-873b-e30003524293}</v>
<v n="GuidLicenseGVL">{469f8113-0911-47c3-8ac7-302e738f100d}</v>
<v n="GuidGlobalClientManagerGVL">{c8fed093-737d-41c7-b196-fe237ae7ae11}</v>
<v n="GuidVisuUserMgmtInitPou">{be83b5db-04d7-49b4-95f4-135b529cdb8c}</v>
<v n="GuidVisuUserMgmtInitPouInit">{63abefd0-8bc2-4603-9bff-e90b8c47d6fe}</v>
<v n="GuidBeforeCompileCommonGVL">{c256e1fd-f3b9-4401-8b5a-a0bb6db81a94}</v>
<v n="GuidVisuGVL6">{14dbfc96-fd74-4e8a-afb4-01575aa81bde}</v>
<v n="GuidReservedPouMethod1">{e291df9c-0ae4-40f9-aaf6-c7479d74a4b2}</v>
<v n="GuidReservedPouReInit">{d9548cb4-7280-404a-a145-5a8f38a9e691}</v>
<v n="GuidReservedPouMethod0">{d5955983-4cbf-4785-9324-6a3ae3b62362}</v>
<v n="GuidReservedPouMethod2">{b155374e-21a8-4e99-83be-933da117fdc3}</v>
</o>
</Data>
<TypeList>
<Type n="ArrayList">System.Collections.ArrayList</Type>
<Type n="Boolean">System.Boolean</Type>
<Type n="CaseInsensitiveHashtable">{7df88604-7ac5-4e36-91c4-55e4fdad3e68}</Type>
<Type n="DeviceBasedHotkeyItem">{11a86981-4b02-4f98-b432-96e385cb41b7}</Type>
<Type n="DeviceBasedHotkeysProvider">{c91fc5aa-1e38-43b2-9a05-c52cc5d7f5b6}</Type>
<Type n="GenericFbDescription">{40d6dd8d-dfd0-493a-8e29-c9a35e1e6539}</Type>
<Type n="GlobalOpenNumpadKeypadType">{550f8ee0-c42e-42f0-b253-4fadf0c12bdf}</Type>
<Type n="Guid">System.Guid</Type>
<Type n="HotkeyConfiguration">{6b108d46-58af-4e41-a3f4-174d8f160cc4}</Type>
<Type n="Int32">System.Int32</Type>
<Type n="Int64">System.Int64</Type>
<Type n="OverlaySupport">{05125339-dc8c-4673-b403-e21bec548370}</Type>
<Type n="String">System.String</Type>
<Type n="UnicodeSupport">{19611221-ebd3-4607-86d2-9822fbe84c30}</Type>
<Type n="VisualClientSizeMode">{c37fe731-4f69-4d98-82fe-4f9aefbe200d}</Type>
<Type n="VisualizationTargetProperties">{997fedbb-1888-4256-b61c-2933d8056bfd}</Type>
<Type n="VisualManagerGlobalOpenNumpadKeypadSettings">{422ed780-41e9-4352-8132-b322b16154c1}</Type>
<Type n="VisualManagerObject">{4d3fdb8f-ab50-4c35-9d3a-d4bb9bb9a628}</Type>
<Type n="VisualManagerViewSettings">{ec9b2ec6-92a2-4856-be72-7866fb274c64}</Type>
</TypeList>
</XmlArchive>
</VisuManager>
</TcPlcObject>

Binary file not shown.

View File

@@ -0,0 +1,11 @@
# Beckhoff.TwinCAT.HMI.Controls
This package provides a set of controls for use in TwinCAT HMI applications.
## Usage
Add `Beckhoff.TwinCAT.HMI.Controls` to your TwinCAT HMI project to access various UI controls such as buttons, spinboxes, and more.
## Documentation
For detailed usage and configuration, refer to the [Beckhoff TwinCAT HMI documentation](https://infosys.beckhoff.de/content/1033/te2000_tc3_hmi_engineering/index.html).

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,37 @@
/** Theme independent style for Accordion helper */
tchmi-accordion {
position: relative;
}
tchmi-accordion > tchmi-accordion-item {
display: block;
}
tchmi-accordion > tchmi-accordion-item > tchmi-accordion-content {
position: relative;
display: block;
overflow: hidden;
max-height: 0;
transition: max-height 0.4s ease;
}
tchmi-accordion > tchmi-accordion-item > tchmi-accordion-header {
display: flex;
position: relative;
padding: 0 16px;
height: 56px;
align-items: center;
}
tchmi-accordion > tchmi-accordion-item.has-content > tchmi-accordion-header {
padding: 0 64px 0 16px;
}
tchmi-accordion > tchmi-accordion-item > tchmi-accordion-header > tchmi-accordion-expander {
position: absolute;
height: 100%;
width: 56px;
right: 0;
top: 0;
}

View File

@@ -0,0 +1,293 @@
// Compatibility file for non-module typescript compiles without adjustments.
// Use the following line for modern code (needs adjustments to tsconfig.json#configOptions/paths)
// import { TcHmiControl } from "Beckhoff.TwinCAT.HMI.Framework/index.esm.js";
// ***************************************************************************
/**
* How to use
* HTML example
<tchmi-accordion>
<tchmi-accordion-item name="Item1" open>
<tchmi-accordion-header>Header 1</tchmi-accordion-header>
<tchmi-accordion-content">Content 1</tchmi-accordion-content>
</tchmi-accordion-item>
<tchmi-accordion-item name="Item2">
<tchmi-accordion-header>Header 2</tchmi-accordion-header>
<tchmi-accordion-content>Content 1</tchmi-accordion-content>
</tchmi-accordion-item>
<tchmi-accordion-item name="Item3">
<tchmi-accordion-header>Header Only</tchmi-accordion-header>
</tchmi-accordion-item>
</tchmi-accordion>
**/
export declare class Accordion extends HTMLElement {
/**
* Map of all valid AccordionItems including content and header
* Key is the name of the AccordionItem
*/
private __items;
/** When set to true only one opened item per level is allowed */
private __autoCollapse;
/**
* Contains all functions which are fired on item change.
*/
private __itemClickedCallbacks;
/**
* Contains all functions which are fired on item down is changed.
*/
private __itemDownChangedCallbacks;
private __itemContentOpenedCallbacks;
private __itemContentClosedCallbacks;
constructor();
/**
* Is called when the element is connected to the DOM.
*/
connectedCallback(): void;
/**
* Is called when the element is disconnected from the DOM.
*/
disconnectedCallback(): void;
/**
* Adds an item to the accordion.
*/
addItem(name: string, header: HTMLElement, content?: HTMLElement): AccordionItem | null;
/**
* Removes an item from the accordion.
*/
removeItemByName(name: string): void;
protected __headerClickedCallback(clickedItem: AccordionItem): void;
protected __headerExpandedCallback(expandedItem: AccordionItem): void;
protected __headerDownChangedCallback(changedItem: AccordionItem): void;
protected __itemContentOpenedCallback(changedItem: AccordionItem): void;
protected __itemContentClosedCallback(changedItem: AccordionItem): void;
/**
* Add callback, which is fired when an item is clicked.
* @param cb Function which is fired when an item is clicked.
*/
addItemClickedCallback(cb: (item: AccordionItem) => void): void;
/**
* Remove callback, which is fired when an item is clicked.
* @param cb Function which is fired when an item is clicked.
*/
removeItemClickedCallback(cb: (item: AccordionItem) => void): void;
/**
* Add callback, which is fired when the down class is added or removed from an item.
* @param cb Function which is fired when the down class is added or removed from an item.
*/
addItemDownChangedCallback(cb: (changedItem: AccordionItem) => void): void;
/**
* Remove callback, which is fired when the down class is added or removed from an item.
* @param cb Function which is fired when the down class is added or removed from an item.
*/
removeItemDownChangedCallback(cb: (changedItem: AccordionItem) => void): void;
/**
* Add callback, which is fired when the content is opened.
* @param cb Function which is fired when the content is opened.
*/
addItemContentOpenedCallback(cb: (changedItem: AccordionItem) => void): void;
/**
* Remove callback, which is fired when the content is opened.
* @param cb Function which is fired when the content is opened.
*/
removeItemContentOpenedCallback(cb: (changedItem: AccordionItem) => void): void;
/**
* Add callback, which is fired when the content is closed.
* @param cb Function which is fired when the content is closed.
*/
addItemContentClosedCallback(cb: (changedItem: AccordionItem) => void): void;
/**
* Remove callback, which is fired when the content is closed.
* @param cb Function which is fired when the content is closed.
*/
removeItemContentClosedCallback(cb: (changedItem: AccordionItem) => void): void;
/**
* Function to set the auto collapse value.
*/
setAutoCollapse(value: boolean): void;
/**
* Returns the current auto collapse value
* @returns
*/
getAutoCollapse(): boolean;
/**
* Returns the items of the accordion.
*/
getItems(): Map<string, AccordionItem>;
/**
* Returns a specific item by its name.
*/
getItemByName(name: string): AccordionItem | undefined;
}
declare const _Accordion: typeof Accordion;
type tAccordion = Accordion;
declare global {
namespace TcHmi.Controls.Helpers.TcHmiAccordion {
let Accordion: typeof _Accordion;
type Accordion = tAccordion;
}
}
export {};
export declare class AccordionItem extends HTMLElement {
#private;
private __name?;
private __header?;
private __content?;
private __disabled;
private __isOpen;
private __expanderElement;
/** Defines if an open item is closed on a normal click */
private __closeWhenClicked;
private __destroyOnDisconnect;
private __headerDestroyFunctions;
private __pointerUpDestroyer;
private __headerPointerLeaveDestroyer;
private __headerPointerEnterDestroyer;
private __expanderPointerLeaveDestroyer;
private __expanderPointerEnterDestroyer;
/**
* Contains all functions which are fired on item change.
*/
private __headerClickedCallbacks;
private __headerDownChangedCallbacks;
private __headerExpandedCallbacks;
private __contentOpenedCallbacks;
private __contentClosedCallbacks;
constructor();
/**
* Is called when the element is connected to the DOM.
*/
connectedCallback(): void;
/**
* Is called when the element is disconnected from the DOM.
*/
disconnectedCallback(): void;
/**
* Callback function for a click on the header.
*/
protected __onHeaderClick(): void;
/**
* Callback function for a click on the expander.
*/
protected __onExpanderClick(event: Event): void;
/**
* Disables or enables the item.
*/
disable(disable: boolean): void;
/**
* Returns true if the element is disabled.
*/
isDisabled(): boolean;
/**
* Function to set a header element.
*/
setHeader(header: HTMLElement | undefined): void;
/**
* Return the current header element.
*/
getHeader(): HTMLElement | undefined;
/**
* Function to set the content element.
*/
setContent(content: HTMLElement | undefined): void;
/**
* Returns the content element.
*/
getContent(): HTMLElement | undefined;
/**
* Function to set the name of the item.
*/
setName(name: string): void;
/**
* Returns the name of the Item.
*/
getName(): string | undefined;
/**
* Opens or closes the content of the item.
*/
protected __changeState(): void;
/**
* Opens the item.
* @param animationList A list of animation functions. Store the animations of parent elements on a recuresive use of the function. Can be set to "null" if the animation should be skipped.
*/
open(animationList?: (() => void)[] | null): void;
/**
* Closes the element and its child elements.
*/
close(): void;
/**
* Returns the if the element is opened.
*/
IsOpen(): boolean;
/**
* Defines if an open item is closed on a normal click.
*/
setCloseWhenClicked(valueNew: boolean): void;
getCloseWhenClicked(): boolean;
/**
* Add callback, which is fired when the header is clicked.
* @param cb Function which is fired when the header is clicked.
*/
addHeaderClickedCallback(cb: (clickedItem: AccordionItem) => void): void;
/**
* Remove callback, which is fired when the header is clicked.
* @param cb Function which is fired when the header is clicked.
*/
removeHeaderClickedCallback(cb: (clickedItem: AccordionItem) => void): void;
/**
* Add callback, which is fired when the down class is added or removed from the header.
* @param cb Function which is fired when the down class is added or removed from the header.
*/
addHeaderDownChangedCallback(cb: (changedItem: AccordionItem) => void): void;
/**
* Remove callback, which is fired when the down class is added or removed from the header.
* @param cb Function which is fired when the down class is added or removed from the header.
*/
removeHeaderDownChangedCallback(cb: (changedItem: AccordionItem) => void): void;
/**
* Add callback, which is fired when the header is expanded.
* @param cb Function which is fired when the header is expanded.
*/
addHeaderExpandedCallback(cb: (changedItem: AccordionItem) => void): void;
/**
* Remove callback, which is fired when the header is expanded.
* @param cb Function which is fired when the header is expanded.
*/
removeHeaderExpandedCallback(cb: (changedItem: AccordionItem) => void): void;
/**
* Add callback, which is fired when the content is opened.
* @param cb Function which is fired when the content is opened.
*/
addContentOpenedCallback(cb: (changedItem: AccordionItem) => void): void;
/**
* Remove callback, which is fired when the content is opened.
* @param cb Function which is fired when the content is opened.
*/
removeContentOpenedCallback(cb: (changedItem: AccordionItem) => void): void;
/**
* Add callback, which is fired when the content is closed.
* @param cb Function which is fired when the content is closed.
*/
addContentClosedCallback(cb: (changedItem: AccordionItem) => void): void;
/**
* Remove callback, which is fired when the content is closed.
* @param cb Function which is fired when the content is closed.
*/
removeContentClosedCallback(cb: (changedItem: AccordionItem) => void): void;
protected __onPointerUp(): void;
protected __onPointerDown(): void;
protected __onPointerLeave(): void;
protected __onPointerEnter(): void;
protected __onExpanderPointerDown(): void;
protected __onExpanderPointerLeave(): void;
protected __onExpanderPointerEnter(): void;
}
declare const _AccordionItem: typeof AccordionItem;
type tAccordionItem = AccordionItem;
declare global {
namespace TcHmi.Controls.Helpers.TcHmiAccordion {
let AccordionItem: typeof _AccordionItem;
type AccordionItem = tAccordionItem;
}
}
export {};

View File

@@ -0,0 +1,107 @@
/** Theme dependent style for Accordion helper: Base-Dark */
tchmi-accordion {
--tchmi-item-header-color: var(--tchmi-foreground-color-1);
--tchmi-item-header-hover-color: var(--tchmi-foreground-color-1);
--tchmi-item-header-pressed-color: var(--tchmi-foreground-color-3);
--tchmi-item-header-background: var(--tchmi-background-color-2);
--tchmi-item-header-hover-background: var(--tchmi-background-color-3);
--tchmi-item-header-pressed-background: var(--tchmi-background-color-3);
--tchmi-item-header-border: var(--tchmi-foreground-color-2);
}
tchmi-accordion > tchmi-accordion-item {
margin-top: 8px;
}
tchmi-accordion > tchmi-accordion-item:first-child {
margin-top: 0;
}
tchmi-accordion > tchmi-accordion-item > tchmi-accordion-header {
background: var(--tchmi-item-header-background);
color: var(--tchmi-item-header-color);
font-weight: bold;
font-size: 15px;
border: 1px solid var(--tchmi-item-header-border);
transition: box-shadow 0.2s ease;
}
tchmi-accordion > tchmi-accordion-item:not(.disabled) > tchmi-accordion-header:hover {
background: var(--tchmi-item-header-hover-background);
color: var(--tchmi-item-header-hover-color);
text-decoration: underline;
}
tchmi-accordion > tchmi-accordion-item[open] > tchmi-accordion-header:before {
content: '';
position: absolute;
width: 18px;
height: 18px;
background: var(--tchmi-item-header-background);
left: 20px;
bottom: -10px;
transform: rotate(45deg);
border-right: 1px solid var(--tchmi-item-header-border);
border-bottom: 1px solid var(--tchmi-item-header-border);
z-index: 1;
border-radius: 100% 0 0 0;
}
tchmi-accordion > tchmi-accordion-item[open] > tchmi-accordion-header:hover:before {
background: var(--tchmi-item-header-hover-background);
color: var(--tchmi-item-header-hover-color);
}
tchmi-accordion > tchmi-accordion-item.has-content > tchmi-accordion-header > tchmi-accordion-expander:after {
content: '';
position: absolute;
width: 12px;
height: 12px;
right: 20px;
top: 22px;
transform: rotate(-45deg);
border-right: 1px solid var(--tchmi-item-header-color);
border-bottom: 1px solid var(--tchmi-item-header-color);
transition: transform 0.4s ease;
z-index: 1;
}
tchmi-accordion > tchmi-accordion-item.has-content[open] > tchmi-accordion-header > tchmi-accordion-expander:after {
transform: rotate(45deg);
}
tchmi-accordion
> tchmi-accordion-item.has-content:not(.disabled)
> tchmi-accordion-header
> tchmi-accordion-expander:hover:after {
border-right: 2px solid var(--tchmi-item-header-hover-color);
border-bottom: 2px solid var(--tchmi-item-header-hover-color);
}
tchmi-accordion > tchmi-accordion-item[open] > tchmi-accordion-content {
border: 1px solid var(--tchmi-item-header-border);
border-top: none;
}
tchmi-accordion > tchmi-accordion-item > tchmi-accordion-header.down {
box-shadow: var(--tchmi-button-shadow-pressed);
color: var(--tchmi-item-header-pressed-color);
background: var(--tchmi-item-header-pressed-background);
}
tchmi-accordion > tchmi-accordion-item.has-content > tchmi-accordion-header > tchmi-accordion-expander.down:after {
border-right: 1px solid var(--tchmi-item-header-pressed-color);
border-bottom: 1px solid var(--tchmi-item-header-pressed-color);
}
tchmi-accordion > tchmi-accordion-item.disabled > tchmi-accordion-header::after {
position: absolute;
content: '';
height: 100%;
width: 100%;
background-color: var(--tchmi-disabled-color);
z-index: 100;
margin: 0;
left: 0;
top: 0;
}

View File

@@ -0,0 +1,106 @@
/** Theme dependent style for Accordion helper: Base */
tchmi-accordion {
--tchmi-item-header-color: var(--tchmi-foreground-color-1);
--tchmi-item-header-hover-color: var(--tchmi-foreground-color-1);
--tchmi-item-header-pressed-color: var(--tchmi-foreground-color-3);
--tchmi-item-header-background: var(--tchmi-background-color-2);
--tchmi-item-header-hover-background: var(--tchmi-background-color-3);
--tchmi-item-header-pressed-background: var(--tchmi-background-color-3);
--tchmi-item-header-border: var(--tchmi-foreground-color-3);
}
tchmi-accordion > tchmi-accordion-item {
margin-top: 8px;
}
tchmi-accordion > tchmi-accordion-item:first-child {
margin-top: 0;
}
tchmi-accordion > tchmi-accordion-item > tchmi-accordion-header {
background: var(--tchmi-item-header-background);
color: var(--tchmi-item-header-color);
font-weight: bold;
font-size: 15px;
border: 1px solid var(--tchmi-item-header-border);
transition: box-shadow 0.2s ease;
}
tchmi-accordion > tchmi-accordion-item:not(.disabled) > tchmi-accordion-header:hover {
background: var(--tchmi-item-header-hover-background);
color: var(--tchmi-item-header-hover-color);
}
tchmi-accordion > tchmi-accordion-item[open] > tchmi-accordion-header:before {
content: '';
position: absolute;
width: 18px;
height: 18px;
background: var(--tchmi-item-header-background);
left: 20px;
bottom: -10px;
transform: rotate(45deg);
border-right: 1px solid var(--tchmi-item-header-border);
border-bottom: 1px solid var(--tchmi-item-header-border);
z-index: 1;
border-radius: 100% 0 0 0;
}
tchmi-accordion > tchmi-accordion-item[open] > tchmi-accordion-header:hover:before {
background: var(--tchmi-item-header-hover-background);
color: var(--tchmi-item-header-hover-color);
}
tchmi-accordion > tchmi-accordion-item.has-content > tchmi-accordion-header > tchmi-accordion-expander:after {
content: '';
position: absolute;
width: 12px;
height: 12px;
right: 20px;
top: 22px;
transform: rotate(-45deg);
border-right: 1px solid var(--tchmi-item-header-color);
border-bottom: 1px solid var(--tchmi-item-header-color);
transition: transform 0.4s ease;
z-index: 1;
}
tchmi-accordion > tchmi-accordion-item.has-content[open] > tchmi-accordion-header > tchmi-accordion-expander:after {
transform: rotate(45deg);
}
tchmi-accordion
> tchmi-accordion-item.has-content:not(.disabled)
> tchmi-accordion-header
> tchmi-accordion-expander:hover:after {
border-right: 2px solid var(--tchmi-item-header-hover-color);
border-bottom: 2px solid var(--tchmi-item-header-hover-color);
}
tchmi-accordion > tchmi-accordion-item[open] > tchmi-accordion-content {
border: 1px solid var(--tchmi-item-header-border);
border-top: none;
}
tchmi-accordion > tchmi-accordion-item > tchmi-accordion-header.down {
box-shadow: var(--tchmi-button-shadow-pressed);
color: var(--tchmi-item-header-pressed-color);
background: var(--tchmi-item-header-pressed-background);
}
tchmi-accordion > tchmi-accordion-item.has-content > tchmi-accordion-header > tchmi-accordion-expander.down:after {
border-right: 1px solid var(--tchmi-item-header-pressed-color);
border-bottom: 1px solid var(--tchmi-item-header-pressed-color);
}
tchmi-accordion > tchmi-accordion-item.disabled > tchmi-accordion-header::after {
position: absolute;
content: '';
height: 100%;
width: 100%;
background-color: var(--tchmi-disabled-color);
z-index: 100;
margin: 0;
left: 0;
top: 0;
}

View File

@@ -0,0 +1,8 @@
{
"$schema": "../../../TwinCAT-HMI-Common/JsonSchemas/Language.Schema.json",
"locale": "de",
"localizedText": {
"ButtonApprove": "Bestätigen",
"CheckboxDontShowAgain": "Nicht erneut anzeigen"
}
}

View File

@@ -0,0 +1,8 @@
{
"$schema": "../../../TwinCAT-HMI-Common/JsonSchemas/Language.Schema.json",
"locale": "en",
"localizedText": {
"ButtonApprove": "Approve",
"CheckboxDontShowAgain": "Don't show again"
}
}

View File

@@ -0,0 +1,71 @@
.TcHmi_Controls_Helpers_Banner {
display: flex;
flex-direction: column;
box-sizing: border-box;
overflow: hidden;
position: absolute;
height: auto;
top: 0;
margin: 10%;
max-width: 80%;
padding: 16px;
}
.TcHmi_Controls_Helpers_Banner-content
.TcHmi_Controls_System_TcHmiControl:not(.TcHmi_Controls_System_TcHmiControl .TcHmi_Controls_System_TcHmiControl) {
position: relative;
}
.TcHmi_Controls_Helpers_Banner-header-container {
position: relative;
display: grid;
grid-template-columns: auto min-content;
margin-top: 0px;
min-height: 26px;
padding: 5px 10px;
}
.TcHmi_Controls_Helpers_Banner-header-container > h1 {
margin: 0;
white-space: nowrap;
overflow: hidden;
margin-left: 40px;
}
.TcHmi_Controls_Helpers_Banner-content {
position: relative;
flex-grow: 1;
flex-shrink: 1;
overflow: auto;
padding: 10px;
}
.TcHmi_Controls_Helpers_Banner-label-block {
display: block;
white-space: pre;
margin-bottom: 2px;
}
.TcHmi_Controls_Helpers_Banner-label-block:not(:first-child) {
margin-top: 10px;
}
.TcHmi_Controls_Helpers_Banner-footer {
position: relative;
display: grid;
grid-template-columns: auto 60px;
}
.TcHmi_Controls_Helpers_Banner-footer:not(:empty) {
padding-left: 10px;
padding-right: 10px;
padding-bottom: 10px;
}
.TcHmi_Controls_Helpers_Banner-footer .TcHmi_Controls_System_TcHmiControl {
position: relative;
}
.TcHmi_Controls_Helpers_Banner-footer .TcHmi_Controls_System_TcHmiControl:not(:first-child) {
margin-left: 5px;
}

View File

@@ -0,0 +1,125 @@
// Compatibility file for non-module typescript compiles without adjustments.
// Use the following line for modern code (needs adjustments to tsconfig.json#configOptions/paths)
// import { TcHmiControl } from "Beckhoff.TwinCAT.HMI.Framework/index.esm.js";
// ***************************************************************************
export declare class ApprovalBanner extends Banner {
protected readonly __parentControl?: (TcHmiControl.Control | null) | undefined;
protected __approveButton: TcHmiButton;
protected __repetitionCheckbox: TcHmiCheckbox;
protected __storage: TcHmi.LocalStorage<{
dontShowAgain: boolean;
}> | undefined;
/**
* Creates a new Banner instance.
* @param targetElement The element the banner is placed over.
* @param storageId The storage id to rember if the banner should not be displayed anymore
* @param __parentControl The control which owns the Banner.
*/
constructor(targetElement: HTMLElement, storageId: string | null, __parentControl?: (TcHmiControl.Control | null) | undefined);
show(): void;
/**
* Handler for the onPressed event of the OK button.
*/
protected __onApproved(): void;
/**
* Sets texts which can either be localizable or static.
*/
setTexts(texts: Partial<ApprovalBanner.LocalizableTexts>): void;
}
export declare namespace ApprovalBanner {
interface LocalizableTexts extends Banner.LocalizableTexts {
buttonText: TcHmi.Localizable;
checkboxText: TcHmi.Localizable;
}
}
import _ApprovalBanner = ApprovalBanner;
declare global {
namespace TcHmi.Controls.Helpers {
let ApprovalBanner: typeof _ApprovalBanner;
type ApprovalBanner = _ApprovalBanner;
namespace ApprovalBanner {
type LocalizableTexts = _ApprovalBanner.LocalizableTexts;
}
}
}
export declare class Banner {
#private;
protected readonly __parentControl?: (TcHmi.Controls.System.TcHmiControl | null) | undefined;
protected __name: string;
protected __targetElement: HTMLElement;
protected __element: HTMLDivElement;
protected __elementHeaderContainer: HTMLDivElement;
protected __elementHeader: HTMLHeadingElement;
protected __elementContent: HTMLDivElement;
protected __elementFooter: HTMLDivElement;
/** Controls in this array will be destroyed automatically when the popup is destroyed */
protected __childControls: TcHmi.Controls.System.TcHmiControl[];
/** Destroyers in this array will be called automatically when the popup is destroyed */
protected __destroyers: TcHmi.DestroyFunction[];
protected __isShowing: boolean;
protected __localizationSymbols: Map<string, {
symbol: TcHmi.Symbol<string>;
destroyWatch: TcHmi.DestroyFunction;
}>;
protected readonly __className = "TcHmi_Controls_Helpers_Banner";
/**
* Creates a new Banner instance.
* @param targetElement The element the banner is placed over.
* @param __parentControl The control which owns the Banner.
*/
constructor(targetElement: HTMLElement, __parentControl?: (TcHmi.Controls.System.TcHmiControl | null) | undefined);
/**
* Gets a value indicating if the banner is currently shown to the user.
*/
isShowing(): boolean;
/**
* Shows the banner.
*/
show(): void;
/**
* Hides the banner.
*/
hide(): void;
/**
* Destroys the banner and all its controls.
* @param force If true, child controls will be removed from the parent control before destruction, to ensure destruction in case of keepAlive === true.
*/
destroy(force?: boolean): void;
/**
* Watch the given symbol and call the onChange callback every time it changes with the resolved and formatted symbol value.
* @param name The name for this symbol. Must be unique across all inheritance layers and further calls for the same localization must use the same name.
* @param localization The localization to watch.
* @param onChange The callback that is called with the localized and formatted text as a parameter.
*/
protected __watchLocalization(name: string, localization: TcHmi.FormattedLocalizable, onChange: (localizedText: string) => void): void;
/**
* Destroys the localization watch with the given name, if it exists.
* @param name The name that was used with __watchLoclalization to start watching the symbol.
*/
protected __unwatchLocalization(name: string): void;
/**
* Sets texts which can either be localizable or static.
*/
setTexts(texts: Partial<Banner.LocalizableTexts>): void;
}
export declare namespace Banner {
interface LocalizableTexts {
headerText: TcHmi.Localizable;
contentText: TcHmi.Localizable;
}
}
import _Banner = Banner;
declare global {
namespace TcHmi.Controls.Helpers {
let Banner: typeof _Banner;
type Banner = _Banner;
namespace Banner {
type LocalizableTexts = _Banner.LocalizableTexts;
}
}
}

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="pfade" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="80px" height="80px" viewBox="0 0 80 80" enable-background="new 0 0 80 80" xml:space="preserve">
<path fill="none" stroke="#1A171B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M44.532,59.876"/>
<g>
<polygon fill="none" stroke="#F39200" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
64.432,61.593 13.874,61.593 39.243,18.619 "/>
<g>
<path fill="#F39200" d="M39.153,54.644c-1.387,0-2.455-1.126-2.455-2.424c0-1.387,1.068-2.457,2.455-2.457
c1.357,0,2.427,1.098,2.427,2.457C41.58,53.518,40.482,54.644,39.153,54.644z M40.569,46.071
c-0.059,0.548-0.174,0.522-0.606,0.522h-1.646c-0.434,0-0.55,0.026-0.606-0.522l-0.637-11.27
c-0.028-0.491-0.028-0.533-0.028-0.703c0-0.379,0.287-0.505,0.519-0.505h3.091c0.231,0,0.577,0.14,0.577,0.516
c0,0.172,0,0.129-0.028,0.621L40.569,46.071z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,10 @@
/** TcHmiBanners theme dependend style for theme: Base-Dark */
.TcHmi_Controls_Helpers_Banner {
background: #1b1b1f;
box-shadow: rgba(89, 89, 89, 0.75) 0 1px 10px 2px;
}
.TcHmi_Controls_Helpers_Banner-header-container {
background: url(Images/warning.svg) no-repeat 0% 0%;
background-size: 48px;
}

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="pfade" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="80px" height="80px" viewBox="0 0 80 80" enable-background="new 0 0 80 80" xml:space="preserve">
<path fill="none" stroke="#1A171B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M44.532,59.876"/>
<g>
<polygon fill="none" stroke="#F39200" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
64.432,61.593 13.874,61.593 39.243,18.619 "/>
<g>
<path fill="#F39200" d="M39.153,54.644c-1.387,0-2.455-1.126-2.455-2.424c0-1.387,1.068-2.457,2.455-2.457
c1.357,0,2.427,1.098,2.427,2.457C41.58,53.518,40.482,54.644,39.153,54.644z M40.569,46.071
c-0.059,0.548-0.174,0.522-0.606,0.522h-1.646c-0.434,0-0.55,0.026-0.606-0.522l-0.637-11.27
c-0.028-0.491-0.028-0.533-0.028-0.703c0-0.379,0.287-0.505,0.519-0.505h3.091c0.231,0,0.577,0.14,0.577,0.516
c0,0.172,0,0.129-0.028,0.621L40.569,46.071z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,10 @@
/** TcHmiBanners theme dependend style for theme: Base */
.TcHmi_Controls_Helpers_Banner {
background: #f6f7f8;
box-shadow: rgba(0, 0, 0, 0.2) 0 1px 10px 2px;
}
.TcHmi_Controls_Helpers_Banner-header-container {
background: url(Images/warning.svg) no-repeat 0% 0%;
background-size: 48px;
}

View File

@@ -0,0 +1,51 @@
declare abstract class CallbackCollectionBase<C extends (...args: any[]) => any> {
protected __callbacks: Set<C>;
/**
* Adds a callback.
* @param callback The callback to add.
*/
add(callback: C): DestroyFunction;
/**
* Removes the callback.
* @param callback The callback to remove.
*/
remove(callback: C): void;
/**
* Removes all callbacks.
*/
clear(): void;
/**
* Returns a frozen object containig the add and remove methods. Useful for exposing these methods to the public
* without also exposing the trigger method.
*/
getManipulators(): Readonly<{
add: (callback: C) => DestroyFunction;
remove: (callback: C) => void;
}>;
}
/**
* A collection of callbacks.
*/
export declare class CallbackCollection<C extends (...args: any[]) => any> extends CallbackCollectionBase<C> {
/**
* Calls all registered callbacks with the provided arguments.
* @param args The parametes for the callback invocations.
*/
trigger(...args: Parameters<C>): PromiseSettledResult<ReturnType<C>>[];
}
/**
* A collection of asynchronous callbacks.
*/
export declare class AsyncCallbackCollection<C extends (...args: any[]) => Promise<any>> extends CallbackCollectionBase<C> {
/**
* Calls all registered callbacks with the provided arguments.
* @param args The parametes for the callback invocations.
*/
trigger(...args: Parameters<C>): Promise<PromiseSettledResult<Awaited<ReturnType<C>>>[]>;
}
/**
* A function that removes the callback from the collection when called.
*/
type DestroyFunction = () => void;
export {};
//# sourceMappingURL=CallbackCollection.d.ts.map

View File

@@ -0,0 +1 @@
class CallbackCollectionBase{__callbacks=new Set;add(callback){return this.__callbacks.add(callback),()=>this.remove(callback)}remove(callback){this.__callbacks.delete(callback)}clear(){this.__callbacks.clear()}getManipulators(){return Object.freeze({add:this.add.bind(this),remove:this.remove.bind(this)})}}export class CallbackCollection extends CallbackCollectionBase{trigger(...args){const result=[];for(const callback of this.__callbacks)try{result.push({status:"fulfilled",value:callback(...args)})}catch(error){result.push({status:"rejected",reason:error})}return result}}export class AsyncCallbackCollection extends CallbackCollectionBase{trigger(...args){let promises=[];for(const callback of this.__callbacks)try{promises.push(callback(...args))}catch(error){promises.push(Promise.reject(error instanceof Error?error:new Error("string"==typeof error?error:void 0)))}return Promise.allSettled(promises)}}

View File

@@ -0,0 +1,215 @@
tchmi-content-tabs {
display: block;
border-radius: inherit;
}
/* tab links*/
tchmi-content-tabs tchmi-tab-links {
width: 100%;
box-sizing: border-box;
display: flex;
flex-direction: row;
justify-content: space-between;
flex-wrap: nowrap;
height: 50px;
border-radius: inherit;
overflow: auto;
scrollbar-width: none;
}
@supports not (scrollbar-width: none) {
tchmi-content-tabs tchmi-tab-links::-webkit-scrollbar {
display: none;
}
}
tchmi-content-tabs tchmi-tab-links tchmi-tab-link,
tchmi-content-tabs tchmi-tab-links tchmi-tab-links-overflow,
tchmi-content-tabs-dropdown tchmi-tab-link {
box-sizing: border-box;
display: grid;
position: relative;
justify-content: center;
align-items: center;
height: 100%;
width: 100%;
border: none;
cursor: pointer;
margin: 0;
padding: 5px 10px;
white-space: nowrap;
}
tchmi-content-tabs tchmi-tab-links tchmi-tab-links-overflow {
padding: 0 32px 0 0;
display: flex;
}
tchmi-content-tabs[tab-alignment='Left'] > tchmi-tab-links > tchmi-tab-link,
tchmi-content-tabs[tab-alignment='Right'] > tchmi-tab-links > tchmi-tab-link,
tchmi-content-tabs[tab-alignment='Left'] > tchmi-tab-links > tchmi-tab-links-overflow,
tchmi-content-tabs[tab-alignment='Right'] > tchmi-tab-links > tchmi-tab-links-overflow {
overflow: hidden;
white-space: pre-wrap;
}
tchmi-content-tabs tchmi-tab-links tchmi-tab-links-overflow.hidden {
display: none;
}
tchmi-content-tabs tchmi-tab-links > tchmi-tab-link[active] {
cursor: default;
}
tchmi-content-tabs tchmi-tab-links > tchmi-tab-link[disabled] {
cursor: default;
}
/* tab contents */
tchmi-content-tabs > tchmi-tab-contents {
display: block;
box-sizing: border-box;
position: relative;
justify-content: center;
padding: 12px 20px 20px 20px;
}
tchmi-content-tabs tchmi-tab-contents[use-max-content] {
display: grid;
grid-template-columns: 1fr;
}
tchmi-content-tabs tchmi-tab-contents tchmi-tab-content {
box-sizing: border-box;
justify-content: center;
flex: 1;
}
tchmi-content-tabs tchmi-tab-contents[use-max-content] > tchmi-tab-content {
grid-row-start: 1;
grid-column-start: 1;
}
tchmi-content-tabs tchmi-tab-contents:not([use-max-content]) > tchmi-tab-content:not([active]) {
display: none;
}
tchmi-content-tabs tchmi-tab-contents[use-max-content] > tchmi-tab-content:not([active]) {
opacity: 0;
pointer-events: none;
}
/* tab alignment */
tchmi-content-tabs[tab-alignment='Left'] {
display: flex;
flex-direction: row;
}
tchmi-content-tabs[tab-alignment='Left'] > tchmi-tab-links,
tchmi-content-tabs[tab-alignment='Right'] > tchmi-tab-links {
flex-direction: column;
width: 200px;
height: 100%;
}
tchmi-content-tabs[tab-alignment='Right'] {
display: flex;
flex-direction: row-reverse;
}
tchmi-content-tabs[tab-alignment='Bottom'] {
display: flex;
flex-direction: column-reverse;
}
tchmi-content-tabs-dropdown {
display: flex;
position: absolute;
flex-direction: column;
width: 200px;
overflow: hidden auto;
}
tchmi-content-tabs-dropdown tchmi-tab-link {
height: 50px;
min-height: 50px;
width: 200px;
}
tchmi-content-tabs[tab-alignment='Top'] > tchmi-tab-links > tchmi-tab-link:first-child {
border-top-left-radius: inherit;
}
tchmi-content-tabs[tab-alignment='Top'] > tchmi-tab-links > tchmi-tab-link:last-child,
tchmi-content-tabs[tab-alignment='Top'] > tchmi-tab-links > tchmi-tab-links-overflow:last-child {
border-top-right-radius: inherit;
}
tchmi-content-tabs[tab-alignment='Left'] > tchmi-tab-links > tchmi-tab-link:first-child {
border-top-left-radius: inherit;
}
tchmi-content-tabs[tab-alignment='Left'] > tchmi-tab-links > tchmi-tab-link:last-child,
tchmi-content-tabs[tab-alignment='Left'] > tchmi-tab-links > tchmi-tab-links-overflow:last-child {
border-bottom-left-radius: inherit;
}
tchmi-content-tabs[tab-alignment='Right'] > tchmi-tab-links > tchmi-tab-link:first-child {
border-top-right-radius: inherit;
}
tchmi-content-tabs[tab-alignment='Right'] > tchmi-tab-links > tchmi-tab-link:last-child,
tchmi-content-tabs[tab-alignment='Right'] > tchmi-tab-links > tchmi-tab-links-overflow:last-child {
border-bottom-right-radius: inherit;
}
tchmi-content-tabs[tab-alignment='Bottom'] > tchmi-tab-links > tchmi-tab-link:first-child {
border-bottom-left-radius: inherit;
}
tchmi-content-tabs[tab-alignment='Bottom'] > tchmi-tab-links > tchmi-tab-link:last-child,
tchmi-content-tabs[tab-alignment='Bottom'] > tchmi-tab-links > tchmi-tab-links-overflow:last-child {
border-bottom-right-radius: inherit;
}
tchmi-content-tabs[tab-alignment='Top'] > tchmi-tab-contents {
border-bottom-left-radius: inherit;
border-bottom-right-radius: inherit;
}
tchmi-content-tabs[tab-alignment='Left'] > tchmi-tab-contents {
border-top-right-radius: inherit;
border-bottom-right-radius: inherit;
}
tchmi-content-tabs[tab-alignment='Right'] > tchmi-tab-contents {
border-top-left-radius: inherit;
border-bottom-left-radius: inherit;
}
tchmi-content-tabs[tab-alignment='Bottom'] > tchmi-tab-contents {
border-top-right-radius: inherit;
border-top-left-radius: inherit;
}
tchmi-content-tabs[disabled]::after {
content: '';
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
/*background-color: rgba(255, 255, 255, 0.5); color is defined in theme css*/
z-index: 100;
}
tchmi-content-tabs tchmi-tab-links.scroll {
width: calc(100% - 60px);
position: relative;
left: 30px;
}
tchmi-content-tabs .tchmi-scroll-shadow-host {
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
}

View File

@@ -0,0 +1,224 @@
// Compatibility file for non-module typescript compiles without adjustments.
// Use the following line for modern code (needs adjustments to tsconfig.json#configOptions/paths)
// import { TcHmiControl } from "Beckhoff.TwinCAT.HMI.Framework/index.esm.js";
// ***************************************************************************
/**
* How to use
* HTML example
<tchmi-content-tabs>
<tchmi-tab-links>
<tchmi-tab-link active ref="Tab2">Header 2</tchmi-tab-link>
<tchmi-tab-link ref="Tab1">Header 1</tchmi-tab-link>
</tchmi-tab-links>
<tchmi-tab-contents>
<tchmi-tab-content name="Tab1">Content 1</tchmi-tab-content>
<tchmi-tab-content active name="Tab2">Content 2</tchmi-tab-content>
<tchmi-tab-content name="Unused"></tchmi-tab-content>
</tchmi-tab-contents>
</tchmi-content-tabs>
**/
export declare class ContentTabs extends HTMLElement {
#private;
constructor();
connectedCallback(): void;
disconnectedCallback(): void;
/**
* Add ContentTab.
* @param name Name of ContentTab to add.
* @param link HTMLElement to click on to open the content of the tab.
* @param content HTMLElement which is shown when tab is active.
*/
addContentTab(name: string, link: HTMLElement, content: HTMLElement): void;
/**
* Arrange displayed tabs and the tab link overflow element.
*/
arrangeTabLinks(): void;
/**
* Remove ContentTab.
* @param name Name of ContentTab to remove.
*/
removeContentTab(name: string): void;
/**
* Opens a tab by its name.
* @param nameOfTabToOpen Name of tab which should be opened. If no tab name is specified, the active tab is selected. If this is also not known, the first tab is opened.
*/
openTab(nameOfTabToOpen?: string): void;
/**
* Show dropdown element in top most layer
*/
private __openDropdown;
/**
* Resize the dropdown element
*/
private __resizeDropdown;
/**
* Get tab by name.
* @param tabName name of tab which should be returned.
**/
getTab(tabName: string): _ContentTabs.Tab | undefined;
/**
* Returns name of active tab.
*/
get activeTab(): string | undefined;
/**
* Enable a tab. Tab is enabled by default.
* @param tabName name of tab which should be enabled.
**/
enableTab(tabName: string): void;
/**
* Disable a tab. Tab is enabled by default.
* @param tabName name of tab which should be disabled.
**/
disableTab(tabName: string): void;
/**
* Disables the content tabs element.
*/
disableContentTabs(): void;
/**
* Enables the content tabs element.
*/
enableContentTabs(): void;
/**
* Add the attribute 'use-max-content' to the TabContentsWrapper
* to prevent the size of the container from jumping back and forth
* => content container always assumes the size of the largest content
*/
useMaxContent(): void;
/**
* Remove the attribute 'use-max-content' from the TabContentsWrapper
* that prevent the size of the container from jumping back and forth
* => this means that the content container only ever has the size of the visible content
**/
doNotUseMaxContent(): void;
/**
* Add callback, which is fired on tab change.
* @param cb Function which is fired on tab change. Parameter contains the name of the new tab.
*/
addTabChangeCallback(cb: (newTabName: string) => void): void;
/**
* Remove callback, which is fired on tab change.
* @param cb Function which is fired on tab change. Parameter contains the name of the new tab.
*/
removeTabChangeCallback(cb: (newTabName: string) => void): void;
/**
* Set the alignment of the tabs.
* @param tabAlignment the new alignment of the tabs.
*/
setTabAlignment(tabAlignment: ContentTabs.TabAlignment): void;
private __getTabLinksWrapper;
private __getTabContentsWrapper;
private __appendTabLinksOverflowElement;
private __removeTabLinksOverflowElement;
private __updateLinksAndContents;
/**
* Add openTab event on all tchmi-tab-link.
*/
private __addEvents;
/**
* Remove openTab event on all tchmi-tab-link.
*/
private __removeEvents;
/**
* Finds the first active tab, marks all other tabs as inactive and
* synchronizes the active attribute between link and content.
*/
private __findActiveTab;
/**
* Sets the tabOverflowMode value.
* @param valueNew The new value for tabOverflowMode.
*/
setTabOverflowMode(valueNew: ContentTabs.TabOverflowMode): void;
/**
* Processes the tab overflow mode.
*/
private __processTabOverflowMode;
/**
* Event handler for scroll events on the tab links wrapper.
*/
private __onScroll;
/**
* Enables or disables the scroll elements based on the current scroll position.
* @returns {void}
*/
private __enableOrDisableScrollElements;
/**
* Event handler for scrolling the tab links wrapper to the right.
*/
private __onScrollElementRight;
/**
* Event handler for scrolling the tab links wrapper to the left.
*/
private __onScrollElementLeft;
/**
* Event handler for the wheel event on the tab links wrapper.
* This allows horizontal scrolling using vertical wheel movements.
* @param e The WheelEvent object.
*/
private __onWheel;
/**
* Creates a scroll element for the tab links.
* @param direction The direction of the scroll element, either 'left' or 'right'.
* @returns The SVG element representing the scroll arrow.
*/
private __createTabLinkScrollElement;
/** Returns true if container is scrolled all the way left (or empty)
* @param tolerance Optional tolerance in pixels to consider the left edge as "scrolled to left"
* @returns {boolean} True if the container is scrolled to the left edge, false otherwise.
*/
private __isScrolledToLeftByRects;
/** Returns true if container is scrolled all the way right (or empty)
* @param tolerance Optional tolerance in pixels to consider the right edge as "scrolled to right"
* @returns {boolean} True if the container is scrolled to the right edge, false otherwise.
*/
private __isScrolledToRightByRects;
/**
* Map of all valid Tabs including content and link
* Key is the name of the tab
*/
private __tabs;
private __activeTab?;
/**
* The elements that are used to scroll the tab links left or right.
*/
private __scrollElementLeft;
private __scrollElementRight;
private __resizeObserver;
/**
* The element that contains the tab links that are hidden due to less space.
*/
private __tabLinksOverflowElement;
/**
* The element that contains the tab links that are hidden due to less space.
*/
private __tabLinkDropdown;
private __tabAlignment;
/** The overflow mode of the tabs */
protected __tabOverflowMode: ContentTabs.TabOverflowMode;
/**
* Contains all functions which are fired on tab change.
*/
private __tabChangeCallbacks;
}
export declare namespace ContentTabs {
interface Tab {
link: HTMLElement;
content: HTMLElement;
openTabHandler: () => void;
disabled: boolean;
dropdown: boolean;
}
type TabAlignment = 'Top' | 'Right' | 'Bottom' | 'Left';
type TabOverflowMode = 'Popup' | 'Scroll';
}
import _ContentTabs = ContentTabs;
declare global {
namespace TcHmi.Controls.Helpers {
let ContentTabs: typeof _ContentTabs;
type ContentTabs = _ContentTabs;
namespace ContentTabs {
type Tab = _ContentTabs.Tab;
type TabAlignment = _ContentTabs.TabAlignment;
type TabOverflowMode = _ContentTabs.TabOverflowMode;
}
}
}

View File

@@ -0,0 +1,8 @@
<svg version="1.1"
baseProfile="full"
width="30" height="30"
xmlns="http://www.w3.org/2000/svg">
<path d="M 7 12 L 15 20 L 23 12" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" />
</svg>

After

Width:  |  Height:  |  Size: 225 B

View File

@@ -0,0 +1,133 @@
/* ContentTab style for Theme: Base-Dark */
tchmi-content-tabs,
tchmi-content-tabs-dropdown {
--tchmi-background: var(--tchmi-background-color-1);
--tchmi-link-background: var(--tchmi-background-color-3);
--tchmi-link-background-hover: var(--tchmi-background-color-2);
--tchmi-color: var(--tchmi-foreground-color-1);
--tchmi-link-color-active: var(--tchmi-foreground-color-1);
--tchmi-link-color-disabled: var(--tchmi-foreground-color-3);
--tchmi-separator-color: var(--tchmi-foreground-color-4);
--tchmi-disabled-text-color: var(--tchmi-foreground-color-3);
}
tchmi-content-tabs-dropdown {
background: var(--tchmi-background);
}
tchmi-content-tabs tchmi-tab-contents {
background: var(--tchmi-background);
}
tchmi-content-tabs tchmi-tab-links tchmi-tab-link,
tchmi-content-tabs-dropdown tchmi-tab-link,
tchmi-content-tabs tchmi-tab-links tchmi-tab-links-overflow {
color: var(--tchmi-color);
background: var(--tchmi-link-background);
}
tchmi-content-tabs tchmi-tab-links > tchmi-tab-link:not([disabled])[active],
tchmi-content-tabs-dropdown > tchmi-tab-link:not([disabled])[active] {
background: var(--tchmi-background);
color: var(--tchmi-link-color-active);
}
tchmi-content-tabs tchmi-tab-links > tchmi-tab-link:not([disabled]):hover:not([active]),
tchmi-content-tabs-dropdown > tchmi-tab-link:not([disabled]):hover:not([active]) {
background: var(--tchmi-link-background-hover);
}
tchmi-content-tabs tchmi-tab-links > tchmi-tab-link[disabled],
tchmi-content-tabs-dropdown > tchmi-tab-link[disabled] {
color: var(--tchmi-link-color-disabled);
}
/* tab alignment - left */
tchmi-content-tabs[tab-alignment='Left'] > tchmi-tab-links > tchmi-tab-link,
tchmi-content-tabs[tab-alignment='Left'] > tchmi-tab-links > tchmi-tab-links-overflow {
min-height: 50px;
}
/* tab alignment - right */
tchmi-content-tabs[tab-alignment='Right'] > tchmi-tab-links > tchmi-tab-link,
tchmi-content-tabs[tab-alignment='Right'] > tchmi-tab-links > tchmi-tab-links-overflow {
min-height: 50px;
}
tchmi-content-tabs tchmi-tab-links tchmi-tab-links-overflow {
background:
url('Images/dropdown.svg') 100% 50% no-repeat,
var(--tchmi-link-background);
}
tchmi-content-tabs tchmi-tab-links > tchmi-tab-links-overflow:not([disabled]):hover {
background:
url('Images/dropdown.svg') 100% 50% no-repeat,
var(--tchmi-link-background-hover);
}
tchmi-content-tabs tchmi-tab-links > tchmi-tab-links-overflow:not([disabled])[active] {
background:
url('Images/dropdown.svg') 100% 50% no-repeat,
var(--tchmi-background);
color: var(--tchmi-link-color-active);
}
tchmi-content-tabs tchmi-tab-links tchmi-tab-links-overflow tchmi-tab-link {
border: none;
background: none;
}
tchmi-content-tabs:not([tab-alignment='Left']):not([tab-alignment='Right'])
tchmi-tab-links
tchmi-tab-link:not([active]):not(:last-child)::after,
tchmi-content-tabs:not([tab-alignment='Left']):not([tab-alignment='Right'])
tchmi-tab-links
tchmi-tab-links-overflow:not([active]):not(:last-child)::after {
content: '';
position: absolute;
top: 25%;
right: 0;
height: 50%;
width: 1px;
border-right: 1px solid var(--tchmi-separator-color);
box-sizing: border-box;
}
tchmi-content-tabs:not([tab-alignment='Left']):not([tab-alignment='Right'])
tchmi-tab-links
tchmi-tab-link[active]::after,
tchmi-content-tabs:not([tab-alignment='Left']):not([tab-alignment='Right'])
tchmi-tab-links
tchmi-tab-links-overflow[active]::after {
content: '';
position: absolute;
top: 25%;
left: -1px;
height: 50%;
width: 1px;
border-right: 1px solid var(--tchmi-link-background);
box-sizing: border-box;
}
tchmi-content-tabs:not([tab-alignment='Left']):not([tab-alignment='Right'])
tchmi-tab-links
tchmi-tab-link:hover
+ tchmi-tab-link[active]::after,
tchmi-content-tabs:not([tab-alignment='Left']):not([tab-alignment='Right'])
tchmi-tab-links
tchmi-tab-link:hover
+ tchmi-tab-links-overflow[active]::after {
content: '';
position: absolute;
top: 25%;
left: -1px;
height: 50%;
width: 1px;
border-right: 1px solid var(--tchmi-link-background-hover);
box-sizing: border-box;
}
tchmi-content-tabs[disabled]::after {
background-color: var(--tchmi-disabled-color);
}

View File

@@ -0,0 +1,8 @@
<svg version="1.1"
baseProfile="full"
width="30" height="30"
xmlns="http://www.w3.org/2000/svg">
<path d="M 7 12 L 15 20 L 23 12" fill="none" stroke="#4c6374" stroke-width="2" stroke-linecap="round" />
</svg>

After

Width:  |  Height:  |  Size: 227 B

View File

@@ -0,0 +1,130 @@
/* ContentTab style for Theme: Base*/
tchmi-content-tabs,
tchmi-content-tabs-dropdown {
--tchmi-background: var(--tchmi-background-color-1);
--tchmi-link-background: var(--tchmi-background-color-3);
--tchmi-link-background-hover: var(--tchmi-background-color-2);
--tchmi-color: var(--tchmi-foreground-color-1);
--tchmi-link-color-active: var(--tchmi-highlight-color-1);
--tchmi-link-color-disabled: var(--tchmi-foreground-color-3);
--tchmi-separator-color: var(--tchmi-foreground-color-3);
--tchmi-disabled-text-color: var(--tchmi-foreground-color-3);
}
tchmi-content-tabs-dropdown {
background: var(--tchmi-background);
}
tchmi-content-tabs tchmi-tab-contents {
background: var(--tchmi-background);
}
tchmi-content-tabs tchmi-tab-links tchmi-tab-link,
tchmi-content-tabs-dropdown tchmi-tab-link,
tchmi-content-tabs tchmi-tab-links tchmi-tab-links-overflow {
color: var(--tchmi-color);
background: var(--tchmi-link-background);
}
tchmi-content-tabs tchmi-tab-links > tchmi-tab-link:not([disabled])[active],
tchmi-content-tabs-dropdown > tchmi-tab-link:not([disabled])[active] {
background: var(--tchmi-background);
color: var(--tchmi-link-color-active);
}
tchmi-content-tabs tchmi-tab-links > tchmi-tab-link:not([disabled]):hover:not([active]),
tchmi-content-tabs-dropdown > tchmi-tab-link:not([disabled]):hover:not([active]) {
background: var(--tchmi-link-background-hover);
}
tchmi-content-tabs tchmi-tab-links > tchmi-tab-link[disabled],
tchmi-content-tabs-dropdown > tchmi-tab-link[disabled] {
color: var(--tchmi-link-color-disabled);
}
/* tab alignment - left */
tchmi-content-tabs[tab-alignment='Left'] > tchmi-tab-links > tchmi-tab-link,
tchmi-content-tabs[tab-alignment='Left'] > tchmi-tab-links > tchmi-tab-links-overflow {
min-height: 50px;
}
/* tab alignment - right */
tchmi-content-tabs[tab-alignment='Right'] > tchmi-tab-links > tchmi-tab-link,
tchmi-content-tabs[tab-alignment='Right'] > tchmi-tab-links > tchmi-tab-links-overflow {
min-height: 50px;
}
tchmi-content-tabs tchmi-tab-links tchmi-tab-links-overflow {
background:
url('Images/dropdown.svg') 100% 50% no-repeat,
var(--tchmi-link-background);
}
tchmi-content-tabs tchmi-tab-links > tchmi-tab-links-overflow:not([disabled]):hover {
background:
url('Images/dropdown.svg') 100% 50% no-repeat,
var(--tchmi-link-background-hover);
}
tchmi-content-tabs tchmi-tab-links > tchmi-tab-links-overflow:not([disabled])[active] {
background:
url('Images/dropdown.svg') 100% 50% no-repeat,
var(--tchmi-background);
color: var(--tchmi-link-color-active);
}
tchmi-content-tabs tchmi-tab-links tchmi-tab-links-overflow tchmi-tab-link {
border: none;
background: none;
}
tchmi-content-tabs:not([tab-alignment='Left']):not([tab-alignment='Right'])
tchmi-tab-links
tchmi-tab-link:not([active]):not(:last-child)::after,
tchmi-content-tabs:not([tab-alignment='Left']):not([tab-alignment='Right'])
tchmi-tab-links
tchmi-tab-links-overflow:not([active]):not(:last-child)::after {
content: '';
position: absolute;
top: 25%;
right: 0;
height: 50%;
width: 1px;
border-right: 1px solid var(--tchmi-separator-color);
box-sizing: border-box;
}
tchmi-content-tabs:not([tab-alignment='Left']):not([tab-alignment='Right'])
tchmi-tab-links
tchmi-tab-link[active]:not(:first-child)::after,
tchmi-content-tabs:not([tab-alignment='Left']):not([tab-alignment='Right'])
tchmi-tab-links
tchmi-tab-links-overflow[active]:not(:first-child)::after {
content: '';
position: absolute;
top: 25%;
left: -1px;
height: 50%;
width: 1px;
border-right: 1px solid var(--tchmi-link-background);
box-sizing: border-box;
}
tchmi-content-tabs:not([tab-alignment='Left']):not([tab-alignment='Right'])
tchmi-tab-links
tchmi-tab-link:hover
+ tchmi-tab-link[active]::after,
tchmi-content-tabs:not([tab-alignment='Left']):not([tab-alignment='Right'])
tchmi-tab-links
tchmi-tab-link:hover
+ tchmi-tab-links-overflow[active]::after {
content: '';
position: absolute;
top: 25%;
left: -1px;
height: 50%;
width: 1px;
border-right: 1px solid var(--tchmi-link-background-hover);
box-sizing: border-box;
}
tchmi-content-tabs[disabled]::after {
background-color: var(--tchmi-disabled-color);
}

View File

@@ -0,0 +1,248 @@
.TcHmi_Controls_Helpers_DirectoryBrowser-path-display {
--tchmi-path-display-height: 36px;
position: relative;
height: var(--tchmi-path-display-height);
box-sizing: border-box;
overflow: hidden;
}
.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-scroll-container {
margin-right: -20px;
height: 100%;
overflow-y: hidden;
overflow-x: scroll;
display: flex;
flex-flow: row;
scrollbar-width: none;
}
@supports not (scrollbar-width: none) {
.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-scroll-container::-webkit-scrollbar {
display: none;
}
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list {
list-style: none;
display: inline-block;
height: 100%;
flex-shrink: 0;
margin: 0px;
margin-left: 3px;
padding: 3px 1px 3px 1px;
box-sizing: border-box;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li {
float: left;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li a {
display: inline-block;
position: relative;
margin-right: calc((var(--tchmi-path-display-height) - 6px) / 3 * 2 + 1px);
height: calc(var(--tchmi-path-display-height) - 8px);
line-height: calc(var(--tchmi-path-display-height) - 8px);
padding: 0px calc(var(--tchmi-path-display-height) - 5px) 0px 5px;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li a:before,
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li a:after {
content: '';
position: absolute;
top: 0;
bottom: 0;
right: 0;
width: 0;
height: calc(var(--tchmi-path-display-height) - 8px);
box-sizing: border-box;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li a:before {
left: calc((var(--tchmi-path-display-height) - 9px) / 3 * -2);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li a:after {
left: 100%;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:first-child a {
padding-left: 15px;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:last-child a {
padding-right: calc(var(--tchmi-path-display-height) - 5px);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:last-child:not(:first-child) a {
padding-left: 2px;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display {
list-style-type: none;
overflow: auto;
padding: 5px;
padding-bottom: 10px;
margin: 0;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li {
position: relative;
height: 35px;
padding: 3px 3px 3px 55px;
margin-bottom: 3px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
display: flex;
flex-direction: column;
justify-content: space-evenly;
}
div.TcHmi_Controls_Helpers_DirectoryBrowser-tree-browsing-display {
--tchmi-row-height: 30px;
padding: 5px;
overflow: auto;
/*
For a directory tree like this:
+ Folder 1
+ Folder 2
- File 1
- File 2
DOM structure looks roughly like this:
<details>
<summary>Folder 1</summary>
<details>
<summary>Folder 2</summary>
</details>
<div>File1</div>
</details>
<div>File2</div>
So each folder is wrapped in a details element with the folder name in a summary element and child items below.
Files are simple divs. The details element provides native expanding capabilities.
*/
details {
summary {
height: var(--tchmi-row-height);
/* Disable native expander icon */
list-style: none;
display: flex;
align-items: center;
}
/* Define own expander icon */
> summary > .expander {
width: 7px;
height: 7px;
transform: rotate(-45deg);
transform-origin: center;
transition: transform 0.1s ease-in;
}
/*
Because of the nesting, the > operator must be used to avoid all items below an expanded item also getting
the open expander.
*/
&[open] > summary > .expander {
transform: rotate(45deg);
}
}
div {
height: var(--tchmi-row-height);
display: flex;
align-items: center;
/* Expander for files is just a circle and is smaller, so additional margins are necessary. */
> .expander {
width: 4px;
height: 4px;
margin-left: 8px;
margin-right: 7px;
}
}
.expander {
display: inline-block;
box-sizing: border-box;
margin-left: 6px;
margin-right: 6px;
}
.group-lines span {
display: inline-block;
box-sizing: border-box;
width: 8px;
height: var(--tchmi-row-height);
position: relative;
/*
Move group lines up by half the row height minus 2 px. This allows us to create a gap below L-shaped group
lines.
*/
top: calc(var(--tchmi-row-height) / -2 + 2px);
margin-left: 9px;
/*
Ignore pointer events so hovering over the group line (which is moved up to extend into the row above) does
not highlight the wrong row.
*/
pointer-events: none;
/*
The last group line in front of each tree item should be L-shaped. This group line is also slightly smaller and
positioned 1 px higher than |-shaped group lines to create a 1 px gap below it.
*/
&:last-child {
height: calc(var(--tchmi-row-height) - 1px);
top: calc(var(--tchmi-row-height) / -2 + 1px);
}
}
/*
The last group line in front of the first child element of a folder must be smaller to make room for the
expander.
The first DOM element of a folder is the <summary> containing the folder name. So :nth-child(2) selects the DOM
element of the first actual child of the folder. .group-lines :last-child selects the last group line. This is
the line directly below the expander.
*/
div:nth-child(2) > .group-lines :last-child,
details:nth-child(2) > summary > .group-lines :last-child {
height: calc(var(--tchmi-row-height) - 11px);
margin-top: 10px;
}
label {
display: inline-flex;
align-items: center;
flex-grow: 1;
box-sizing: border-box;
height: calc(100% - 2px);
padding: 3px;
}
&.filter {
/*
While a search is active, filter out all folders that don't contain a match and all files that are not
matches themselves. (If a folder matches a search, the <summary> element, which is a child of the <details>
element gets the match class.)
*/
details:not(:has(.match)),
div:not(.match) {
display: none;
}
/*
Because non-matching items are just hidden and not actually removed from the DOM, the nth-child selectors
still count them when styling the group-lines. To fix group-lines overlapping the expanders in this case,
`of .match, :has(.match)` is added.
*/
div:nth-child(1 of .match, :has(.match)) > .group-lines :last-child,
details:nth-child(1 of .match, :has(.match)) > summary > .group-lines :last-child {
height: calc(var(--tchmi-row-height) - 11px);
margin-top: 10px;
}
}
}

View File

@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="80px"
height="80px" viewBox="0 0 80 80" enable-background="new 0 0 80 80" xml:space="preserve">
<g id="hintergrund" display="none">
<g display="inline">
<image overflow="visible" opacity="0.4" width="384" height="384" xlink:href="data:image/png;base64,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
lzymOT9xgwFwoLVzts0BEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBA
EAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAA
EAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQAAQQBAEAAQBAAEAQBBAEAQ
ABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQ
BAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQA
BAEAQQBAEAAQBAAEAQAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAE
AAQBAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQBAAE
AQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQAEAQABAEAAQBAEEAQBAAEAQA
BAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQB
AEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBB
AEAQABAEAAQBAEEAAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEA
QQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEA
QBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABMEmAEAQABAEAAQBAEEAQBAA
EAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQAXj8Ii80McPy1c36RjbKIDfBCi/by
iuvT/KSNZeoAvJo/2Fo3H3jj9hZWHICjRmBkLfvyE0JpAy7Bx62NthSeRQF4Zgxqa1MtEKX18NsE
oecHXgobsHdDA9xz/ep94bp8cu17uPMDN9oysAFaE8Pvz0+r359MC8ABpoQta9nIi+KXCULtB2+9
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
YII=" transform="matrix(0.24 0 0 0.24 -5 -5)">
</image>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="3.7769" y1="-3.1689" x2="76.2232" y2="83.1693">
<stop offset="0.5" style="stop-color:#EFF1F3"/>
<stop offset="0.9998" style="stop-color:#AEB9C2"/>
</linearGradient>
<rect fill="url(#SVGID_1_)" width="80" height="80"/>
</g>
</g>
</g>
<g id="grid" display="none">
<g display="inline">
<rect x="19" y="18" fill="none" stroke="#FF00FF" stroke-miterlimit="10" width="43" height="43"/>
<line fill="none" stroke="#FF00FF" stroke-miterlimit="10" x1="40" y1="10.5" x2="40" y2="69.5"/>
<line fill="none" stroke="#FF00FF" stroke-miterlimit="10" x1="10.5" y1="40" x2="69.5" y2="40"/>
</g>
</g>
<g id="pfade">
<g>
<path fill="none" stroke="#4794DA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M45.532,59.186"/>
<polyline fill="none" stroke="#4794DA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
57,61.093 23,61.093 23,18 47.31,18 57,27.199 57,61.093 "/>
<polyline fill="none" stroke="#4794DA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
47,18 47,27 57,27 "/>
<g>
<line fill="none" stroke="#4794DA" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="28.303" y1="30.763" x2="31.349" y2="33.81"/>
<line fill="none" stroke="#4794DA" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="31.274" y1="30.763" x2="28.229" y2="33.81"/>
</g>
<g>
<line fill="none" stroke="#4794DA" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="28.303" y1="39.272" x2="31.349" y2="42.318"/>
<line fill="none" stroke="#4794DA" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="31.274" y1="39.272" x2="28.229" y2="42.318"/>
</g>
<line fill="none" stroke="#4794DA" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="34.25" y1="32.5" x2="50.25" y2="32.5"/>
<line fill="none" stroke="#4794DA" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="34.25" y1="40.5" x2="50.25" y2="40.5"/>
<g>
<line fill="none" stroke="#4794DA" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="28.303" y1="47.677" x2="31.349" y2="50.723"/>
<line fill="none" stroke="#4794DA" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="31.274" y1="47.677" x2="28.229" y2="50.723"/>
</g>
<line fill="none" stroke="#4794DA" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="34.25" y1="49.5" x2="50.25" y2="49.5"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

@@ -0,0 +1,142 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="80px"
height="80px" viewBox="0 0 80 80" enable-background="new 0 0 80 80" xml:space="preserve">
<g id="hintergrund" display="none">
<g display="inline">
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="67.3203" y1="87.3203" x2="12.6793" y2="-7.3207">
<stop offset="0.5" style="stop-color:#3580c7"/>
<stop offset="0.9998" style="stop-color:#1960a3"/>
</linearGradient>
<rect fill="url(#SVGID_1_)" width="80" height="80"/>
</g>
<defs>
<filter id="Adobe_OpacityMaskFilter" filterUnits="userSpaceOnUse" x="0" y="0" width="80" height="80">
<feColorMatrix type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" color-interpolation-filters="sRGB" result="source"/>
</filter>
</defs>
<mask maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80" id="SVGID_2_">
<g filter="url(#Adobe_OpacityMaskFilter)">
<image overflow="visible" width="350" height="350" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEBLAEsAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA
EAMCAwYAAATnAAAKtwAAD/b/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX
Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa
JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAWIBYgMBIgACEQEDEQH/
xACEAAEBAQADAQEAAAAAAAAAAAAABQcBAgQDBgEBAAAAAAAAAAAAAAAAAAAAABAAAQIFBAMBAQEB
AAAAAAAAAAEFMQIyBhYSAxU1UBETBCKQIREAAQIEBwEBAAAAAAAAAAAAAAIDATEEBRAy0pOzdDVQ
IRIBAAAAAAAAAAAAAAAAAAAAkP/aAAwDAQACEQMRAAAA/O+F5z0PR9zwKfJLVRKVRKVRKVRKVRKV
RKVRKVRKVRKVRKVRKVRKVRKVRKVRKVeCWqdSa93nPj7pHpNwBh/o8/vP01ZbJnevySFgR1gR1gR1
gR1gR1gR1gR1gR1gR1gR1gR1gR1gR1gR1gR1jgjdLnB+ZkfsoRn/AMvb4jcAYfTmVD9/akWDsAAA
AAAAAAAAAAAAAAD5Qf0EMz6fRnG4Aw+rKqmhWI9g5AAAAAAAAAAAAAAAAAB0h3Ihn82lNNwBh9WV
VNCsR7ByAAAAAAAAAAAAAAAAADpEtxDP5tKabgDD6sqqaFYj2DkAAAAAAAAAAAAAAAAAHSJbiGfz
aU03AGH1ZVU0KxHsHIAAAAAAAAAAAAAAAAAOkS3EM/m0ppuAMPqyqpoViPYOQAAAAAAAAAAAAAAA
AAdIluIZ/NpTTcAYfVlVTQrEewcgAAAAAAAAAAAAAAAAA6RLcQz+bSmm4Aw+rKqmhWI9g5AAAAAA
AAAAAAAAAAAB0iW4hn82lNNwBh9WVVNCsR7ByAAAAAAAAAAAAAAAAADpEtxDP5tKabgDD6sqqaFY
j2DkAAAAAAAAAAAAAAAAAHSJbiGfzaU03AGH1ZVU0KxHsHIAAAAAAAAAAAAAAAAAOkS3EM/m0ppu
AMPqyqpoViPYOQAAAAAAAAAAAAAAAAAdIluIZ/NpTTcAYfVlVTQrEewcgAAAAAAAAAAAAAAAAA6R
LcQz+bSmm4Aw+rKqmhWI9g5AAAAAAAAAAAAAAAAAB0iW4hn82lNNwBh9WVVNCsR7ByAAAAAAAAAA
AAAAAAADpEtxDP5tKabgDD6sqqaFYj2DkAAAAAAAAAAAAAAAAAHSJbiGfzaU03AGH1ZVQ0OxHrnY
AAAAAAAAAAAAAAAAAHSJbhn4CbSmm4Aw+pLpGh2Yds7gAAAAAAAAAAAAAAAAHB0h2oB+Fne/wG4A
w/3eH7Gg2/xtU/Tdvz/0LiHyW0QW0QW0QW0QW0QW0QW0QW0QW0QW0QW0QW0QW0QW0QW0Tgt9YvyK
cJJPz/k+nzNwBh/mr+E+vo8QoczhSTRSTRSTRSTRSTRSTRSTRSTRSTRSTRSTRSTRSTRSTRSTRSTR
R6+Aev4fMeX1PcbEAAAAAAAAAAAAAAAAAAAAAAAD/9oACAECAAEFAP8ABH//2gAIAQMAAQUA/wAE
f//aAAgBAQABBQB8fHvae8gfjIH4yB+MgfjIH4yB+MgfjIH4yB+MgfjIH4yB+MgfjIH4yB+MgfjI
H4yB+MgfjIH4yB+MgfjIH4yB+MgfjIH4yB+MgfjIH4yB+MgfjIH4yB+MgfjIH4yB+MgfjIH4yB+M
gfjIH4yB+GN8e917Lg778/5/qbTPrJbfRRLcQxtDG0MbQxtDG0MbQxtDG0MbQxtDG0MbQxtDG0Mb
QxtDG0MbQxtDG0MbQxtDG0MbQxtDG0MbQxtDG0MbQxtDG0MbQxtBbdRCZh9G606Df2PkW/3xcHfM
+1rPxfiSZNlulVJW2URtlONlONlONlONlONlONlONlONlONlONlONlONlONlONlONlONlONlONlO
NlONlONlONlONlONlONlONlONlONlONlONlONlONlFbZSdtlN9ulRP2/jSVHbb0Fv98XB31vy+0b
tlFl2dlPSSSoaUNKGlDShpQ0oaUNKGlDShpQ0oaUNKGlDShpQ0oaUNKGlDShpQ0oaUNKGlDShpQ0
oaUNKGlDTKLtyqfo2E9OOyiI+y+kt/vi4O+txP8AjbL/ADInqXwm8nuVzl/m4E/5b/fFwd9bcG1P
5lh4Tcpc0/m4YW/3xcHfW3Btplh4Tcpc6bhhb/fFwd9bcG2mWHhNylzpuKFv98XB31twbaZYeE3K
XOm4oW/3xcHfW3Btplh4Tcpc6bihb/fFwd9bcG2mWHhNylzpuKFv98XB31twbaZYeE3KXOm4oW/3
xcHfW3Btplh4Tcpc6bihb/fFwd9bcG2mWHhNylzpuKFv98XB31twbaZYeE3KXOm4oW/3xcHfW3Bt
plh4Tcpc6bihb/fFwd9bcG2mWHhNylzpuKFv98XB31twbaZYeE3KXOm4oW/3xcHfW3Btplh4Tcpc
6bihb/fFwd9bcG2mWHhNylzpuKFv98XB31twbaZYeE3KXOm4oW/3xcHfW3Btplh4Tcpc6bihb/fF
wd9bcG2mWHhNylzpuKFv98XB31twbaZYeE3KXOm4oW/3xcHfW3Btplh4Tcpc6bihb/fFwd9bcG2m
WHhNylzpuKFv98XB31twbaZYeE3KXOm4oW/3xcHfW3Btplh4Tcpc6bihb/fFwd9bcG2mWHhNylzp
uKFv98XB31twbaZYeE3KXOm4oW/3xcHfW3Btplh4Tcpc6bihb/fFwd9bcG2mWHhNylzpuKFv98XB
31twbaZYeE3KXOm4oW/3xcHfW3Btplh4Tcpc6bihb/fFwd9bcG2mWHhNylzpuKFv98XB31twbaZY
eE3KXOm4oW/3xcHfW3Btplh4Tcpc6bihb/fFwd9bcG2mWHhNylzpuGFv98XB31twbV/mWnwm7S5r
/Nwwt/vi4O+t1fSNs/8AO2vuXwm/N6Ryn/l/X2lv98XB3zDN6G7fRJdj9Cek3pVPpKfSU+kp9JT6
Sn0lPpKfSU+kp9JT6Sn0lPpKfSU+kp9JT6Sn0lPpKfSU+kp9JT6Sn0lPpKfSU+kp9JT6Sn0lPpKf
SU+kp9ZSbfRD9H6E9OG8io+Te0t/vi4O+ad3Qfj/AGpKmy4oiSucojnKcnKcnKcnKcnKcnKcnKcn
KcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnK
K5yk7lKbzgip+z9iTI67mot/vi4O+2N/5G27aCV9RBLgQyFDIUMiQyJDIkMiQyJDIkMiQyJDIkMi
QyJDIkMiQyJDIkMiQyJDIkMiQyJDIkMiQyJDIkMiQyJDIkMiQyJDIkMhQyFBX9FJnxFNx11G/v8A
1Lf74fGN73XvH34x9+MffjH34x9+MffjH34x9+MffjH34x9+MffjH34x9+MffjH34x9+MffjH34x
9+MffjH34x9+MffjH34x9+MffjH34x9+MffjH34x9+MffjH34x9+MffjH34x9+MffjH34x9+Mffh
jY3vae/Hf//aAAgBAgIGPwAEf//aAAgBAwIGPwAEf//aAAgBAQEGPwC4NNXCqQ2iqeShCXnEpSlL
ioQhCEFfkIHp1e+5qPTq99zUenV77mo9Or33NR6dXvuaj06vfc1Hp1e+5qPTq99zUenV77mo9Or3
3NR6dXvuaj06vfc1Hp1e+5qPTq99zUenV77mo9Or33NR6dXvuaj06vfc1Hp1e+5qPTq99zUenV77
mo9Or33NR6dXvuaj06vfc1Hp1e+5qPTq99zUenV77mo9Or33NR6dXvuaj06vfc1Hp1e+5qPTq99z
UenV77mo9Or33NR6dXvuaj06vfc1Hp1e+5qPTq99zUenV77mo9Or33NR6dXvuaj06vfc1FvaduFU
ttdUylaFPOKSpKnEwjCMIq/YRwufbf5FYSJEjKZTKZTKZTKZTKZTKZTKZTKZTKZTKZTKZTKZTKZT
KZTKZTKZTKZSRIlhbO2xyJwufbf5FECH4SJEiRIkSJEiRIkSJEiRIkSJEiRIkSJEiRIkSJEiRIkS
JEfwiWztscicLn23+RRAh8aJEiWztscicLn23+RRAh8eJEtnbY5E4XPtv8ihJD48RRbO2xyJwufb
f5FCSHx4ii2dtjkThc+2/wAihJD48RRbO2xyJwufbf5FCSHx4ii2dtjkThc+2/yKEkPjxFFs7bHI
nC59t/kUJIfHiKLZ22OROFz7b/IoSQ+PEUWztscicLn23+RQkh8eIotnbY5E4XPtv8ihJD48RRbO
2xyJwufbf5FCSHx4ii2dtjkThc+2/wAihJD48RRbO2xyJwufbf5FCSHx4ii2dtjkThc+2/yKEkPj
xFFs7bHInC59t/kUJIfHiKLZ22OROFz7b/IoSQ+PEUWztscicLn23+RQkh8eIotnbY5E4XPtv8ih
JD48RRbO2xyJwufbf5FCSHx4ii2dtjkThc+2/wAihJD48RRbO2xyJwufbf5FCSHx4ii2dtjkThc+
2/yKEkPjxFFs7bHInC59t/kUJIfHiKLZ22OROFz7b/IoSQ+PEUWztscicLn23+RQkh8eIotnbY5E
4XPtv8ihJD48RRbO2xyJwufbf5FCSHx4ii2dtjkThc+2/wAihJD48RRbO2xyJwufbf5FCSHx4ii2
dtjkThc+2/yKEkPjxFFs7bHInC59t/kUJIfHiKLZ22OROFz7b/IoSQ+PEUWztscicLn23+RQkh8e
IotnbY5E4XPtv8ihJD48RRbO2xyJwufbf5FCSHx4ii2dtjkThc+2/wAiiBD48SJbO2xyJwufbf5F
ECBP4sf0iRLZ22OROFz7b/IogQ/SZMmTJkyZMmTJkyZMmTJkyZMmTJkyZMmTJkyZMmTJkyZMj+kS
2dtjkThc+2/yKwmTJmYzGYzGYzGYzGYzGYzGYzGYzGYzGYzGYzGYzGYzGYzGYzGYzGYzEyZPC2dt
jkThcHWrfVLbXVPKQtLLikqSpxUYRhGCf2ETzKvYc0nmVew5pPMq9hzSeZV7Dmk8yr2HNJ5lXsOa
TzKvYc0nmVew5pPMq9hzSeZV7Dmk8yr2HNJ5lXsOaTzKvYc0nmVew5pPMq9hzSeZV7Dmk8yr2HNJ
5lXsOaTzKvYc0nmVew5pPMq9hzSeZV7Dmk8yr2HNJ5lXsOaTzKvYc0nmVew5pPMq9hzSeZV7Dmk8
yr2HNJ5lXsOaTzKvYc0nmVew5pPMq9hzSeZV7Dmk8yr2HNJ5lXsOaTzKvYc0nmVew5pPMq9hzSeZ
V7Dmk8yr2HNJ5lXsOaS3uu2+qQ2iqZUtamXEpSlLiYxjGMU/kIfP/9k=" transform="matrix(0.24 0 0 0.24 -2 -2)">
</image>
</g>
</mask>
<g opacity="0.5" mask="url(#SVGID_2_)">
<rect width="80" height="80"/>
</g>
</g>
</g>
<g id="grid" display="none">
</g>
<g id="pfade">
<g>
<path fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M45.532,59.186"/>
<polyline fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
57,61.093 23,61.093 23,18 47.31,18 57,27.199 57,61.093 "/>
<polyline fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
47,18 47,27 57,27 "/>
<g>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="28.303" y1="30.763" x2="31.349" y2="33.81"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="31.274" y1="30.763" x2="28.229" y2="33.81"/>
</g>
<g>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="28.303" y1="39.272" x2="31.349" y2="42.318"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="31.274" y1="39.272" x2="28.229" y2="42.318"/>
</g>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="34.25" y1="32.5" x2="50.25" y2="32.5"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="34.25" y1="40.5" x2="50.25" y2="40.5"/>
<g>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="28.303" y1="47.677" x2="31.349" y2="50.723"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="31.274" y1="47.677" x2="28.229" y2="50.723"/>
</g>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="34.25" y1="49.5" x2="50.25" y2="49.5"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="pfade" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="80px" height="80px" viewBox="0 0 80 80" enable-background="new 0 0 80 80" xml:space="preserve">
<g>
<g>
<polygon fill="#2775be" points="40.109,22.833 40.069,22.833 33.69,29.333 18.5,29.333 18.5,60.833 61.5,60.833
61.5,35.577 61.5,29.273 61.5,22.833 "/>
</g>
<defs>
<filter id="Adobe_OpacityMaskFilter" filterUnits="userSpaceOnUse" x="18.5" y="22.833" width="43" height="38">
<feColorMatrix type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" color-interpolation-filters="sRGB" result="source"/>
</filter>
</defs>
<mask maskUnits="userSpaceOnUse" x="18.5" y="22.833" width="43" height="38" id="SVGID_2_">
<g filter="url(#Adobe_OpacityMaskFilter)">
<image overflow="visible" width="196" height="175" xlink:href="data:image/jpeg;base64,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
nEziZxM4mcTEP89+f+v3WC9/H+79Puf/2Q==" transform="matrix(0.24 0 0 0.24 16.5 20.8335)">
</image>
</g>
</mask>
<!--<g opacity="0.5" mask="url(#SVGID_2_)">
<polygon points="40.109,22.833 40.069,22.833 33.69,29.333 18.5,29.333 18.5,60.833 61.5,60.833 61.5,35.577 61.5,29.273
61.5,22.833 "/>
</g>-->
</g>
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.5" y1="39.833" x2="52.5" y2="39.833"/>
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.5" y1="45.833" x2="52.5" y2="45.833"/>
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.5" y1="51.833" x2="52.5" y2="51.833"/>
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="pfade" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="80px" height="80px" viewBox="0 0 80 80" enable-background="new 0 0 80 80" xml:space="preserve">
<g>
<image overflow="visible" opacity="0.4" width="230" height="209" xlink:href="data:image/png;base64,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" transform="matrix(0.24 0 0 0.24 13.5 17.8335)">
</image>
<g>
<polygon fill="#f6f7f8" points="40.109,22.833 40.069,22.833 33.69,29.333 18.5,29.333 18.5,60.833 61.5,60.833
61.5,35.577 61.5,29.273 61.5,22.833 "/>
</g>
</g>
<line fill="none" stroke="#4794DA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.5" y1="39.833" x2="52.5" y2="39.833"/>
<line fill="none" stroke="#4794DA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.5" y1="45.833" x2="52.5" y2="45.833"/>
<line fill="none" stroke="#4794DA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.5" y1="51.833" x2="52.5" y2="51.833"/>
</svg>

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="pfade" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="80px" height="80px" viewBox="0 0 80 80" enable-background="new 0 0 80 80" xml:space="preserve">
<g>
<g>
<polygon fill="#2775be" points="40.109,22.833 40.069,22.833 33.69,29.333 18.5,29.333 18.5,60.833 61.5,60.833
61.5,35.577 61.5,29.273 61.5,22.833 "/>
</g>
<defs>
<filter id="Adobe_OpacityMaskFilter" filterUnits="userSpaceOnUse" x="18.5" y="22.833" width="43" height="38">
<feColorMatrix type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" color-interpolation-filters="sRGB" result="source"/>
</filter>
</defs>
<mask maskUnits="userSpaceOnUse" x="18.5" y="22.833" width="43" height="38" id="SVGID_2_">
<g filter="url(#Adobe_OpacityMaskFilter)">
<image overflow="visible" width="196" height="175" xlink:href="data:image/jpeg;base64,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
nEziZxM4mcTEP89+f+v3WC9/H+79Puf/2Q==" transform="matrix(0.24 0 0 0.24 16.5 20.8335)">
</image>
</g>
</mask>
<!--<g opacity="0.5" mask="url(#SVGID_2_)">
<polygon points="40.109,22.833 40.069,22.833 33.69,29.333 18.5,29.333 18.5,60.833 61.5,60.833 61.5,35.577 61.5,29.273
61.5,22.833 "/>
</g>-->
</g>
<polyline fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="35.5,51.833 45.833,51.833 45.833,35.833"/>
<polyline fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="39.833,41.833 45.833,35.833 51.833,41.833"/>
</svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="pfade" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="80px" height="80px" viewBox="0 0 80 80" enable-background="new 0 0 80 80" xml:space="preserve">
<g>
<image overflow="visible" opacity="0.4" width="230" height="209" xlink:href="data:image/png;base64,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" transform="matrix(0.24 0 0 0.24 13.5 17.8335)">
</image>
<g>
<polygon fill="f5f6f7" points="40.109,22.833 40.069,22.833 33.69,29.333 18.5,29.333 18.5,60.833 61.5,60.833
61.5,35.577 61.5,29.273 61.5,22.833 "/>
</g>
</g>
<polyline fill="none" stroke="#4794DA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="35.5,51.833 45.833,51.833 45.833,35.833"/>
<polyline fill="none" stroke="#4794DA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="39.833,41.833 45.833,35.833 51.833,41.833"/>
</svg>

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@@ -0,0 +1,248 @@
.TcHmi_Controls_Helpers_DirectoryBrowser-path-display {
--tchmi-background-color: var(--tchmi-background-color-4);
--tchmi-text-color: var(--tchmi-foreground-color-4);
--tchmi-item-color: var(--tchmi-background-color-3);
--tchmi-active-text-color: var(--tchmi-foreground-color-1);
--tchmi-active-item-color: var(--tchmi-highlight-color-1);
--tchmi-hover-color: var(--tchmi-background-color-2);
--tchmi-border-color: var(--tchmi-background-color-2);
background-color: var(--tchmi-background-color);
border: 1px solid var(--tchmi-border-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li a {
color: var(--tchmi-text-color);
background: var(--tchmi-item-color);
text-decoration: none;
text-align: center;
background-repeat: no-repeat;
background-size: calc(var(--tchmi-path-display-height) - 8px);
background-position: right center;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li.folder a {
background-image: url('Images/folder.svg');
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li.file a {
background-image: url('Images/file.svg');
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:nth-child(even) a {
background-color: var(--tchmi-item-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:nth-child(even) a:before {
border-color: var(--tchmi-item-color);
border-left-color: transparent;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:nth-child(even) a:after {
border-left-color: var(--tchmi-item-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:first-child a {
border-radius: 4px 0 0 4px;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:first-child a:before {
border: none;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:last-child a {
border-radius: 0 4px 4px 0;
background-color: var(--tchmi-active-item-color);
color: var(--tchmi-active-text-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li.folder:last-child a {
background-image: url('Images/folder_active.svg');
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li.file:last-child a {
background-image: url('Images/file_active.svg');
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:last-child a:after {
border: none;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li a:before,
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li a:after {
border: 0 solid var(--tchmi-item-color);
border-width: calc((var(--tchmi-path-display-height) - 8px) / 2)
calc((var(--tchmi-path-display-height) - 8px) / 3 + 1px);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:last-child a:before {
border-color: var(--tchmi-active-item-color);
border-left-color: transparent;
color: var(--tchmi-active-text-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li a:before {
border-left-color: transparent;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li a:after {
border-color: transparent;
border-left-color: var(--tchmi-item-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:not(:last-child) a:hover {
background-color: var(--tchmi-hover-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:not(:last-child) a:hover:before {
border-color: var(--tchmi-hover-color);
border-left-color: transparent;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:not(:last-child) a:hover:after {
border-left-color: var(--tchmi-hover-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display {
--tchmi-item-background: var(--tchmi-background-color-3);
--tchmi-text-color: var(--tchmi-foreground-color-1);
--tchmi-item-hover-background: var(--tchmi-background-color-2);
--tchmi-item-active-background: var(--tchmi-highlight-color-1);
--tchmi-active-text-color: var(--tchmi-foreground-color-1);
--tchmi-metadata-text-color: var(--tchmi-foreground-color-4);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li {
background-color: var(--tchmi-item-background);
color: var(--tchmi-text-color);
text-decoration: none;
background-repeat: no-repeat;
background-size: 60px;
background-position: 0px -10px;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li span {
color: var(--tchmi-metadata-text-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li:hover {
background-color: var(--tchmi-item-hover-background);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.selected,
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.current {
background-color: var(--tchmi-item-active-background);
color: var(--tchmi-active-text-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.folder {
background-image: url(Images/folder.svg);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.folder[data-is-parent='true'] {
background-image: url(Images/parent_folder.svg);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.folder.selected,
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.folder.current {
background-image: url(Images/folder_active.svg);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.file {
background-image: url(Images/file.svg);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.file.selected,
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.file.current {
background-image: url(Images/file_active.svg);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.dragging {
background-color: var(--tchmi-item-active-background);
color: var(--tchmi-active-text-color);
opacity: 0.5;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.drop-zone {
background-color: var(--tchmi-item-active-background);
color: var(--tchmi-active-text-color);
}
div.TcHmi_Controls_Helpers_DirectoryBrowser-tree-browsing-display {
--tchmi-text-color: var(--tchmi-foreground-color-1);
--tchmi-group-line-color: var(--tchmi-foreground-color-3);
--tchmi-hover-color: var(--tchmi-background-color-3);
--tchmi-selected-color: var(--tchmi-background-color-1);
--tchmi-current-item-color: var(--tchmi-highlight-color-1);
--tchmi-current-item-text-color: var(--tchmi-foreground-color-1);
color: var(--tchmi-text-color);
label {
background-size: contain;
background-repeat: no-repeat;
padding-left: var(--tchmi-row-height);
}
summary > label {
background-image: url('Images/folder.svg');
}
div > label {
background-image: url('Images/file.svg');
}
summary.current > label {
background-image: url('Images/folder_active.svg');
}
/* It's important to use the > operator, otherwise all labels below the current item will have the active icon. */
div.current > label {
background-image: url('Images/file_active.svg');
}
/*
Enable hover styles only on devices where the primary pointer is something like a mouse. If we enable hover
styles generally, rows will have a sticky hover effect after expanding or collapsing them on a touch device.
Unfortunately our laptops always declare the mouse as the primary pointer, even if you use the touch screen, so
this media query only has an effect on devices which are primarily used with touch.
*/
@media (hover: hover) {
:where(summary, div):hover {
background: var(--tchmi-hover-color);
}
}
.selected {
background: var(--tchmi-selected-color);
}
.current {
background: var(--tchmi-current-item-color);
color: var(--tchmi-current-item-text-color);
}
.group-lines span {
/* By default, group lines are created as an L-shape. */
border: 1px solid var(--tchmi-group-line-color);
border-top: none;
border-right: none;
/*
Then group lines that are not the last group line in front of the item name have their bottom border
removed, creating an |-shape.
*/
&:not(:last-child) {
border-bottom: none;
}
}
div > .expander {
border: 1px solid var(--tchmi-text-color);
border-radius: 4px;
}
details > summary > .expander {
border: 1px solid var(--tchmi-text-color);
border-top: none;
border-left: none;
}
}

View File

@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="80px"
height="80px" viewBox="0 0 80 80" enable-background="new 0 0 80 80" xml:space="preserve">
<g id="hintergrund" display="none">
<g display="inline">
<image overflow="visible" opacity="0.4" width="384" height="384" xlink:href="data:image/png;base64,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
lzymOT9xgwFwoLVzts0BEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBA
EAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAA
EAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQAAQQBAEAAQBAAEAQBBAEAQ
ABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQ
BAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQA
BAEAQQBAEAAQBAAEAQAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAE
AAQBAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQBAAE
AQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQAEAQABAEAAQBAEEAQBAAEAQA
BAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQB
AEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBB
AEAQABAEAAQBAEEAAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEA
QQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEA
QBAAEAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQABMEmAEAQABAEAAQBAEEAQBAA
EAQABAEAQQBAEAAQBAAEAQBBAEAQABAEAAQBAEEAQBAAEAQAXj8Ii80McPy1c36RjbKIDfBCi/by
iuvT/KSNZeoAvJo/2Fo3H3jj9hZWHICjRmBkLfvyE0JpAy7Bx62NthSeRQF4Zgxqa1MtEKX18NsE
oecHXgobsHdDA9xz/ep94bp8cu17uPMDN9oysAFaE8Pvz0+r359MC8ABpoQta9nIi+KXCULtB2+9
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
YII=" transform="matrix(0.24 0 0 0.24 -5 -5)">
</image>
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="3.7769" y1="-3.1689" x2="76.2232" y2="83.1693">
<stop offset="0.5" style="stop-color:#EFF1F3"/>
<stop offset="0.9998" style="stop-color:#AEB9C2"/>
</linearGradient>
<rect fill="url(#SVGID_1_)" width="80" height="80"/>
</g>
</g>
</g>
<g id="grid" display="none">
<g display="inline">
<rect x="19" y="18" fill="none" stroke="#FF00FF" stroke-miterlimit="10" width="43" height="43"/>
<line fill="none" stroke="#FF00FF" stroke-miterlimit="10" x1="40" y1="10.5" x2="40" y2="69.5"/>
<line fill="none" stroke="#FF00FF" stroke-miterlimit="10" x1="10.5" y1="40" x2="69.5" y2="40"/>
</g>
</g>
<g id="pfade">
<g>
<path fill="none" stroke="#4794DA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M45.532,59.186"/>
<polyline fill="none" stroke="#4794DA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
57,61.093 23,61.093 23,18 47.31,18 57,27.199 57,61.093 "/>
<polyline fill="none" stroke="#4794DA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
47,18 47,27 57,27 "/>
<g>
<line fill="none" stroke="#4794DA" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="28.303" y1="30.763" x2="31.349" y2="33.81"/>
<line fill="none" stroke="#4794DA" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="31.274" y1="30.763" x2="28.229" y2="33.81"/>
</g>
<g>
<line fill="none" stroke="#4794DA" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="28.303" y1="39.272" x2="31.349" y2="42.318"/>
<line fill="none" stroke="#4794DA" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="31.274" y1="39.272" x2="28.229" y2="42.318"/>
</g>
<line fill="none" stroke="#4794DA" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="34.25" y1="32.5" x2="50.25" y2="32.5"/>
<line fill="none" stroke="#4794DA" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="34.25" y1="40.5" x2="50.25" y2="40.5"/>
<g>
<line fill="none" stroke="#4794DA" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="28.303" y1="47.677" x2="31.349" y2="50.723"/>
<line fill="none" stroke="#4794DA" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="31.274" y1="47.677" x2="28.229" y2="50.723"/>
</g>
<line fill="none" stroke="#4794DA" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="34.25" y1="49.5" x2="50.25" y2="49.5"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.0 KiB

View File

@@ -0,0 +1,142 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="80px"
height="80px" viewBox="0 0 80 80" enable-background="new 0 0 80 80" xml:space="preserve">
<g id="hintergrund" display="none">
<g display="inline">
<g>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="67.3203" y1="87.3203" x2="12.6793" y2="-7.3207">
<stop offset="0.5" style="stop-color:#4994DA"/>
<stop offset="0.9998" style="stop-color:#4162B0"/>
</linearGradient>
<rect fill="url(#SVGID_1_)" width="80" height="80"/>
</g>
<defs>
<filter id="Adobe_OpacityMaskFilter" filterUnits="userSpaceOnUse" x="0" y="0" width="80" height="80">
<feColorMatrix type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" color-interpolation-filters="sRGB" result="source"/>
</filter>
</defs>
<mask maskUnits="userSpaceOnUse" x="0" y="0" width="80" height="80" id="SVGID_2_">
<g filter="url(#Adobe_OpacityMaskFilter)">
<image overflow="visible" width="350" height="350" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEBLAEsAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA
EAMCAwYAAATnAAAKtwAAD/b/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX
Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa
JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAWIBYgMBIgACEQEDEQH/
xACEAAEBAQADAQEAAAAAAAAAAAAABQcBAgQDBgEBAAAAAAAAAAAAAAAAAAAAABAAAQIFBAMBAQEB
AAAAAAAAAAEFMQIyBhYSAxU1UBETBCKQIREAAQIEBwEBAAAAAAAAAAAAAAIDATEEBRAy0pOzdDVQ
IRIBAAAAAAAAAAAAAAAAAAAAkP/aAAwDAQACEQMRAAAA/O+F5z0PR9zwKfJLVRKVRKVRKVRKVRKV
RKVRKVRKVRKVRKVRKVRKVRKVRKVRKVeCWqdSa93nPj7pHpNwBh/o8/vP01ZbJnevySFgR1gR1gR1
gR1gR1gR1gR1gR1gR1gR1gR1gR1gR1gR1gR1jgjdLnB+ZkfsoRn/AMvb4jcAYfTmVD9/akWDsAAA
AAAAAAAAAAAAAAD5Qf0EMz6fRnG4Aw+rKqmhWI9g5AAAAAAAAAAAAAAAAAB0h3Ihn82lNNwBh9WV
VNCsR7ByAAAAAAAAAAAAAAAAADpEtxDP5tKabgDD6sqqaFYj2DkAAAAAAAAAAAAAAAAAHSJbiGfz
aU03AGH1ZVU0KxHsHIAAAAAAAAAAAAAAAAAOkS3EM/m0ppuAMPqyqpoViPYOQAAAAAAAAAAAAAAA
AAdIluIZ/NpTTcAYfVlVTQrEewcgAAAAAAAAAAAAAAAAA6RLcQz+bSmm4Aw+rKqmhWI9g5AAAAAA
AAAAAAAAAAAB0iW4hn82lNNwBh9WVVNCsR7ByAAAAAAAAAAAAAAAAADpEtxDP5tKabgDD6sqqaFY
j2DkAAAAAAAAAAAAAAAAAHSJbiGfzaU03AGH1ZVU0KxHsHIAAAAAAAAAAAAAAAAAOkS3EM/m0ppu
AMPqyqpoViPYOQAAAAAAAAAAAAAAAAAdIluIZ/NpTTcAYfVlVTQrEewcgAAAAAAAAAAAAAAAAA6R
LcQz+bSmm4Aw+rKqmhWI9g5AAAAAAAAAAAAAAAAAB0iW4hn82lNNwBh9WVVNCsR7ByAAAAAAAAAA
AAAAAAADpEtxDP5tKabgDD6sqqaFYj2DkAAAAAAAAAAAAAAAAAHSJbiGfzaU03AGH1ZVQ0OxHrnY
AAAAAAAAAAAAAAAAAHSJbhn4CbSmm4Aw+pLpGh2Yds7gAAAAAAAAAAAAAAAAHB0h2oB+Fne/wG4A
w/3eH7Gg2/xtU/Tdvz/0LiHyW0QW0QW0QW0QW0QW0QW0QW0QW0QW0QW0QW0QW0QW0QW0Tgt9YvyK
cJJPz/k+nzNwBh/mr+E+vo8QoczhSTRSTRSTRSTRSTRSTRSTRSTRSTRSTRSTRSTRSTRSTRSTRSTR
R6+Aev4fMeX1PcbEAAAAAAAAAAAAAAAAAAAAAAAD/9oACAECAAEFAP8ABH//2gAIAQMAAQUA/wAE
f//aAAgBAQABBQB8fHvae8gfjIH4yB+MgfjIH4yB+MgfjIH4yB+MgfjIH4yB+MgfjIH4yB+MgfjI
H4yB+MgfjIH4yB+MgfjIH4yB+MgfjIH4yB+MgfjIH4yB+MgfjIH4yB+MgfjIH4yB+MgfjIH4yB+M
gfjIH4yB+GN8e917Lg778/5/qbTPrJbfRRLcQxtDG0MbQxtDG0MbQxtDG0MbQxtDG0MbQxtDG0Mb
QxtDG0MbQxtDG0MbQxtDG0MbQxtDG0MbQxtDG0MbQxtDG0MbQxtBbdRCZh9G606Df2PkW/3xcHfM
+1rPxfiSZNlulVJW2URtlONlONlONlONlONlONlONlONlONlONlONlONlONlONlONlONlONlONlO
NlONlONlONlONlONlONlONlONlONlONlONlONlONlFbZSdtlN9ulRP2/jSVHbb0Fv98XB31vy+0b
tlFl2dlPSSSoaUNKGlDShpQ0oaUNKGlDShpQ0oaUNKGlDShpQ0oaUNKGlDShpQ0oaUNKGlDShpQ0
oaUNKGlDTKLtyqfo2E9OOyiI+y+kt/vi4O+txP8AjbL/ADInqXwm8nuVzl/m4E/5b/fFwd9bcG1P
5lh4Tcpc0/m4YW/3xcHfW3Btplh4Tcpc6bhhb/fFwd9bcG2mWHhNylzpuKFv98XB31twbaZYeE3K
XOm4oW/3xcHfW3Btplh4Tcpc6bihb/fFwd9bcG2mWHhNylzpuKFv98XB31twbaZYeE3KXOm4oW/3
xcHfW3Btplh4Tcpc6bihb/fFwd9bcG2mWHhNylzpuKFv98XB31twbaZYeE3KXOm4oW/3xcHfW3Bt
plh4Tcpc6bihb/fFwd9bcG2mWHhNylzpuKFv98XB31twbaZYeE3KXOm4oW/3xcHfW3Btplh4Tcpc
6bihb/fFwd9bcG2mWHhNylzpuKFv98XB31twbaZYeE3KXOm4oW/3xcHfW3Btplh4Tcpc6bihb/fF
wd9bcG2mWHhNylzpuKFv98XB31twbaZYeE3KXOm4oW/3xcHfW3Btplh4Tcpc6bihb/fFwd9bcG2m
WHhNylzpuKFv98XB31twbaZYeE3KXOm4oW/3xcHfW3Btplh4Tcpc6bihb/fFwd9bcG2mWHhNylzp
uKFv98XB31twbaZYeE3KXOm4oW/3xcHfW3Btplh4Tcpc6bihb/fFwd9bcG2mWHhNylzpuKFv98XB
31twbaZYeE3KXOm4oW/3xcHfW3Btplh4Tcpc6bihb/fFwd9bcG2mWHhNylzpuKFv98XB31twbaZY
eE3KXOm4oW/3xcHfW3Btplh4Tcpc6bihb/fFwd9bcG2mWHhNylzpuGFv98XB31twbV/mWnwm7S5r
/Nwwt/vi4O+t1fSNs/8AO2vuXwm/N6Ryn/l/X2lv98XB3zDN6G7fRJdj9Cek3pVPpKfSU+kp9JT6
Sn0lPpKfSU+kp9JT6Sn0lPpKfSU+kp9JT6Sn0lPpKfSU+kp9JT6Sn0lPpKfSU+kp9JT6Sn0lPpKf
SU+kp9ZSbfRD9H6E9OG8io+Te0t/vi4O+ad3Qfj/AGpKmy4oiSucojnKcnKcnKcnKcnKcnKcnKcn
KcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnKcnK
K5yk7lKbzgip+z9iTI67mot/vi4O+2N/5G27aCV9RBLgQyFDIUMiQyJDIkMiQyJDIkMiQyJDIkMi
QyJDIkMiQyJDIkMiQyJDIkMiQyJDIkMiQyJDIkMiQyJDIkMiQyJDIkMhQyFBX9FJnxFNx11G/v8A
1Lf74fGN73XvH34x9+MffjH34x9+MffjH34x9+MffjH34x9+MffjH34x9+MffjH34x9+MffjH34x
9+MffjH34x9+MffjH34x9+MffjH34x9+MffjH34x9+MffjH34x9+MffjH34x9+MffjH34x9+Mffh
jY3vae/Hf//aAAgBAgIGPwAEf//aAAgBAwIGPwAEf//aAAgBAQEGPwC4NNXCqQ2iqeShCXnEpSlL
ioQhCEFfkIHp1e+5qPTq99zUenV77mo9Or33NR6dXvuaj06vfc1Hp1e+5qPTq99zUenV77mo9Or3
3NR6dXvuaj06vfc1Hp1e+5qPTq99zUenV77mo9Or33NR6dXvuaj06vfc1Hp1e+5qPTq99zUenV77
mo9Or33NR6dXvuaj06vfc1Hp1e+5qPTq99zUenV77mo9Or33NR6dXvuaj06vfc1Hp1e+5qPTq99z
UenV77mo9Or33NR6dXvuaj06vfc1Hp1e+5qPTq99zUenV77mo9Or33NR6dXvuaj06vfc1FvaduFU
ttdUylaFPOKSpKnEwjCMIq/YRwufbf5FYSJEjKZTKZTKZTKZTKZTKZTKZTKZTKZTKZTKZTKZTKZT
KZTKZTKZTKZSRIlhbO2xyJwufbf5FECH4SJEiRIkSJEiRIkSJEiRIkSJEiRIkSJEiRIkSJEiRIkS
JEfwiWztscicLn23+RRAh8aJEiWztscicLn23+RRAh8eJEtnbY5E4XPtv8ihJD48RRbO2xyJwufb
f5FCSHx4ii2dtjkThc+2/wAihJD48RRbO2xyJwufbf5FCSHx4ii2dtjkThc+2/yKEkPjxFFs7bHI
nC59t/kUJIfHiKLZ22OROFz7b/IoSQ+PEUWztscicLn23+RQkh8eIotnbY5E4XPtv8ihJD48RRbO
2xyJwufbf5FCSHx4ii2dtjkThc+2/wAihJD48RRbO2xyJwufbf5FCSHx4ii2dtjkThc+2/yKEkPj
xFFs7bHInC59t/kUJIfHiKLZ22OROFz7b/IoSQ+PEUWztscicLn23+RQkh8eIotnbY5E4XPtv8ih
JD48RRbO2xyJwufbf5FCSHx4ii2dtjkThc+2/wAihJD48RRbO2xyJwufbf5FCSHx4ii2dtjkThc+
2/yKEkPjxFFs7bHInC59t/kUJIfHiKLZ22OROFz7b/IoSQ+PEUWztscicLn23+RQkh8eIotnbY5E
4XPtv8ihJD48RRbO2xyJwufbf5FCSHx4ii2dtjkThc+2/wAihJD48RRbO2xyJwufbf5FCSHx4ii2
dtjkThc+2/yKEkPjxFFs7bHInC59t/kUJIfHiKLZ22OROFz7b/IoSQ+PEUWztscicLn23+RQkh8e
IotnbY5E4XPtv8ihJD48RRbO2xyJwufbf5FCSHx4ii2dtjkThc+2/wAiiBD48SJbO2xyJwufbf5F
ECBP4sf0iRLZ22OROFz7b/IogQ/SZMmTJkyZMmTJkyZMmTJkyZMmTJkyZMmTJkyZMmTJkyZMj+kS
2dtjkThc+2/yKwmTJmYzGYzGYzGYzGYzGYzGYzGYzGYzGYzGYzGYzGYzGYzGYzGYzGYzEyZPC2dt
jkThcHWrfVLbXVPKQtLLikqSpxUYRhGCf2ETzKvYc0nmVew5pPMq9hzSeZV7Dmk8yr2HNJ5lXsOa
TzKvYc0nmVew5pPMq9hzSeZV7Dmk8yr2HNJ5lXsOaTzKvYc0nmVew5pPMq9hzSeZV7Dmk8yr2HNJ
5lXsOaTzKvYc0nmVew5pPMq9hzSeZV7Dmk8yr2HNJ5lXsOaTzKvYc0nmVew5pPMq9hzSeZV7Dmk8
yr2HNJ5lXsOaTzKvYc0nmVew5pPMq9hzSeZV7Dmk8yr2HNJ5lXsOaTzKvYc0nmVew5pPMq9hzSeZ
V7Dmk8yr2HNJ5lXsOaS3uu2+qQ2iqZUtamXEpSlLiYxjGMU/kIfP/9k=" transform="matrix(0.24 0 0 0.24 -2 -2)">
</image>
</g>
</mask>
<g opacity="0.5" mask="url(#SVGID_2_)">
<rect width="80" height="80"/>
</g>
</g>
</g>
<g id="grid" display="none">
</g>
<g id="pfade">
<g>
<path fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" d="
M45.532,59.186"/>
<polyline fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
57,61.093 23,61.093 23,18 47.31,18 57,27.199 57,61.093 "/>
<polyline fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="
47,18 47,27 57,27 "/>
<g>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="28.303" y1="30.763" x2="31.349" y2="33.81"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="31.274" y1="30.763" x2="28.229" y2="33.81"/>
</g>
<g>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="28.303" y1="39.272" x2="31.349" y2="42.318"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="31.274" y1="39.272" x2="28.229" y2="42.318"/>
</g>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="34.25" y1="32.5" x2="50.25" y2="32.5"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="34.25" y1="40.5" x2="50.25" y2="40.5"/>
<g>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="28.303" y1="47.677" x2="31.349" y2="50.723"/>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="31.274" y1="47.677" x2="28.229" y2="50.723"/>
</g>
<line fill="none" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="34.25" y1="49.5" x2="50.25" y2="49.5"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.9 KiB

View File

@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="pfade" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="80px" height="80px" viewBox="0 0 80 80" enable-background="new 0 0 80 80" xml:space="preserve">
<g>
<g>
<polygon fill="#4794da" points="40.109,22.833 40.069,22.833 33.69,29.333 18.5,29.333 18.5,60.833 61.5,60.833
61.5,35.577 61.5,29.273 61.5,22.833 "/>
</g>
<defs>
<filter id="Adobe_OpacityMaskFilter" filterUnits="userSpaceOnUse" x="18.5" y="22.833" width="43" height="38">
<feColorMatrix type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" color-interpolation-filters="sRGB" result="source"/>
</filter>
</defs>
<mask maskUnits="userSpaceOnUse" x="18.5" y="22.833" width="43" height="38" id="SVGID_2_">
<g filter="url(#Adobe_OpacityMaskFilter)">
<image overflow="visible" width="196" height="175" xlink:href="data:image/jpeg;base64,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
nEziZxM4mcTEP89+f+v3WC9/H+79Puf/2Q==" transform="matrix(0.24 0 0 0.24 16.5 20.8335)">
</image>
</g>
</mask>
<!--<g opacity="0.5" mask="url(#SVGID_2_)">
<polygon points="40.109,22.833 40.069,22.833 33.69,29.333 18.5,29.333 18.5,60.833 61.5,60.833 61.5,35.577 61.5,29.273
61.5,22.833 "/>
</g>-->
</g>
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.5" y1="39.833" x2="52.5" y2="39.833"/>
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.5" y1="45.833" x2="52.5" y2="45.833"/>
<line fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.5" y1="51.833" x2="52.5" y2="51.833"/>
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="pfade" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="80px" height="80px" viewBox="0 0 80 80" enable-background="new 0 0 80 80" xml:space="preserve">
<g>
<image overflow="visible" opacity="0.4" width="230" height="209" xlink:href="data:image/png;base64,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" transform="matrix(0.24 0 0 0.24 13.5 17.8335)">
</image>
<g>
<polygon fill="#f6f7f8" points="40.109,22.833 40.069,22.833 33.69,29.333 18.5,29.333 18.5,60.833 61.5,60.833
61.5,35.577 61.5,29.273 61.5,22.833 "/>
</g>
</g>
<line fill="none" stroke="#4794DA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.5" y1="39.833" x2="52.5" y2="39.833"/>
<line fill="none" stroke="#4794DA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.5" y1="45.833" x2="52.5" y2="45.833"/>
<line fill="none" stroke="#4794DA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" x1="25.5" y1="51.833" x2="52.5" y2="51.833"/>
</svg>

After

Width:  |  Height:  |  Size: 7.1 KiB

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="pfade" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="80px" height="80px" viewBox="0 0 80 80" enable-background="new 0 0 80 80" xml:space="preserve">
<g>
<g>
<polygon fill="#4794da" points="40.109,22.833 40.069,22.833 33.69,29.333 18.5,29.333 18.5,60.833 61.5,60.833
61.5,35.577 61.5,29.273 61.5,22.833 "/>
</g>
<defs>
<filter id="Adobe_OpacityMaskFilter" filterUnits="userSpaceOnUse" x="18.5" y="22.833" width="43" height="38">
<feColorMatrix type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" color-interpolation-filters="sRGB" result="source"/>
</filter>
</defs>
<mask maskUnits="userSpaceOnUse" x="18.5" y="22.833" width="43" height="38" id="SVGID_2_">
<g filter="url(#Adobe_OpacityMaskFilter)">
<image overflow="visible" width="196" height="175" xlink:href="data:image/jpeg;base64,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
nEziZxM4mcTEP89+f+v3WC9/H+79Puf/2Q==" transform="matrix(0.24 0 0 0.24 16.5 20.8335)">
</image>
</g>
</mask>
<!--<g opacity="0.5" mask="url(#SVGID_2_)">
<polygon points="40.109,22.833 40.069,22.833 33.69,29.333 18.5,29.333 18.5,60.833 61.5,60.833 61.5,35.577 61.5,29.273
61.5,22.833 "/>
</g>-->
</g>
<polyline fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="35.5,51.833 45.833,51.833 45.833,35.833"/>
<polyline fill="none" stroke="#FFFFFF" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="39.833,41.833 45.833,35.833 51.833,41.833"/>
</svg>

After

Width:  |  Height:  |  Size: 4.6 KiB

View File

@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="pfade" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="80px" height="80px" viewBox="0 0 80 80" enable-background="new 0 0 80 80" xml:space="preserve">
<g>
<image overflow="visible" opacity="0.4" width="230" height="209" xlink:href="data:image/png;base64,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" transform="matrix(0.24 0 0 0.24 13.5 17.8335)">
</image>
<g>
<polygon fill="#f6f7f8" points="40.109,22.833 40.069,22.833 33.69,29.333 18.5,29.333 18.5,60.833 61.5,60.833
61.5,35.577 61.5,29.273 61.5,22.833 "/>
</g>
</g>
<polyline fill="none" stroke="#4794DA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="35.5,51.833 45.833,51.833 45.833,35.833"/>
<polyline fill="none" stroke="#4794DA" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" points="39.833,41.833 45.833,35.833 51.833,41.833"/>
</svg>

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@@ -0,0 +1,248 @@
.TcHmi_Controls_Helpers_DirectoryBrowser-path-display {
--tchmi-background-color: var(--tchmi-background-color-4);
--tchmi-text-color: var(--tchmi-foreground-color-4);
--tchmi-item-color: var(--tchmi-background-color-2);
--tchmi-active-text-color: var(--tchmi-foreground-color-2);
--tchmi-active-item-color: var(--tchmi-highlight-color-1);
--tchmi-hover-color: var(--tchmi-foreground-color-3);
--tchmi-border-color: var(--tchmi-background-color-2);
background-color: var(--tchmi-background-color);
border: 1px solid var(--tchmi-border-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li a {
color: var(--tchmi-text-color);
background: var(--tchmi-item-color);
text-decoration: none;
text-align: center;
background-repeat: no-repeat;
background-size: calc(var(--tchmi-path-display-height) - 8px);
background-position: right center;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li.folder a {
background-image: url('Images/folder.svg');
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li.file a {
background-image: url('Images/file.svg');
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:nth-child(even) a {
background-color: var(--tchmi-item-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:nth-child(even) a:before {
border-color: var(--tchmi-item-color);
border-left-color: transparent;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:nth-child(even) a:after {
border-left-color: var(--tchmi-item-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:first-child a {
border-radius: 4px 0 0 4px;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:first-child a:before {
border: none;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:last-child a {
border-radius: 0 4px 4px 0;
background-color: var(--tchmi-active-item-color);
color: var(--tchmi-active-text-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li.folder:last-child a {
background-image: url('Images/folder_active.svg');
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li.file:last-child a {
background-image: url('Images/file_active.svg');
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:last-child a:after {
border: none;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li a:before,
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li a:after {
border: 0 solid var(--tchmi-item-color);
border-width: calc((var(--tchmi-path-display-height) - 8px) / 2)
calc((var(--tchmi-path-display-height) - 8px) / 3 + 1px);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:last-child a:before {
border-color: var(--tchmi-active-item-color);
border-left-color: transparent;
color: var(--tchmi-active-text-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li a:before {
border-left-color: transparent;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li a:after {
border-color: transparent;
border-left-color: var(--tchmi-item-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:not(:last-child) a:hover {
background-color: var(--tchmi-hover-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:not(:last-child) a:hover:before {
border-color: var(--tchmi-hover-color);
border-left-color: transparent;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-path-display-item-list li:not(:last-child) a:hover:after {
border-left-color: var(--tchmi-hover-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display {
--tchmi-item-background: var(--tchmi-background-color-3);
--tchmi-text-color: var(--tchmi-foreground-color-4);
--tchmi-item-hover-background: var(--tchmi-background-color-2);
--tchmi-item-active-background: var(--tchmi-highlight-color-1);
--tchmi-active-text-color: var(--tchmi-foreground-color-2);
--tchmi-metadata-text-color: var(--tchmi-foreground-color-1);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li {
background-color: var(--tchmi-item-background);
color: var(--tchmi-text-color);
text-decoration: none;
background-repeat: no-repeat;
background-size: 60px;
background-position: 0px -10px;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li span {
color: var(--tchmi-metadata-text-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li:hover {
background-color: var(--tchmi-item-hover-background);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.selected,
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.current {
background-color: var(--tchmi-item-active-background);
color: var(--tchmi-active-text-color);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.folder {
background-image: url(Images/folder.svg);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.folder[data-is-parent='true'] {
background-image: url(Images/parent_folder.svg);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.folder.selected,
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.folder.current {
background-image: url(Images/folder_active.svg);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.file {
background-image: url(Images/file.svg);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.file.selected,
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.file.current {
background-image: url(Images/file_active.svg);
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.dragging {
background-color: var(--tchmi-item-active-background);
color: var(--tchmi-active-text-color);
opacity: 0.5;
}
ul.TcHmi_Controls_Helpers_DirectoryBrowser-browsing-display li.drop-zone {
background-color: var(--tchmi-item-active-background);
color: var(--tchmi-active-text-color);
}
div.TcHmi_Controls_Helpers_DirectoryBrowser-tree-browsing-display {
--tchmi-text-color: var(--tchmi-foreground-color-1);
--tchmi-group-line-color: var(--tchmi-background-color-3);
--tchmi-hover-color: var(--tchmi-background-color-1);
--tchmi-selected-color: var(--tchmi-background-color-2);
--tchmi-current-item-color: var(--tchmi-highlight-color-1);
--tchmi-current-item-text-color: var(--tchmi-foreground-color-2);
color: var(--tchmi-text-color);
label {
background-size: contain;
background-repeat: no-repeat;
padding-left: var(--tchmi-row-height);
}
summary > label {
background-image: url('Images/folder.svg');
}
div > label {
background-image: url('Images/file.svg');
}
/* It's important to use the > operator, otherwise all labels below the current item will have the active icon. */
summary.current > label {
background-image: url('Images/folder_active.svg');
}
div.current > label {
background-image: url('Images/file_active.svg');
}
/*
Enable hover styles only on devices where the primary pointer is something like a mouse. If we enable hover
styles generally, rows will have a sticky hover effect after expanding or collapsing them on a touch device.
Unfortunately our laptops always declare the mouse as the primary pointer, even if you use the touch screen, so
this media query only has an effect on devices which are primarily used with touch.
*/
@media (hover: hover) {
:where(summary, div):hover {
background: var(--tchmi-hover-color);
}
}
.selected {
background: var(--tchmi-selected-color);
}
.current {
background: var(--tchmi-current-item-color);
color: var(--tchmi-current-item-text-color);
}
.group-lines span {
/* By default, group lines are created as an L-shape. */
border: 1px solid var(--tchmi-group-line-color);
border-top: none;
border-right: none;
/*
Then group lines that are not the last group line in front of the item name have their bottom border
removed, creating an |-shape.
*/
&:not(:last-child) {
border-bottom: none;
}
}
div > .expander {
border: 1px solid var(--tchmi-text-color);
border-radius: 4px;
}
details > summary > .expander {
border: 1px solid var(--tchmi-text-color);
border-top: none;
border-left: none;
}
}

View File

@@ -0,0 +1,199 @@
/**
* InteractiveWritePrompt
*/
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Content-Container-Grid {
width: 500px;
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-template-rows: auto auto auto;
column-gap: 20px;
grid-template-areas:
'user reviewer'
'value value'
'ainfo ainfo';
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Content-Container-Grid:has(
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Content-Container-Reviewer[style*='display: none']
) {
grid-template-areas:
'user value'
'ainfo ainfo';
grid-template-rows: auto auto;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Content-Container-Grid:has(
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Content-Container-User[style*='display: none']
) {
grid-template-columns: 1fr;
grid-template-areas:
'value'
'ainfo';
grid-template-rows: auto auto;
}
@media (max-width: 640px) {
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Content-Container-Grid {
width: 250px;
grid-template-columns: 1fr;
grid-template-areas:
'user'
'reviewer'
'value'
'ainfo';
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Content-Container-Grid:has(
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Content-Container-Reviewer[style*='display: none']
) {
grid-template-areas:
'user'
'value'
'ainfo';
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Content-Container-Grid:has(
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Content-Container-User[style*='display: none']
) {
grid-template-areas:
'value'
'ainfo';
}
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Content-Container-User {
grid-area: user;
width: 240px;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Content-Container-Reviewer {
grid-area: reviewer;
width: 240px;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Content-Container-Value {
grid-area: value;
width: 240px;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Content-Container-Additional-Information {
grid-area: ainfo;
min-width: 240px;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Symbol-Headline-Container h2 {
margin-bottom: 5px;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Symbol-Headline-Container {
display: flex;
align-items: center;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Symbol-Progress-Container {
width: 20px;
height: 20px;
margin-left: 5px;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Loading-Spinner-Container-Container {
width: 64px;
height: 64px;
margin-left: -22px;
margin-top: -22px;
transform: scale(0.25);
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Message {
margin-bottom: 10px;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Auth-Input-Username {
margin-bottom: 5px;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Auth-Combobox-Username {
margin-bottom: 5px;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Auth-Input-Password {
margin-bottom: 5px;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Textblock-PrevValue {
margin-bottom: 5px;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Editor-Container {
min-width: 240px;
height: 26px;
margin-bottom: 5px;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Auth-Textbox-Comment {
margin-bottom: 5px;
}
/**
Loading Spinner
Usage: <div class="TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Loading-Spinner-Container"><div class="TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Loading-Spinner"><div></div><div></div><div></div><div></div></div></div>
*/
@keyframes TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Loading-Spinner {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Loading-Spinner-Container {
position: relative;
width: 100%;
height: 100%;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Loading-Spinner {
display: inline-block;
width: 64px;
height: 64px;
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
max-width: 100%;
max-height: 100%;
overflow: hidden;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Loading-Spinner div {
box-sizing: border-box;
display: block;
position: absolute;
width: 51px;
height: 51px;
margin: 6px;
border: 6px solid var(--TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Loading-Spinner-Color);
border-radius: 50%;
animation: TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Loading-Spinner 1.2s cubic-bezier(0.5, 0, 0.5, 1)
infinite;
border-color: var(--TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Loading-Spinner-Color) transparent
transparent transparent;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Loading-Spinner div:nth-child(1) {
animation-delay: -0.45s;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Loading-Spinner div:nth-child(2) {
animation-delay: -0.3s;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Loading-Spinner div:nth-child(3) {
animation-delay: -0.15s;
}

View File

@@ -0,0 +1,181 @@
// Compatibility file for non-module typescript compiles without adjustments.
// Use the following line for modern code (needs adjustments to tsconfig.json#configOptions/paths)
// import { TcHmiControl } from "Beckhoff.TwinCAT.HMI.Framework/index.esm.js";
// ***************************************************************************
/**
* Creates a prompt for writing to a symbol that requires either reauthentication or additional audit trail input like a comment.
* Symbol will be written via an isolated websocket and the prompt will ask for reauthentication credentials if
* this is required, allow adding further information and adjusting the new value before writing.
* This prompt is not meant to be used directly but it is part of the UiProvider.PopupProvider for customization.
* The framework will call the prompt via a queue system for any write request to this symbol when its necessary.
*/
export declare class InteractiveWritePrompt extends OkCancelPrompt<TcHmi.UiProvider.PopupProvider.InteractiveWritePrompt.Value, TcHmi.UiProvider.PopupProvider.InteractiveWritePrompt.Value> {
/**
* Creates a new InputPrompt instance.
* @param parentControl The control which owns the popup.
*/
constructor(symbol: TcHmi.UiProvider.PopupProvider.InteractiveWritePrompt.Symbol, options?: TcHmi.UiProvider.PopupProvider.InteractiveWritePrompt.Options | null, parentControl?: TcHmi.Controls.System.TcHmiControl | null);
protected __texts: Partial<InteractiveWritePrompt.LocalizableTexts> | null;
protected __controlTextblockMessageGeneral: TcHmiTextblock | null;
protected __options: TcHmi.UiProvider.PopupProvider.InteractiveWritePrompt.Options | null;
protected __symbolName: string | null;
protected __schema: TcHmi.JsonSchema | null;
protected __reauthenticationRequired: boolean;
protected __reviewerGroups: string[] | null;
protected __commentRequired: boolean;
protected __domainUserNames: TcHmi.Dictionary<string[]> | null;
protected __reviewerDomainUserNames: TcHmi.Dictionary<string[]> | null;
protected __defaultDomain: string | null;
protected __targetDomain: string | null;
protected __targetReviewerDomain: string | null;
protected __result: TcHmi.Server.IValueResultObject | undefined;
protected __error: TcHmi.IErrorDetails | null;
protected __done: boolean;
protected __editorNewValue: Editor<any, Editor.EditorInfo> | null;
protected __editorPrevValue: Editor<any, Editor.EditorInfo> | null;
protected __controlTextblockSymbolName: TcHmiTextblock | null;
protected __controlTextblockDescription: TcHmiTextblock | null;
protected __controlTextblockMessage: TcHmiTextblock | null;
protected __controlTextboxComment: TcHmiTextbox | null;
protected __controlInputUsername: TcHmiInput | null;
protected __controlComboboxUsername: TcHmiCombobox<string, string[]> | null;
protected __controlInputPassword: TcHmiPasswordInput | null;
protected __controlTextblockDomainLabel: TcHmiTextblock | null;
protected __controlComboboxDomain: TcHmiCombobox<string, string[]> | null;
protected __controlTextblockUsernameLabel: TcHmiTextblock | null;
protected __controlInputReviewerUsername: TcHmiInput | null;
protected __controlComboboxReviewerUsername: TcHmiCombobox<string, string[]> | null;
protected __controlInputReviewerPassword: TcHmiPasswordInput | null;
protected __controlTextblockReviewerDomainLabel: TcHmiTextblock | null;
protected __controlComboboxReviewerDomain: TcHmiCombobox<string, string[]> | null;
protected __controlTextblockReviewerUsernameLabel: TcHmiTextblock | null;
protected __controlTextblockPrevValueLabel: TcHmiTextblock | null;
protected __controlTextblockNewValueLabel: TcHmiTextblock | null;
protected __controlTextblockCommentLabel: TcHmiTextblock | null;
protected __controlTextblockPasswordLabel: TcHmiTextblock | null;
protected __controlTextblockReviewerPasswordLabel: TcHmiTextblock | null;
protected __elementContentContainerUser: HTMLElement | null;
protected __elementContentContainerReviewer: HTMLElement | null;
protected __elementContentContainerValue: HTMLElement | null;
protected __elementContentContainerAdditionalInformation: HTMLElement | null;
protected __elementHeadlineUser: HTMLElement | null;
protected __elementHeadlineReviewer: HTMLElement | null;
protected __elementHeadlineValue: HTMLElement | null;
protected __elementHeadlineAdditionalInformation: HTMLElement | null;
protected __elementNewValueEditorContainer: HTMLElement | null;
protected __elementPrevValueEditorContainer: HTMLElement | null;
protected __elementProgressContainer: HTMLElement | null;
protected __elementLoadingSpinnerContainerContainer: HTMLElement | null;
protected __destroyComboboxDomainSelectionChanged: TcHmi.DestroyFunction | null;
protected __destroyReviewerComboboxDomainSelectionChanged: TcHmi.DestroyFunction | null;
/**
* Destroys the popup and all its controls.
* @param force If true, child controls will be removed from the parent control before destruction, to ensure destruction in case of keepAlive === true.
*/
destroy(force?: boolean): void;
/**
* Raised when domain selection changes.
*/
protected __onComboboxDomainSelectionChanged(_event: TcHmi.EventProvider.Event, data: {
id: number | null;
text: string | null;
value: any;
}): void;
/**
* Raised when domain selection changes.
*/
protected __onComboboxReviewerDomainSelectionChanged(_event: TcHmi.EventProvider.Event, data: {
id: number | null;
text: string | null;
value: any;
}): void;
/**
* Performs the action for the OK button, i.e. calling prompt.answer().
*/
protected __ok(): void;
/**
* Performs the action for the Cancel button.
*/
protected __cancel(): void;
/**
* Shows an overall error message
* @param message
*/
protected __showError(message: string): void;
/**
* Clear existing overall error message
* @param message
*/
protected __clearError(): void;
/**
* Enables all controls for a specified symbol area.
* @param symbol
*/
protected __enableSymbolControls(): void;
/**
* Disables all controls for a specified symbol area.
* @param symbol
*/
protected __disableSymbolControls(): void;
/**
* Enables all controls for a specified symbol area.
* @param focus Controls whether focus should be moved to one of the popups inputs.
*/
protected __showSymbolControls(focus?: boolean): void;
/**
* Disables all controls for a specified symbol area.
* @param symbol
*/
protected __hideSymbolControls(): void;
/**
* Shows the loading state for a symbol area.
* @param symbol
*/
protected __showSymbolLoading(): void;
/**
* Shows an error message for a specified symbol area and disables all related controls.
* @param symbol
* @param message
*/
protected __showSymbolError(message: string): void;
/**
* Clears an error message for a specified symbol area and enables all related controls.
* @param symbol
* @param message
*/
protected __showSymbolSuccess(): void;
/**
* Clears an error message for a specified symbol area and enables all related controls.
* @param symbol
* @param message
*/
protected __showSymbolReady(): void;
/**
*
* @param texts
*/
setTexts(texts: Partial<InteractiveWritePrompt.LocalizableTexts>): void;
}
export declare namespace InteractiveWritePrompt {
interface LocalizableTexts extends OkCancelPrompt.LocalizableTexts {
headerText: TcHmi.Localizable;
editorTexts: Partial<Editor.LocalizableTexts>;
}
}
import _InteractiveWritePrompt = InteractiveWritePrompt;
declare global {
namespace TcHmi.Controls.Helpers {
let InteractiveWritePrompt: typeof _InteractiveWritePrompt;
type InteractiveWritePrompt = _InteractiveWritePrompt;
namespace InteractiveWritePrompt {
type LocalizableTexts = _InteractiveWritePrompt.LocalizableTexts;
}
}
}

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="26px" height="26px" viewBox="0 0 26 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#f52833" stroke-width="1.05" fill="none" transform="translate(5, 5)">
<line x1="0.5" y1="0.5" x2="15.5" y2="15.5" />
<line x1="0.5" y1="15.5" x2="15.5" y2="0.5" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 383 B

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 49.3 (51167) - http://www.bohemiancoding.com/sketch -->
<title>verify bg less</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="verify-bg-less" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="backgrounds"></g>
<g id="icon-status" transform="translate(6.000000, 6.000000)" fill="#2fad33">
<g id="normal">
<g id="icon-base">
<path d="M4.67178333,17.747775 C4.66228333,17.747775 4.65187857,17.747325 4.64237857,17.746875 C4.49399762,17.737425 4.36099762,17.655975 4.28454524,17.529975 L0.0647357143,10.557225 C-0.0641928571,10.344825 0.00502142857,10.068075 0.218997619,9.939825 C0.432521429,9.811125 0.710735714,9.880425 0.839664286,10.093275 L4.72380714,16.511175 L17.8247595,0.169425 C17.9817357,-0.024975 18.2662833,-0.056025 18.4603548,0.097875 C18.6562357,0.253125 18.6879024,0.536175 18.5327357,0.730575 L5.02554524,17.578125 C4.93959286,17.685675 4.80885476,17.747775 4.67178333,17.747775" id="Fill-1"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,57 @@
/**
* InteractiveWritePrompt
*/
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Loading-Spinner {
--TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Loading-Spinner-Color: var(--tchmi-foreground-color-2);
}
.TcHmi_Controls_Helpers_Popup-InteractiveWritePrompt .TcHmi_Controls_Helpers_Popup-content,
.TcHmi_Controls_Helpers_Popup-InteractiveWritePrompt .TcHmi_Controls_Beckhoff_TcHmiTextblock {
--tchmi-color: var(--tchmi-foreground-color-1);
color: var(--tchmi-color);
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Editor-Container {
--tchmi-control-background: var(--tchmi-background-color-1);
--tchmi-pane-background: var(--tchmi-background-color-4);
--tchmi-header-background: var(--tchmi-highlight-color-1);
--tchmi-seperator-background: var(--tchmi-foreground-color-1);
--tchmi-cell-background: var(--tchmi-background-color-4);
--tchmi-selected-background: var(--tchmi-background-color-2);
--tchmi-highlight-background: var(--tchmi-highlight-color-1);
--tchmi-highlight-background-pressed: var(--tchmi-highlight-color-2);
--tchmi-invalid-background: var(--tchmi-error-color);
--tchmi-invalid-background-pressed: var(--tchmi-invalid-color);
--tchmi-text-color: var(--tchmi-foreground-color-1);
--tchmi-contrasting-text-color: var(--tchmi-foreground-color-2);
--tchmi-disabled-text-color: var(--tchmi-foreground-color-3);
--tchmi-cell-border-color: var(--tchmi-background-color-3);
--tchmi-input-background-invalid: var(--tchmi-invalid-color);
--tchmi-border-color: var(--tchmi-background-color-2);
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Textblock-PrevValue {
background-color: var(--tchmi-background-color-3);
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Symbol-Progress-Success {
background-image: url(Images/success.svg);
background-repeat: no-repeat;
background-position: center;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Symbol-Progress-Failure {
background-image: url(Images/failure.svg);
background-repeat: no-repeat;
background-position: center;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Message-Error {
color: var(--tchmi-error-color) !important;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-SymbolName {
font-size: 10px;
opacity: 0.7;
}

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="26px" height="26px" viewBox="0 0 26 26" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#f52833" stroke-width="1.05" fill="none" transform="translate(5, 5)">
<line x1="0.5" y1="0.5" x2="15.5" y2="15.5" />
<line x1="0.5" y1="15.5" x2="15.5" y2="0.5" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 383 B

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 49.3 (51167) - http://www.bohemiancoding.com/sketch -->
<title>verify bg less</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="verify-bg-less" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="backgrounds"></g>
<g id="icon-status" transform="translate(6.000000, 6.000000)" fill="#2fad33">
<g id="normal">
<g id="icon-base">
<path d="M4.67178333,17.747775 C4.66228333,17.747775 4.65187857,17.747325 4.64237857,17.746875 C4.49399762,17.737425 4.36099762,17.655975 4.28454524,17.529975 L0.0647357143,10.557225 C-0.0641928571,10.344825 0.00502142857,10.068075 0.218997619,9.939825 C0.432521429,9.811125 0.710735714,9.880425 0.839664286,10.093275 L4.72380714,16.511175 L17.8247595,0.169425 C17.9817357,-0.024975 18.2662833,-0.056025 18.4603548,0.097875 C18.6562357,0.253125 18.6879024,0.536175 18.5327357,0.730575 L5.02554524,17.578125 C4.93959286,17.685675 4.80885476,17.747775 4.67178333,17.747775" id="Fill-1"></path>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,57 @@
/**
* InteractiveWritePrompt
*/
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Loading-Spinner {
--TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Loading-Spinner-Color: var(--tchmi-foreground-color-1);
}
.TcHmi_Controls_Helpers_Popup-InteractiveWritePrompt .TcHmi_Controls_Helpers_Popup-content,
.TcHmi_Controls_Helpers_Popup-InteractiveWritePrompt .TcHmi_Controls_Beckhoff_TcHmiTextblock {
--tchmi-color: var(--tchmi-foreground-color-1);
color: var(--tchmi-color);
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Editor-Container {
--tchmi-control-background: var(--tchmi-background-color-1);
--tchmi-pane-background: var(--tchmi-background-color-4);
--tchmi-header-background: var(--tchmi-highlight-color-1);
--tchmi-seperator-background: var(--tchmi-foreground-color-1);
--tchmi-cell-background: var(--tchmi-background-color-4);
--tchmi-selected-background: var(--tchmi-background-color-2);
--tchmi-highlight-background: var(--tchmi-highlight-color-1);
--tchmi-highlight-background-pressed: var(--tchmi-highlight-color-2);
--tchmi-invalid-background: var(--tchmi-error-color);
--tchmi-invalid-background-pressed: var(--tchmi-invalid-color);
--tchmi-text-color: var(--tchmi-foreground-color-1);
--tchmi-contrasting-text-color: var(--tchmi-foreground-color-2);
--tchmi-disabled-text-color: var(--tchmi-foreground-color-3);
--tchmi-cell-border-color: var(--tchmi-background-color-3);
--tchmi-input-background-invalid: var(--tchmi-invalid-color);
--tchmi-border-color: var(--tchmi-background-color-2);
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Textblock-PrevValue {
background-color: var(--tchmi-background-color-3);
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Symbol-Progress-Success {
background-image: url(Images/success.svg);
background-repeat: no-repeat;
background-position: center;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Symbol-Progress-Failure {
background-image: url(Images/failure.svg);
background-repeat: no-repeat;
background-position: center;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-Message-Error {
color: var(--tchmi-error-color) !important;
}
.TcHmi_Controls_Helpers_Popup_InteractiveWritePrompt-SymbolName {
font-size: 10px;
opacity: 0.7;
}

View File

@@ -0,0 +1,180 @@
.TcHmi_Controls_Helpers_Editor {
position: relative;
}
.TcHmi_Controls_Helpers_Editor .compound-control-container,
.TcHmi_Controls_Helpers_Editor.compound-control-container {
width: 100%;
height: 100%;
position: relative;
display: flex;
}
.TcHmi_Controls_Helpers_Editor .TcHmi_Controls_System_TcHmiControl {
width: 100%;
height: 100%;
position: relative;
}
.TcHmi_Controls_Helpers_Editor .compound-control-container .TcHmi_Controls_Beckhoff_TcHmiButton,
.TcHmi_Controls_Helpers_Editor .compound-control-container .TcHmi_Controls_Beckhoff_TcHmiCheckbox,
.TcHmi_Controls_Helpers_Editor.compound-control-container .TcHmi_Controls_Beckhoff_TcHmiButton,
.TcHmi_Controls_Helpers_Editor.compound-control-container .TcHmi_Controls_Beckhoff_TcHmiCheckbox {
flex-shrink: 0;
}
.TcHmi_Controls_Helpers_Editor .TcHmi_Controls_Beckhoff_TcHmiCombobox.type-combobox {
flex-basis: 70px;
flex-shrink: 0;
flex-grow: 1;
}
.TcHmi_Controls_Helpers_Editor .choice-sub-editor {
flex-basis: 100%;
}
.TcHmi_Controls_Helpers_Editor .compound-control-container .value-description,
.TcHmi_Controls_Helpers_Editor.compound-control-container .value-description {
width: 100%;
height: 100%;
box-sizing: border-box;
display: flex;
align-items: center;
white-space: nowrap;
text-overflow: ellipsis;
padding: 3px;
}
.TcHmi_Controls_Helpers_Editor .compound-control-container .value-editor,
.TcHmi_Controls_Helpers_Editor.compound-control-container .value-editor {
width: 100%;
}
.TcHmi_Controls_Helpers_Editor .new-property-container {
display: none;
height: 30px;
}
.TcHmi_Controls_Helpers_Editor .new-property-container.show {
display: flex;
}
.TcHmi_Controls_Helpers_Editor .new-property-container .TcHmi_Controls_Beckhoff_TcHmiButton {
flex-shrink: 0;
margin-left: 5px;
}
.TcHmi_Controls_Helpers_Editor .new-property-container + .TcHmi_Controls_Beckhoff_TcHmiButton {
margin-left: 3px;
margin-bottom: 3px;
}
.TcHmi_Controls_Helpers_Editor .validation-errors {
max-height: 150px;
white-space: pre;
overflow: auto;
}
.TcHmi_Controls_Helpers_Editor .validation-errors:empty {
display: none;
}
.TcHmi_Controls_Helpers_Editor .TcHmi_Controls_Helpers_DirectoryBrowser-path-display {
flex-grow: 1;
--tchmi-path-display-height: 31px;
}
.TcHmi_Controls_Helpers_Editor.disabled .TcHmi_Controls_Helpers_DirectoryBrowser-path-display::after {
content: '';
position: absolute;
top: 0px;
left: 0px;
width: 100%;
height: 100%;
z-index: 100;
}
.TcHmi_Controls_Helpers_Editor-editor-table {
border-collapse: collapse;
margin-bottom: 3px;
width: 100%;
counter-reset: auto-increment-index -1;
}
.TcHmi_Controls_Helpers_Editor-editor-table td {
height: 30px;
padding: 2.5px;
}
.TcHmi_Controls_Helpers_Editor-editor-table td:empty {
padding: 0;
}
.TcHmi_Controls_Helpers_Editor-editor-table td.name-cell {
text-align: right;
padding-left: 5px;
padding-right: 5px;
}
.TcHmi_Controls_Helpers_Editor-editor-table td.name-cell.auto-increment-index::before {
counter-increment: auto-increment-index;
content: counter(auto-increment-index);
}
.TcHmi_Controls_Helpers_Editor-editor-table td.value-cell {
min-width: 250px;
padding-right: 0;
}
.TcHmi_Controls_Helpers_Editor-editor-table td.value-cell .TcHmi_Controls_System_TcHmiControl {
width: 100%;
height: 100%;
position: relative;
}
.TcHmi_Controls_Helpers_Editor-editor-table td.remove-cell:not(:empty) {
width: 30px;
padding-right: 0;
padding-left: 5px;
}
.TcHmi_Controls_Helpers_Editor-editor-table-buttons {
display: grid;
grid-template-columns: 1fr auto auto;
}
.TcHmi_Controls_Helpers_Editor-editor-table-buttons .TcHmi_Controls_Beckhoff_TcHmiButton:not(:first-child) {
margin-left: 5px;
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane {
overflow: auto;
height: 100%;
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane table {
border-spacing: 0;
width: 100%;
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane th {
position: sticky;
top: 0;
z-index: 1;
height: 30px;
border-width: 0px;
padding: 0 3px;
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane td {
padding: 0 3px;
height: 30px;
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane td[data-name='recording'] {
text-align: center;
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane td[data-name='maxEntries'] {
text-align: end;
}

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#FFFFFF" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(5.000000, 5.000000)">
<path d="M 0.5,8.5 L 8.5,8.5 L 8.5,0.5 L 11.5,0.5 L 11.5,8.5 L 19.5,8.5 L 19.5,11.5 L 11.5,11.5 L 11.5,19.5 L 8.5,19.5 L 8.5,11.5 L 0.5,11.5 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 467 B

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#000000" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(5.000000, 5.000000)">
<path d="M 0.5,8.5 L 8.5,8.5 L 8.5,0.5 L 11.5,0.5 L 11.5,8.5 L 19.5,8.5 L 19.5,11.5 L 11.5,11.5 L 11.5,19.5 L 8.5,19.5 L 8.5,11.5 L 0.5,11.5 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 468 B

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="time-span-picker-bg-less" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="icon-status" transform="translate(6.000000, 5.000000)" fill="#ffffff">
<path d="M13.0368925,18.8781263 C9.75174991,18.8781263 7.07916266,16.2559652 7.07916266,13.0328064 C7.07916266,9.80919028 9.75174991,7.1870292 13.0368925,7.1870292 C14.8251438,7.1870292 16.427857,7.96777732 17.5210399,9.19538596 L12.9837484,12.7213305 L9.8337969,11.1218717 C9.60397211,11.0056971 9.32333413,11.0939715 9.20539159,11.3180878 C9.08698288,11.5422041 9.17648868,11.8184618 9.40491494,11.9346364 L12.8224515,13.6694798 C12.8905132,13.7037833 12.9637029,13.7207063 13.0368925,13.7207063 C13.1399174,13.7207063 13.24201,13.6868602 13.3263878,13.6219122 L18.077654,9.93039605 C18.6557123,10.8305204 18.9950885,11.8925574 18.9950885,13.0328064 C18.9950885,16.2559652 16.3225012,18.8781263 13.0368925,18.8781263 Z M1.13681663,3.82940064 L1.13681663,2.45725984 L3.46769685,2.45725984 L3.46769685,2.9146401 C3.46769685,3.16711401 3.67607754,3.37202037 3.93387289,3.37202037 C4.19120207,3.37202037 4.40004894,3.16711401 4.40004894,2.9146401 L4.40004894,2.45725984 L11.3926896,2.45725984 L11.3926896,2.9146401 C11.3926896,3.16711401 11.6010703,3.37202037 11.8588656,3.37202037 C12.1161948,3.37202037 12.3250417,3.16711401 12.3250417,2.9146401 L12.3250417,2.45725984 L14.1897458,2.45725984 L14.1897458,3.82940064 L1.13681663,3.82940064 Z M15.1220979,6.63863026 L15.1220979,1.77393371 C15.1220979,1.52145981 15.0475098,1.5424993 14.7901806,1.5424993 L12.3250417,1.5424993 L12.3250417,0.62773876 C12.3250417,0.374807471 12.1161948,0.170358491 11.8588656,0.170358491 C11.6010703,0.170358491 11.3926896,0.374807471 11.3926896,0.62773876 L11.3926896,1.5424993 L4.40004894,1.5424993 L4.40004894,0.62773876 C4.40004894,0.374807471 4.19120207,0.170358491 3.93387289,0.170358491 C3.67607754,0.170358491 3.46769685,0.374807471 3.46769685,0.62773876 L3.46769685,1.5424993 L0.662249419,1.5424993 C0.404454067,1.5424993 0.204464544,1.52145981 0.204464544,1.77393371 L0.204464544,13.2646982 C0.204464544,13.5171721 0.404454067,13.8917666 0.662249419,13.8917666 L4.71098836,13.8917666 C4.96831753,13.8917666 5.1771644,13.6868602 5.1771644,13.4343863 C5.1771644,13.181455 4.96831753,12.977006 4.71098836,12.977006 L1.13681663,12.977006 L1.13681663,4.74416118 L14.1897458,4.74416118 L14.1897458,6.39484657 C13.7235698,6.31709193 13.4102995,6.27226866 12.969297,6.27226866 C9.17089456,6.27226866 6.11277972,9.30515722 6.11277972,13.0328064 C6.11277972,16.7604556 9.2207754,19.7928868 13.0201102,19.7928868 C16.8194449,19.7928868 19.8519201,16.7604556 19.8519201,13.0328064 C19.8519201,10.0676101 17.9191542,7.54790223 15.1220979,6.63863026 Z" id="Fill-1"></path>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#FFFFFF" stroke-width="1.1" fill="none" transform="translate(5, 5)">
<polyline points="0,5 10,15 20,5" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 319 B

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#000000" stroke-width="1.1" fill="none" transform="translate(5, 5)">
<polyline points="0,5 10,15 20,5" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 318 B

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#FFFFFF" stroke-width="1.1" fill="none" transform="translate(5, 5)">
<polyline points="0,15 10,5 20,15" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 320 B

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#000000" stroke-width="1.1" fill="none" transform="translate(5, 5)">
<polyline points="0,15 10,5 20,15" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 319 B

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#FFFFFF" stroke-width="1" fill="none" fill-rule="evenodd" transform="rotate(45, 15, 15) translate(5.000000, 5.000000)">
<path d="M 0.5,8.5 L 8.5,8.5 L 8.5,0.5 L 11.5,0.5 L 11.5,8.5 L 19.5,8.5 L 19.5,11.5 L 11.5,11.5 L 11.5,19.5 L 8.5,19.5 L 8.5,11.5 L 0.5,11.5 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 486 B

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#000000" stroke-width="1" fill="none" fill-rule="evenodd" transform="rotate(45, 15, 15) translate(5.000000, 5.000000)">
<path d="M 0.5,8.5 L 8.5,8.5 L 8.5,0.5 L 11.5,0.5 L 11.5,8.5 L 19.5,8.5 L 19.5,11.5 L 11.5,11.5 L 11.5,19.5 L 8.5,19.5 L 8.5,11.5 L 0.5,11.5 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 487 B

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="time-picker-bg-less" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="icon-status" transform="translate(5.000000, 5.000000)" fill="#ffffff">
<path d="M6.39997453,1.6 C6.44802978,1.6 6.50008963,1.58801822 6.54814488,1.5720425 C6.75237968,1.49216395 6.85249478,1.2565222 6.7724027,1.05283188 C6.69191016,0.849141561 6.45964313,0.745299437 6.25580879,0.829171922 C6.04756939,0.909050479 5.94745429,1.1406983 6.02754637,1.34438862 C6.09121957,1.50414573 6.23979038,1.6 6.39997453,1.6" id="Fill-1"></path>
<path d="M8.79979915,0.8 C8.81185016,0.8 8.82791817,0.8 8.84398618,0.795992162 C9.06492132,0.771945136 9.22198612,0.57556109 9.19748241,0.355130017 C9.17378209,0.134698944 8.97654726,-0.0216067259 8.75601382,0.00244030019 C8.53507868,0.0264873263 8.37801388,0.222871373 8.40251759,0.443302446 C8.4226026,0.647702168 8.59493202,0.8 8.79979915,0.8" id="Fill-3"></path>
<path d="M5.19986206,2 C5.26795682,2 5.33204601,1.98005871 5.3961352,1.94815264 C5.58880334,1.84046967 5.6568981,1.59718592 5.54834703,1.40574953 C5.44059708,1.21431314 5.19986206,1.14252449 5.00398947,1.25020746 C4.81132133,1.35789043 4.74322657,1.60117418 4.85137708,1.79261057 C4.92387798,1.92422309 5.05966695,2 5.19986206,2" id="Fill-5"></path>
<path d="M7.59950751,1.2 C7.63148946,1.2 7.66307163,1.19599667 7.69505358,1.18799001 C7.91093173,1.1359467 8.04285727,0.919766808 7.98728863,0.703586917 C7.93531797,0.491410358 7.71943982,0.359300425 7.50356167,0.411343732 C7.29128149,0.463387039 7.15935595,0.683570261 7.21132662,0.89574682 C7.25929954,1.07990006 7.41960905,1.2 7.59950751,1.2" id="Fill-7"></path>
<path d="M4.00001347,2.8 C4.08410047,2.8 4.16818746,2.77198504 4.24026203,2.71995725 C4.41644431,2.58788671 4.4524816,2.33575203 4.32034489,2.15965798 C4.18820818,1.98356392 3.93594719,1.94754468 3.7593645,2.07961523 C3.58358263,2.21168577 3.54754535,2.4598183 3.67968206,2.63991449 C3.7593645,2.74397007 3.87988919,2.8 4.00001347,2.8" id="Fill-9"></path>
<path d="M3.1988246,3.6 C3.29877582,3.6 3.4031249,3.5600509 3.47868802,3.4841476 C3.63900979,3.33234101 3.63900979,3.08066166 3.48708393,2.92086525 C3.33076021,2.76106883 3.07888313,2.76106883 2.91896117,2.91287542 C2.76303727,3.06867693 2.75903922,3.32035628 2.91496313,3.48015269 C2.99092606,3.5600509 3.09487533,3.6 3.1988246,3.6" id="Fill-11"></path>
<path d="M10,0 C9.96691402,0 9.93808196,0.0122887865 9.90688661,0.0189058254 C9.90357801,0.0189058254 9.90074207,0.0170152428 9.89696082,0.0170152428 C9.6355816,0.0170152428 9.42430401,0.228287841 9.42430401,0.489660877 L9.42430401,3.32553468 C9.42430401,3.58643507 9.6355816,3.79818031 9.89696082,3.79818031 C10.15834,3.79818031 10.3696176,3.58643507 10.3696176,3.32553468 L10.3696176,0.964197093 C15.1902444,1.16034503 19.0546864,5.13198629 19.0546864,10.0002363 C19.0546864,14.9927922 14.9926738,19.0547087 10,19.0547087 C5.00732618,19.0547087 0.945313608,14.9927922 0.945313608,10.0002363 C0.945313608,7.91492379 1.6708418,5.87971169 2.98860897,4.26940801 C3.15451151,4.06758833 3.12426147,3.76982158 2.92243702,3.6043956 C2.71966725,3.43896963 2.42236612,3.46874631 2.2574089,3.67103864 C2.21676041,3.72066643 2.18225646,3.77407539 2.14302595,3.82417582 C2.13499078,3.83079286 2.12459233,3.83315609 2.11702982,3.84024578 C2.07212743,3.88561976 2.03762348,3.93808342 2.0144633,3.99527354 C0.717493028,5.71995746 0,7.83268345 0,10.0002363 C0,15.5141203 4.48598573,20 10,20 C15.5140143,20 20,15.5141203 20,10.0002363 C20,4.48587971 15.5140143,0 10,0" id="Fill-13"></path>
<path d="M2.90318539,4.57504985 C2.73948566,4.77532009 2.77432555,5.06624383 2.98097856,5.22488746 L9.59339779,10.3000961 C9.67930435,10.3662362 9.78430127,10.4 9.88977544,10.4 C9.96470505,10.4 10.0396347,10.3833494 10.1093144,10.348198 L14.5425705,8.12533708 C14.7764272,8.00785754 14.8675836,7.72895926 14.7463599,7.50232549 C14.6256135,7.27522922 14.338781,7.18550075 14.1034925,7.30390533 L9.94418293,9.38939844 L3.57373386,4.49965943 C3.36708085,4.34147832 3.06688513,4.37524212 2.90318539,4.57504985" id="Fill-16"></path>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -0,0 +1,165 @@
.TcHmi_Controls_Helpers_Editor {
--tchmi-selected-background: var(--tchmi-background-color-2);
--tchmi-invalid-background: var(--tchmi-error-color);
--tchmi-invalid-background-pressed: var(--tchmi-invalid-color);
--tchmi-invalid-text-color: var(--tchmi-error-color);
--tchmi-disabled-text-color: var(--tchmi-foreground-color-3);
--tchmi-table-header-background: var(--tchmi-highlight-color-1);
--tchmi-cell-background: var(--tchmi-background-color-4);
--tchmi-text-color: var(--tchmi-foreground-color-1);
--tchmi-contrasting-text-color: var(--tchmi-foreground-color-1);
--tchmi-cell-border-color: var(--tchmi-background-color-3);
--tchmi-border-color: var(--tchmi-background-color-2);
--tchmi-focused-cell-background: rgba(76, 99, 116, 0.25); /*#4c6374 + opacity*/
}
.TcHmi_Controls_Helpers_Editor .compound-control-container .TcHmi_Controls_Beckhoff_TcHmiButton,
.TcHmi_Controls_Helpers_Editor.compound-control-container .TcHmi_Controls_Beckhoff_TcHmiButton {
--tchmi-button-background: var(--tchmi-highlight-button-background);
--tchmi-button-background-pressed: var(--tchmi-highlight-button-background-pressed);
--tchmi-button-text-color: var(--tchmi-highlight-button-text-color);
--tchmi-button-text-color-pressed: var(--tchmi-highlight-button-text-color);
--tchmi-button-border: var(--tchmi-highlight-button-border);
--tchmi-button-border-pressed: var(--tchmi-highlight-button-border-pressed);
--tchmi-button-box-shadow: var(--tchmi-highlight-button-box-shadow);
--tchmi-button-box-shadow-pressed: var(--tchmi-highlight-button-box-shadow-pressed);
}
.TcHmi_Controls_Helpers_Editor .compound-control-container .TcHmi_Controls_Beckhoff_TcHmiButton.down,
.TcHmi_Controls_Helpers_Editor.compound-control-container .TcHmi_Controls_Beckhoff_TcHmiButton.down {
box-shadow: var(--tchmi-inset-shadow);
}
.TcHmi_Controls_Helpers_Editor.disabled .value-description {
color: var(--tchmi-disabled-text-color);
}
.TcHmi_Controls_Helpers_Editor.disabled .TcHmi_Controls_Helpers_DirectoryBrowser-path-display::after {
background: var(--tchmi-control-background);
}
.TcHmi_Controls_Helpers_Editor-editor-table tr.selected td {
background: var(--tchmi-selected-background);
}
.TcHmi_Controls_Helpers_Editor-button-icon-datetimepicker .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/datetimepicker.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor-button-icon-timespanpicker .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/timespanpicker.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor-button-icon-add .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/add.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor-button-icon-add.down .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/add_active.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor-button-icon-remove .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/remove.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor-button-icon-remove.down .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/remove_active.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor-button-icon-up .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/move-up.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor-button-icon-up.down .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/move-up_active.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor-button-icon-down .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/move-down.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor-button-icon-down.down .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/move-down_active.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor .validation-errors {
color: var(--tchmi-invalid-text-color);
}
.TcHmi_Controls_Helpers_Editor
div.with-validation.invalid
:is(.TcHmi_Controls_Beckhoff_TcHmiButton, .TcHmi_Controls_Beckhoff_TcHmiCombobox-template-button) {
--tchmi-highlight-button-background: var(--tchmi-invalid-background);
--tchmi-highlight-button-background-pressed: var(--tchmi-invalid-background-pressed);
}
.TcHmi_Controls_Helpers_Editor
.disabled
div.with-validation.invalid
:is(.TcHmi_Controls_Beckhoff_TcHmiButton, .TcHmi_Controls_Beckhoff_TcHmiCombobox-template-button) {
--tchmi-highlight-button-background: unset;
--tchmi-highlight-button-background-pressed: unset;
}
.TcHmi_Controls_Helpers_Editor-InvalidEditor .with-validation.invalid {
color: var(--tchmi-invalid-text-color);
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane th {
background: var(--tchmi-table-header-background);
color: var(--tchmi-contrasting-text-color);
border-right: 1px solid var(--tchmi-cell-border-color);
font-weight: normal;
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane th:last-child {
border-right: none;
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane td {
background: var(--tchmi-cell-background);
color: var(--tchmi-text-color);
border-right: 1px solid;
border-bottom: 1px solid;
border-color: var(--tchmi-cell-border-color);
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane td:first-child {
border-left: 1px solid var(--tchmi-border-color);
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane td:last-child {
border-right-color: var(--tchmi-border-color);
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane tr:first-child td {
border-top: 1px solid var(--tchmi-cell-border-color);
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane tr:last-child td {
border-bottom-color: var(--tchmi-border-color);
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane:not(.read-only) tr:is(:hover, .selected) td {
background: var(--tchmi-focused-cell-background);
}

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#4c6374" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(5.000000, 5.000000)">
<path d="M 0.5,8.5 L 8.5,8.5 L 8.5,0.5 L 11.5,0.5 L 11.5,8.5 L 19.5,8.5 L 19.5,11.5 L 11.5,11.5 L 11.5,19.5 L 8.5,19.5 L 8.5,11.5 L 0.5,11.5 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 466 B

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#000000" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(5.000000, 5.000000)">
<path d="M 0.5,8.5 L 8.5,8.5 L 8.5,0.5 L 11.5,0.5 L 11.5,8.5 L 19.5,8.5 L 19.5,11.5 L 11.5,11.5 L 11.5,19.5 L 8.5,19.5 L 8.5,11.5 L 0.5,11.5 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 468 B

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="time-span-picker-bg-less" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="icon-status" transform="translate(6.000000, 5.000000)" fill="#ffffff">
<path d="M13.0368925,18.8781263 C9.75174991,18.8781263 7.07916266,16.2559652 7.07916266,13.0328064 C7.07916266,9.80919028 9.75174991,7.1870292 13.0368925,7.1870292 C14.8251438,7.1870292 16.427857,7.96777732 17.5210399,9.19538596 L12.9837484,12.7213305 L9.8337969,11.1218717 C9.60397211,11.0056971 9.32333413,11.0939715 9.20539159,11.3180878 C9.08698288,11.5422041 9.17648868,11.8184618 9.40491494,11.9346364 L12.8224515,13.6694798 C12.8905132,13.7037833 12.9637029,13.7207063 13.0368925,13.7207063 C13.1399174,13.7207063 13.24201,13.6868602 13.3263878,13.6219122 L18.077654,9.93039605 C18.6557123,10.8305204 18.9950885,11.8925574 18.9950885,13.0328064 C18.9950885,16.2559652 16.3225012,18.8781263 13.0368925,18.8781263 Z M1.13681663,3.82940064 L1.13681663,2.45725984 L3.46769685,2.45725984 L3.46769685,2.9146401 C3.46769685,3.16711401 3.67607754,3.37202037 3.93387289,3.37202037 C4.19120207,3.37202037 4.40004894,3.16711401 4.40004894,2.9146401 L4.40004894,2.45725984 L11.3926896,2.45725984 L11.3926896,2.9146401 C11.3926896,3.16711401 11.6010703,3.37202037 11.8588656,3.37202037 C12.1161948,3.37202037 12.3250417,3.16711401 12.3250417,2.9146401 L12.3250417,2.45725984 L14.1897458,2.45725984 L14.1897458,3.82940064 L1.13681663,3.82940064 Z M15.1220979,6.63863026 L15.1220979,1.77393371 C15.1220979,1.52145981 15.0475098,1.5424993 14.7901806,1.5424993 L12.3250417,1.5424993 L12.3250417,0.62773876 C12.3250417,0.374807471 12.1161948,0.170358491 11.8588656,0.170358491 C11.6010703,0.170358491 11.3926896,0.374807471 11.3926896,0.62773876 L11.3926896,1.5424993 L4.40004894,1.5424993 L4.40004894,0.62773876 C4.40004894,0.374807471 4.19120207,0.170358491 3.93387289,0.170358491 C3.67607754,0.170358491 3.46769685,0.374807471 3.46769685,0.62773876 L3.46769685,1.5424993 L0.662249419,1.5424993 C0.404454067,1.5424993 0.204464544,1.52145981 0.204464544,1.77393371 L0.204464544,13.2646982 C0.204464544,13.5171721 0.404454067,13.8917666 0.662249419,13.8917666 L4.71098836,13.8917666 C4.96831753,13.8917666 5.1771644,13.6868602 5.1771644,13.4343863 C5.1771644,13.181455 4.96831753,12.977006 4.71098836,12.977006 L1.13681663,12.977006 L1.13681663,4.74416118 L14.1897458,4.74416118 L14.1897458,6.39484657 C13.7235698,6.31709193 13.4102995,6.27226866 12.969297,6.27226866 C9.17089456,6.27226866 6.11277972,9.30515722 6.11277972,13.0328064 C6.11277972,16.7604556 9.2207754,19.7928868 13.0201102,19.7928868 C16.8194449,19.7928868 19.8519201,16.7604556 19.8519201,13.0328064 C19.8519201,10.0676101 17.9191542,7.54790223 15.1220979,6.63863026 Z" id="Fill-1"></path>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#4c6374" stroke-width="1.1" fill="none" transform="translate(5, 5)">
<polyline points="0,5 10,15 20,5" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 318 B

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#000000" stroke-width="1.1" fill="none" transform="translate(5, 5)">
<polyline points="0,5 10,15 20,5" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 318 B

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#4c6374" stroke-width="1.1" fill="none" transform="translate(5, 5)">
<polyline points="0,15 10,5 20,15" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 319 B

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#000000" stroke-width="1.1" fill="none" transform="translate(5, 5)">
<polyline points="0,15 10,5 20,15" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 319 B

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#4c6374" stroke-width="1" fill="none" fill-rule="evenodd" transform="rotate(45, 15, 15) translate(5.000000, 5.000000)">
<path d="M 0.5,8.5 L 8.5,8.5 L 8.5,0.5 L 11.5,0.5 L 11.5,8.5 L 19.5,8.5 L 19.5,11.5 L 11.5,11.5 L 11.5,19.5 L 8.5,19.5 L 8.5,11.5 L 0.5,11.5 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 485 B

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#000000" stroke-width="1" fill="none" fill-rule="evenodd" transform="rotate(45, 15, 15) translate(5.000000, 5.000000)">
<path d="M 0.5,8.5 L 8.5,8.5 L 8.5,0.5 L 11.5,0.5 L 11.5,8.5 L 19.5,8.5 L 19.5,11.5 L 11.5,11.5 L 11.5,19.5 L 8.5,19.5 L 8.5,11.5 L 0.5,11.5 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 487 B

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="time-picker-bg-less" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="icon-status" transform="translate(5.000000, 5.000000)" fill="#ffffff">
<path d="M6.39997453,1.6 C6.44802978,1.6 6.50008963,1.58801822 6.54814488,1.5720425 C6.75237968,1.49216395 6.85249478,1.2565222 6.7724027,1.05283188 C6.69191016,0.849141561 6.45964313,0.745299437 6.25580879,0.829171922 C6.04756939,0.909050479 5.94745429,1.1406983 6.02754637,1.34438862 C6.09121957,1.50414573 6.23979038,1.6 6.39997453,1.6" id="Fill-1"></path>
<path d="M8.79979915,0.8 C8.81185016,0.8 8.82791817,0.8 8.84398618,0.795992162 C9.06492132,0.771945136 9.22198612,0.57556109 9.19748241,0.355130017 C9.17378209,0.134698944 8.97654726,-0.0216067259 8.75601382,0.00244030019 C8.53507868,0.0264873263 8.37801388,0.222871373 8.40251759,0.443302446 C8.4226026,0.647702168 8.59493202,0.8 8.79979915,0.8" id="Fill-3"></path>
<path d="M5.19986206,2 C5.26795682,2 5.33204601,1.98005871 5.3961352,1.94815264 C5.58880334,1.84046967 5.6568981,1.59718592 5.54834703,1.40574953 C5.44059708,1.21431314 5.19986206,1.14252449 5.00398947,1.25020746 C4.81132133,1.35789043 4.74322657,1.60117418 4.85137708,1.79261057 C4.92387798,1.92422309 5.05966695,2 5.19986206,2" id="Fill-5"></path>
<path d="M7.59950751,1.2 C7.63148946,1.2 7.66307163,1.19599667 7.69505358,1.18799001 C7.91093173,1.1359467 8.04285727,0.919766808 7.98728863,0.703586917 C7.93531797,0.491410358 7.71943982,0.359300425 7.50356167,0.411343732 C7.29128149,0.463387039 7.15935595,0.683570261 7.21132662,0.89574682 C7.25929954,1.07990006 7.41960905,1.2 7.59950751,1.2" id="Fill-7"></path>
<path d="M4.00001347,2.8 C4.08410047,2.8 4.16818746,2.77198504 4.24026203,2.71995725 C4.41644431,2.58788671 4.4524816,2.33575203 4.32034489,2.15965798 C4.18820818,1.98356392 3.93594719,1.94754468 3.7593645,2.07961523 C3.58358263,2.21168577 3.54754535,2.4598183 3.67968206,2.63991449 C3.7593645,2.74397007 3.87988919,2.8 4.00001347,2.8" id="Fill-9"></path>
<path d="M3.1988246,3.6 C3.29877582,3.6 3.4031249,3.5600509 3.47868802,3.4841476 C3.63900979,3.33234101 3.63900979,3.08066166 3.48708393,2.92086525 C3.33076021,2.76106883 3.07888313,2.76106883 2.91896117,2.91287542 C2.76303727,3.06867693 2.75903922,3.32035628 2.91496313,3.48015269 C2.99092606,3.5600509 3.09487533,3.6 3.1988246,3.6" id="Fill-11"></path>
<path d="M10,0 C9.96691402,0 9.93808196,0.0122887865 9.90688661,0.0189058254 C9.90357801,0.0189058254 9.90074207,0.0170152428 9.89696082,0.0170152428 C9.6355816,0.0170152428 9.42430401,0.228287841 9.42430401,0.489660877 L9.42430401,3.32553468 C9.42430401,3.58643507 9.6355816,3.79818031 9.89696082,3.79818031 C10.15834,3.79818031 10.3696176,3.58643507 10.3696176,3.32553468 L10.3696176,0.964197093 C15.1902444,1.16034503 19.0546864,5.13198629 19.0546864,10.0002363 C19.0546864,14.9927922 14.9926738,19.0547087 10,19.0547087 C5.00732618,19.0547087 0.945313608,14.9927922 0.945313608,10.0002363 C0.945313608,7.91492379 1.6708418,5.87971169 2.98860897,4.26940801 C3.15451151,4.06758833 3.12426147,3.76982158 2.92243702,3.6043956 C2.71966725,3.43896963 2.42236612,3.46874631 2.2574089,3.67103864 C2.21676041,3.72066643 2.18225646,3.77407539 2.14302595,3.82417582 C2.13499078,3.83079286 2.12459233,3.83315609 2.11702982,3.84024578 C2.07212743,3.88561976 2.03762348,3.93808342 2.0144633,3.99527354 C0.717493028,5.71995746 0,7.83268345 0,10.0002363 C0,15.5141203 4.48598573,20 10,20 C15.5140143,20 20,15.5141203 20,10.0002363 C20,4.48587971 15.5140143,0 10,0" id="Fill-13"></path>
<path d="M2.90318539,4.57504985 C2.73948566,4.77532009 2.77432555,5.06624383 2.98097856,5.22488746 L9.59339779,10.3000961 C9.67930435,10.3662362 9.78430127,10.4 9.88977544,10.4 C9.96470505,10.4 10.0396347,10.3833494 10.1093144,10.348198 L14.5425705,8.12533708 C14.7764272,8.00785754 14.8675836,7.72895926 14.7463599,7.50232549 C14.6256135,7.27522922 14.338781,7.18550075 14.1034925,7.30390533 L9.94418293,9.38939844 L3.57373386,4.49965943 C3.36708085,4.34147832 3.06688513,4.37524212 2.90318539,4.57504985" id="Fill-16"></path>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -0,0 +1,165 @@
.TcHmi_Controls_Helpers_Editor {
--tchmi-selected-background: var(--tchmi-background-color-2);
--tchmi-invalid-background: var(--tchmi-error-color);
--tchmi-invalid-background-pressed: var(--tchmi-invalid-color);
--tchmi-invalid-text-color: var(--tchmi-error-color);
--tchmi-disabled-text-color: var(--tchmi-foreground-color-3);
--tchmi-table-header-background: var(--tchmi-highlight-color-1);
--tchmi-cell-background: var(--tchmi-background-color-4);
--tchmi-text-color: var(--tchmi-foreground-color-1);
--tchmi-contrasting-text-color: var(--tchmi-foreground-color-2);
--tchmi-cell-border-color: var(--tchmi-background-color-3);
--tchmi-border-color: var(--tchmi-background-color-2);
--tchmi-focused-cell-background: rgba(76, 99, 116, 0.25); /*#4c6374 + opacity*/
}
.TcHmi_Controls_Helpers_Editor .compound-control-container .TcHmi_Controls_Beckhoff_TcHmiButton,
.TcHmi_Controls_Helpers_Editor.compound-control-container .TcHmi_Controls_Beckhoff_TcHmiButton {
--tchmi-button-background: var(--tchmi-highlight-button-background);
--tchmi-button-background-pressed: var(--tchmi-highlight-button-background-pressed);
--tchmi-button-text-color: var(--tchmi-highlight-button-text-color);
--tchmi-button-text-color-pressed: var(--tchmi-highlight-button-text-color);
--tchmi-button-border: var(--tchmi-highlight-button-border);
--tchmi-button-border-pressed: var(--tchmi-highlight-button-border-pressed);
--tchmi-button-box-shadow: var(--tchmi-highlight-button-box-shadow);
--tchmi-button-box-shadow-pressed: var(--tchmi-highlight-button-box-shadow-pressed);
}
.TcHmi_Controls_Helpers_Editor .compound-control-container .TcHmi_Controls_Beckhoff_TcHmiButton.down,
.TcHmi_Controls_Helpers_Editor.compound-control-container .TcHmi_Controls_Beckhoff_TcHmiButton.down {
box-shadow: var(--tchmi-inset-shadow);
}
.TcHmi_Controls_Helpers_Editor.disabled .value-description {
color: var(--tchmi-disabled-text-color);
}
.TcHmi_Controls_Helpers_Editor.disabled .TcHmi_Controls_Helpers_DirectoryBrowser-path-display::after {
background: var(--tchmi-control-background);
}
.TcHmi_Controls_Helpers_Editor-editor-table tr.selected td {
background: var(--tchmi-selected-background);
}
.TcHmi_Controls_Helpers_Editor-button-icon-datetimepicker .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/datetimepicker.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor-button-icon-timespanpicker .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/timespanpicker.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor-button-icon-add .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/add.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor-button-icon-add.down .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/add_active.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor-button-icon-remove .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/remove.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor-button-icon-remove.down .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/remove_active.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor-button-icon-up .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/move-up.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor-button-icon-up.down .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/move-up_active.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor-button-icon-down .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/move-down.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor-button-icon-down.down .TcHmi_Controls_Beckhoff_TcHmiButton-template {
background-image: url('Images/move-down_active.svg');
background-position: center;
background-size: contain;
}
.TcHmi_Controls_Helpers_Editor .validation-errors {
color: var(--tchmi-invalid-text-color);
}
.TcHmi_Controls_Helpers_Editor
div.with-validation.invalid
:is(.TcHmi_Controls_Beckhoff_TcHmiButton, .TcHmi_Controls_Beckhoff_TcHmiCombobox-template-button) {
--tchmi-highlight-button-background: var(--tchmi-invalid-background);
--tchmi-highlight-button-background-pressed: var(--tchmi-invalid-background-pressed);
}
.TcHmi_Controls_Helpers_Editor
.disabled
div.with-validation.invalid
:is(.TcHmi_Controls_Beckhoff_TcHmiButton, .TcHmi_Controls_Beckhoff_TcHmiCombobox-template-button) {
--tchmi-highlight-button-background: unset;
--tchmi-highlight-button-background-pressed: unset;
}
.TcHmi_Controls_Helpers_Editor-InvalidEditor .with-validation.invalid {
color: var(--tchmi-invalid-text-color);
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane th {
background: var(--tchmi-table-header-background);
color: var(--tchmi-contrasting-text-color);
border-right: 1px solid var(--tchmi-cell-border-color);
font-weight: normal;
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane th:last-child {
border-right: none;
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane td {
background: var(--tchmi-cell-background);
color: var(--tchmi-text-color);
border-right: 1px solid;
border-bottom: 1px solid;
border-color: var(--tchmi-cell-border-color);
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane td:first-child {
border-left: 1px solid var(--tchmi-border-color);
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane td:last-child {
border-right-color: var(--tchmi-border-color);
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane tr:first-child td {
border-top: 1px solid var(--tchmi-cell-border-color);
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane tr:last-child td {
border-bottom-color: var(--tchmi-border-color);
}
.TcHmi_Controls_Helpers_Editor-HistorizedSymbolEditorPane:not(.read-only) tr:is(:hover, .selected) td {
background: var(--tchmi-focused-cell-background);
}

View File

@@ -0,0 +1,215 @@
/**
* Popup
*/
.TcHmi_Controls_Helpers_Popup {
display: flex;
flex-direction: column;
box-sizing: border-box;
overflow: hidden;
position: absolute;
}
.TcHmi_Controls_Helpers_Popup-content
.TcHmi_Controls_System_TcHmiControl:not(.TcHmi_Controls_System_TcHmiControl .TcHmi_Controls_System_TcHmiControl) {
position: relative;
}
.TcHmi_Controls_Helpers_Popup-header-container {
position: relative;
display: grid;
grid-template-columns: auto min-content;
margin-top: 0px;
min-height: 26px;
padding: 5px 10px;
}
.TcHmi_Controls_Helpers_Popup-header-container > h1 {
margin: 0;
white-space: nowrap;
overflow: hidden;
}
.TcHmi_Controls_Helpers_Popup-content {
position: relative;
flex-grow: 1;
flex-shrink: 1;
overflow: auto;
padding: 10px;
}
.TcHmi_Controls_Helpers_Popup-label-block {
display: block;
white-space: pre;
margin-bottom: 2px;
}
.TcHmi_Controls_Helpers_Popup-label-block:not(:first-child) {
margin-top: 10px;
}
.TcHmi_Controls_Helpers_Popup-footer {
position: relative;
display: flex;
justify-content: flex-end;
}
.TcHmi_Controls_Helpers_Popup-footer:not(:empty) {
padding-left: 10px;
padding-right: 10px;
padding-bottom: 10px;
}
.TcHmi_Controls_Helpers_Popup-footer .TcHmi_Controls_System_TcHmiControl {
position: relative;
}
.TcHmi_Controls_Helpers_Popup-footer .TcHmi_Controls_System_TcHmiControl:not(:first-child) {
margin-left: 5px;
}
/**
* TextAndButtonsPrompt
*/
.TcHmi_Controls_Helpers_Popup-TextAndButtonsPrompt .TcHmi_Controls_Helpers_Popup-content {
white-space: pre;
}
/**
* FilterPrompt
*/
.TcHmi_Controls_Helpers_FilterPrompt-popup .TcHmi_Controls_Helpers_Popup-content {
display: flex;
flex-direction: column;
}
.TcHmi_Controls_Helpers_FilterPrompt-popup
.TcHmi_Controls_Helpers_Popup-footer
.TcHmi_Controls_Beckhoff_TcHmiButton.align-left {
margin-right: auto;
}
.TcHmi_Controls_Helpers_FilterPrompt-popup .TcHmi_Controls_Helpers_Popup-content .TcHmi_Controls_Beckhoff_TcHmiButton {
position: relative;
display: inline-block;
margin-right: 5px;
}
.TcHmi_Controls_Helpers_FilterPrompt-popup .TcHmi_Controls_Helpers_FilterPrompt-template-remove-button {
margin-right: 15px;
}
.TcHmi_Controls_Helpers_FilterPrompt-popup table {
border-collapse: collapse;
}
.TcHmi_Controls_Helpers_FilterPrompt-table-header {
display: block;
overflow: hidden;
flex-shrink: 0;
position: relative;
}
.TcHmi_Controls_Helpers_FilterPrompt-table-header th {
height: 30px;
padding: 0;
box-sizing: border-box;
}
.TcHmi_Controls_Helpers_FilterPrompt-table-header .TcHmi_Controls_Helpers_FilterPrompt-scroll-placeholder {
width: 200px;
position: absolute;
}
.TcHmi_Controls_Helpers_FilterPrompt-table {
overflow: auto;
display: block;
}
.TcHmi_Controls_Helpers_FilterPrompt-table .TcHmi_Controls_Helpers_FilterPrompt-indentation-column {
display: flex;
padding: 0;
}
.TcHmi_Controls_Helpers_FilterPrompt-selection-column {
min-width: 30px;
max-width: 30px;
}
.TcHmi_Controls_Helpers_FilterPrompt-logic-column {
min-width: 60px;
max-width: 60px;
}
.TcHmi_Controls_Helpers_FilterPrompt-path-column {
min-width: 120px;
max-width: 120px;
}
.TcHmi_Controls_Helpers_FilterPrompt-comparator-column {
min-width: 160px;
max-width: 160px;
}
.TcHmi_Controls_Helpers_FilterPrompt-value-column {
min-width: 250px;
max-width: 250px;
}
.TcHmi_Controls_Helpers_FilterPrompt-table td {
position: relative;
white-space: nowrap;
border-right: 1px solid;
border-bottom: 1px solid;
padding: 0;
height: 30px;
overflow: hidden;
cursor: default;
box-sizing: border-box;
}
.TcHmi_Controls_Helpers_FilterPrompt-table .TcHmi_Controls_Helpers_FilterPrompt-indentation-marker {
width: 5px;
height: 30px;
border-left: 1px solid;
float: left;
box-sizing: border-box;
margin-left: 4px;
margin-right: -3px;
}
.TcHmi_Controls_Helpers_FilterPrompt-table .TcHmi_Controls_Helpers_FilterPrompt-indentation-marker:last-child {
margin-right: 1px;
}
.TcHmi_Controls_Helpers_FilterPrompt-table .TcHmi_Controls_Helpers_FilterPrompt-indentation-marker.first {
border-top: 1px solid;
height: 28px;
margin-top: 2px;
}
.TcHmi_Controls_Helpers_FilterPrompt-table .TcHmi_Controls_Helpers_FilterPrompt-indentation-marker.last {
border-bottom: 1px solid;
height: 28px;
margin-bottom: 2px;
}
.TcHmi_Controls_Helpers_FilterPrompt-table .TcHmi_Controls_Beckhoff_TcHmiCombobox,
.TcHmi_Controls_Helpers_FilterPrompt-table .TcHmi_Controls_Beckhoff_TcHmiTextbox,
.TcHmi_Controls_Helpers_FilterPrompt-table .TcHmi_Controls_Beckhoff_TcHmiCheckbox,
.TcHmi_Controls_Helpers_FilterPrompt-table .TcHmi_Controls_Beckhoff_TcHmiDateTimeInput {
top: 0;
right: 0;
bottom: 0;
left: 0;
height: 30px; /* Fix for IE who refuses to properly size absolutely positioned elements in table cells */
}
.TcHmi_Controls_Helpers_FilterPrompt-table .TcHmi_Controls_Beckhoff_TcHmiButton {
margin: 0;
position: absolute;
top: 0;
right: 0;
}

View File

@@ -0,0 +1,999 @@
// Compatibility file for non-module typescript compiles without adjustments.
// Use the following line for modern code (needs adjustments to tsconfig.json#configOptions/paths)
// import { TcHmiControl } from "Beckhoff.TwinCAT.HMI.Framework/index.esm.js";
// ***************************************************************************
export declare abstract class Popup<T> {
#private;
protected readonly __parentControl?: (TcHmi.Controls.System.TcHmiControl | null) | undefined;
protected __name: string;
protected __element: HTMLDivElement;
protected __elementHeaderContainer: HTMLDivElement;
protected __elementHeader: HTMLHeadingElement;
protected __elementClose: HTMLAnchorElement;
protected __elementContent: HTMLDivElement;
protected __elementFooter: HTMLDivElement;
/** Controls in this array will be destroyed automatically when the popup is destroyed */
protected __childControls: TcHmi.Controls.System.TcHmiControl[];
/** Destroyers in this array will be called automatically when the popup is destroyed */
protected __destroyers: TcHmi.DestroyFunction[];
protected __destroyOnHide: TcHmi.DestroyFunction[];
protected __prompt: {
answer: (value: T | PromiseLike<T>) => void;
error: (reason?: Error) => void;
} | null;
protected __isShowing: boolean;
protected __onShowManager: Callback.Collection<() => void>;
onShow: Readonly<{
add: (callback: () => void) => () => void;
remove: (callback: () => void) => void;
}>;
protected __onHideManager: Callback.Collection<() => void>;
onHide: Readonly<{
add: (callback: () => void) => () => void;
remove: (callback: () => void) => void;
}>;
protected __onBoundsChangeManager: Callback.Collection<(data: {
bounds: TcHmi.UiProvider.PopupProvider.Bounds | null;
}) => void>;
onBoundsChange: Readonly<{
add: (callback: (data: {
bounds: TcHmi.UiProvider.PopupProvider.Bounds | null;
}) => void) => () => void;
remove: (callback: (data: {
bounds: TcHmi.UiProvider.PopupProvider.Bounds | null;
}) => void) => void;
}>;
protected __backgroundAction: Popup.BackgroundAction<string>;
protected __closeButton: Popup.CloseButton<string>;
protected __backgroundMode: Popup.BackgroundMode;
protected __positioningMode: Popup.PositioningMode;
protected __bounds: Popup.Bounds | null;
protected __movable: boolean;
protected __justAbove: TcHmi.TopMostLayer.IOptionsEx['justAbove'];
protected readonly __className = "TcHmi_Controls_Helpers_Popup";
protected __localizationSymbols: Map<string, {
symbol: TcHmi.Symbol<string>;
destroyWatch: TcHmi.DestroyFunction;
}>;
private static readonly __passiveEventOptions;
protected __documentMouseMoveDestroyer: TcHmi.DestroyFunction | null;
protected __documentMouseUpDestroyer: TcHmi.DestroyFunction | null;
protected __documentTouchMoveDestroyer: TcHmi.DestroyFunction | null;
protected __documentTouchEndDestroyer: TcHmi.DestroyFunction | null;
protected __documentTouchCancelDestroyer: TcHmi.DestroyFunction | null;
/** Prevents mouse event while touch interaction is in progress. */
protected __touchLock: boolean;
protected __touchLockTimeoutId: number;
/** Store active touches by their IDs. */
protected __activeTouches: Map<number, {
useForDragging: false;
} | {
useForDragging: true;
offsetLeft: number;
offsetTop: number;
}>;
protected __movingInfo: {
moving: boolean;
/** Offset from the interaction coordinates to element left side */
startLeftOffset: number;
/** Offset from the interaction coordinates to element top side */
startTopOffset: number;
/** A popup should be movable partly outside the screen but 50px should be always visible. */
minLeft: number;
/** A popup should be movable partly outside the screen but not at the top. */
minTop: number;
/** A popup should be movable partly outside the screen but 50px should be always visible. */
maxLeft: number;
/** A popup should be movable partly outside the screen but 50px should be always visible. */
maxTop: number;
};
protected __activePointerInteraction: boolean;
protected __animationFrameId: number;
protected __storage: TcHmi.LocalStorage<{
bounds: Popup.Bounds;
}, {
bounds: Popup.Bounds | null;
}> | undefined;
protected __storageSettings: TcHmi.UiProvider.PopupProvider.StorageSettings | undefined;
private __resizeObserver;
/**
* Creates a new Popup instance.
* @param __parentControl The control which owns the popup.
*/
constructor(__parentControl?: (TcHmi.Controls.System.TcHmiControl | null) | undefined);
/**
* Keeps popup visible after when the window or the popup is resized. If the popup shrinks it could disappear
* beyond the left edge of the window. If the window shrinks, the popup could disappear beyond the right or
* bottom edge.
*/
private __handleResize;
/**
* Shows the popup.
*/
show(): void;
/**
* Hides the popup.
*/
hide(): void;
/**
* Shows the popup and waits for the user to answer the prompt. A Promise is returned that will be resolved with the value the user provides.
*/
prompt(): Promise<T>;
/**
* Aborts a prompted popup and performs the given action to answer the prompt. If no action is specified, the promise is rejected.
* @param action The action to perform to answer the prompt.
*/
abort(action?: Popup.PromptAction<string>): void;
/**
* Destroys the popup and all its controls.
* @param force If true, child controls will be removed from the parent control before destruction, to ensure destruction in case of keepAlive === true.
*/
destroy(force?: boolean): void;
/**
* Gets a value indicating if the popup is currently shown to the user.
*/
isShowing(): boolean;
/**
* Gets a value indicating if the popup has a prompt that is still pending to be answered by the user.
* If that is the case, calling prompt() againg will result in an error. If the popup is not currently
* showing, you can call show() to display the popup again and wait for the user to answer the prompt.
*/
hasActivePrompt(): boolean;
/**
* Gets the root element of the popup.
*/
getElement(): HTMLDivElement;
/**
* Resets the size and position of the Popup and clears that data from localStorage.
*/
resetBounds(): void;
/**
* Sets what happens when the user clicks the background while the popup is showing, or when the prompt is
* aborted via API call. Default is { close: true }.
* @param action The action to perform. If the popup should be closed, further action can be specified.
*/
setBackgroundAction(action: Popup.BackgroundAction<string>): void;
/**
* Sets the background mode of the TopMostLayer used for displaying the popup.
* @param mode
*/
setBackgroundMode(mode: Popup.BackgroundMode): void;
/**
* Sets the positioning mode of the popup in the TopMostLayer.
* @param mode
*/
setPositioningMode(mode: Popup.PositioningMode): void;
/**
* Sets the bounds of the popup. Does only have any effect if PositioningMode.Floating is used.
* @param bounds
*/
setBounds(bounds: Popup.Bounds | null): void;
/**
* Process the given Popup.Bounds.
* @param bounds
*/
protected __processBounds(bounds: Popup.Bounds | null): void;
/**
* Sets the movable option.
* Does only have an effect when setPositioningMode is also set:
* `popup.setPositioningMode(TcHmi.UiProvider.PopupProvider.PositioningMode.Floating)`
*/
setMovable(movable: boolean): void;
/**
* Sets the local storage settings and initializes the storage.
*/
setStorageSettings(settings: TcHmi.UiProvider.PopupProvider.StorageSettings): void;
/**
* Sets if the close button should be used or not.
* @param button Defines whether to show the button and if yes, what action should be taken to answer the prompt
*/
setCloseButton(button: Popup.CloseButton<string>): void;
/**
* Sets if the close button should be used or not.
* @param show Defines whether to show the button
*/
setCloseButton(show: boolean): void;
/**
* Gets the close button configuration.
*/
getCloseButton(): _Popup.CloseButton<string>;
/**
* Performs the close action. Must be implemented by inheriting classes.
*/
protected abstract __performPromptAction(toPerform: Popup.PromptAction<string>): void;
/**
* Display the popup just above the given reference element.
* @param reference The popup will be as close as possible in the TopMostLayer stack to this element.
* @param conflictResolution If there are multiple elements that want to be just above the reference, you can
* specify in which direction conflicts should be resolved. Defaults to Up.
*/
setJustAbove(reference: Element, conflictResolution?: TcHmi.TopMostLayer.ConflictResolution): void;
/**
* Reset the justAbove handling.
* @param reference Pass null to reset the justAbove handling.
*/
setJustAbove(reference: null): void;
/**
* Returns whether the popup is currently being interacted with by mouse, touch or keyboard.
*/
hasActiveUserInteraction(): boolean;
/**
* Handles the onPressed event of the close button.
*/
protected __onCloseClick(_event: MouseEvent): void;
/**
* Handles the popup mousedown event.
*/
protected __onPopupMouseDown(event: MouseEvent): void;
/**
* Handles the document mouseup event.
*/
protected __onDocumentMouseUp(_event: MouseEvent): void;
/**
* Handles the document mousemove event.
*/
protected __onDocumentMouseMove(event: MouseEvent): void;
/**
* Handles the popup touchstart event.
*/
protected __onPopupTouchStart(event: TouchEvent): void;
/**
* Handles the document touch end and cancel events.
*/
protected __onDocumentTouchEndOrCancel(event: TouchEvent): void;
/**
* Handles the document touchmove event.
*/
protected __onDocumentTouchMove(event: TouchEvent): void;
/**
* AnimationFrame handler for drawing
*/
protected __updatePosition(): void;
/**
* Write potentially localized texts to a DOM Elements textContent property.
* @param name A name for the localized text.
* @param text The text to apply.
* @param element The element to apply the text to.
*/
protected __applyTextToElement(name: string, text: TcHmi.Localizable | null | undefined, element: Element): void;
/**
* Write potentially localized texts to a DOM Element using the given setter function.
* @param name A name for the localized text.
* @param text The text to apply.
* @param setter The setter that writes the text to the DOM.
*/
protected __applyTextToElement(name: string, text: TcHmi.Localizable | null | undefined, setter: (text: string) => void): void;
/**
* Write potentially localized texts to a control property
* @param name A name for the localized text.
* @param text The text to apply.
* @param control The control to write to.
* @param property The property name to write to.
*/
protected __applyTextToControl(name: string, text: TcHmi.Localizable | null | undefined, control: TcHmiControl.Control, property: string): void;
/**
* Watch the given symbol and call the onChange callback every time it changes with the resolved and formatted symbol value.
* @param name The name for this symbol. Must be unique across all inheritance layers and further calls for the same localization must use the same name.
* @param localization The localization to watch.
* @param onChange The callback that is called with the localized and formatted text as a parameter.
*/
protected __watchLocalization(name: string, localization: TcHmi.FormattedLocalizable, onChange: (localizedText: string) => void): void;
/**
* Destroys the localization watch with the given name, if it exists.
* @param name The name that was used with __watchLoclalization to start watching the symbol.
*/
protected __unwatchLocalization(name: string): void;
}
export declare namespace Popup {
enum PositioningMode {
Centered = 1,
Floating = 2
}
enum BackgroundMode {
None = 1,
Dimmed = 2
}
type BackgroundAction<A extends string> = {
close: false;
} | {
close: true;
action?: A;
};
type CloseButton<A extends string> = {
show: false;
} | {
show: true;
action?: A;
};
type PromptAction<A extends string> = {
action?: A;
};
interface Bounds {
width?: number | null;
widthUnit?: 'px' | '%';
height?: number | null;
heightUnit?: 'px' | '%';
left?: number | null;
leftUnit?: 'px' | '%';
top?: number | null;
topUnit?: 'px' | '%';
bottom?: number | null;
bottomUnit?: 'px' | '%';
right?: number | null;
rightUnit?: 'px' | '%';
}
}
import _Popup = Popup;
declare global {
namespace TcHmi.Controls.Helpers {
let Popup: typeof _Popup;
type Popup<T> = _Popup<T>;
namespace Popup {
type PositioningMode = _Popup.PositioningMode;
type BackgroundMode = _Popup.BackgroundMode;
type BackgroundAction<A extends string> = _Popup.BackgroundAction<A>;
type CloseButton<A extends string> = _Popup.CloseButton<A>;
type PromptAction<A extends string> = _Popup.PromptAction<A>;
type Bounds = _Popup.Bounds;
}
}
}
export declare abstract class ButtonsPrompt<T> extends Popup<T> {
protected __buttons: Map<string, {
value: T;
button: TcHmiButton;
}>;
protected __onButtonPressedManager: Callback.Collection<(name: string, value: T) => void>;
onButtonPressed: Readonly<{
add: (callback: (name: string, value: T) => void) => () => void;
remove: (callback: (name: string, value: T) => void) => void;
}>;
protected __backgroundAction: ButtonsPrompt.BackgroundAction<T>;
protected __closeButton: ButtonsPrompt.CloseButton<T>;
/**
* Creates a new ButtonsPrompt instance.
* @param buttons A collection of attributes to generate buttons from and the value that should be used in the prompt answer for each button.
* @param parentControl The control which owns the popup.
*/
constructor(buttons: TcHmi.Dictionary<{
value: T;
attributes: TcHmi.Dictionary<any>;
keepPopupOpen?: boolean;
}>, parentControl?: TcHmiControl.Control | null);
/**
* Aborts a prompted popup and performs the given action to answer the prompt. If no action is specified, the promise is rejected.
* @param action The action to perform to answer the prompt.
*/
abort(action?: ButtonsPrompt.PromptAction<T>): void;
/**
* Creates a handler for the pressed event of a button.
* @param value The value that should be used to answer the prompt when the button is clicked.
*/
protected __createPressedHandler(value: T, name: string, closePopup: boolean): () => void;
/**
* Returns the created buttons.
*/
getButtons(): Map<string, {
value: T;
button: TcHmiButton;
}>;
/**
* Sets what happens when the user clicks the background while the popup is showing, or when the prompt is
* aborted via API call.
* @param action The action to perform. If the popup should be closed, you can specify the name of a button to
* get the prompt to be answered as if this button was clicked, or directly specify a result to answer the
* prompt with.
*/
setBackgroundAction(action: ButtonsPrompt.BackgroundAction<T>): void;
/**
* Sets if the close button should be used or not.
* @param button Defines whether to show the button and if yes, what action should be taken to answer the prompt.
*/
setCloseButton(button: ButtonsPrompt.CloseButton<T>): void;
/**
* Sets if the close button should be used or not.
* @param show Defines whether to show the button.
*/
setCloseButton(show: boolean): void;
/**
* Performs the background action.
*/
protected __performPromptAction(toPerform: ButtonsPrompt.PromptAction<T>): void;
/**
* DEPRECATED
* Please use setTexts
* @param texts A collection of localization symbol expressions.
* @deprecated Please use setTexts
*/
setLocalizations(texts: Partial<ButtonsPrompt.LocalizableTexts>): void;
/**
* Sets texts which can either be localizable or static.
*/
setTexts(texts: Partial<ButtonsPrompt.LocalizableTexts>): void;
}
export declare namespace ButtonsPrompt {
interface LocalizableTexts {
headerText: TcHmi.Localizable;
buttons: TcHmi.Dictionary<{
text?: TcHmi.Localizable;
tooltip?: TcHmi.Localizable;
}>;
}
type BackgroundAction<R = any> = Popup.BackgroundAction<string> | {
close: true;
result: R;
};
type CloseButton<R = any> = Popup.CloseButton<string> | {
show: true;
result: R;
};
type PromptAction<R = any> = Popup.PromptAction<string> | {
result: R;
};
}
import _ButtonsPrompt = ButtonsPrompt;
declare global {
namespace TcHmi.Controls.Helpers {
let ButtonsPrompt: typeof _ButtonsPrompt;
type ButtonsPrompt<T> = _ButtonsPrompt<T>;
namespace ButtonsPrompt {
type LocalizableTexts = _ButtonsPrompt.LocalizableTexts;
type BackgroundAction<R = any> = _ButtonsPrompt.BackgroundAction<R>;
type CloseButton<R = any> = _ButtonsPrompt.CloseButton<R>;
}
}
}
export declare class HtmlAndButtonsPrompt<T> extends ButtonsPrompt<T> {
protected __elementContentContent: HTMLElement | null;
/**
* Creates a new TextAndButtonsPrompt instance.
* @param buttons A collection of attributes to generate buttons from and the value that should be used in the prompt answer for each button.
* @param parentControl The control which owns the popup.
*/
constructor(buttons: TcHmi.Dictionary<{
value: T;
attributes: TcHmi.Dictionary<any>;
}>, parentControl?: TcHmi.Controls.System.TcHmiControl | null);
/**
* Destroys the popup and all its controls.
* @param force If true, child controls will be removed from the parent control before destruction, to ensure destruction in case of keepAlive === true.
*/
destroy(force?: boolean): void;
/**
* Sets the content element.
* @param element
*/
setContentElement(element: HTMLElement): void;
}
declare const _HtmlAndButtonsPrompt: typeof HtmlAndButtonsPrompt;
type tHtmlAndButtonsPrompt<T> = HtmlAndButtonsPrompt<T>;
declare global {
namespace TcHmi.Controls.Helpers {
let HtmlAndButtonsPrompt: typeof _HtmlAndButtonsPrompt;
type HtmlAndButtonsPrompt<T> = tHtmlAndButtonsPrompt<T>;
}
}
export {};
export declare class TextAndButtonsPrompt<T> extends ButtonsPrompt<T> {
/**
* Creates a new TextAndButtonsPrompt instance.
* @param buttons A collection of attributes to generate buttons from and the value that should be used in the prompt answer for each button.
* @param parentControl The control which owns the popup.
*/
constructor(buttons: TcHmi.Dictionary<{
value: T;
attributes: TcHmi.Dictionary<any>;
}>, parentControl?: TcHmi.Controls.System.TcHmiControl | null);
/**
* DEPRECATED
* Please use setTexts
* @param texts A collection of localization symbol expressions.
* @deprecated Please use setTexts
*/
setLocalizations(texts: Partial<TextAndButtonsPrompt.LocalizableTexts>): void;
/**
* Sets texts which can either be localizable or static.
*/
setTexts(texts: Partial<TextAndButtonsPrompt.LocalizableTexts>): void;
}
export declare namespace TextAndButtonsPrompt {
interface LocalizableTexts extends ButtonsPrompt.LocalizableTexts {
contentText: TcHmi.Localizable;
}
}
import _TextAndButtonsPrompt = TextAndButtonsPrompt;
declare global {
namespace TcHmi.Controls.Helpers {
let TextAndButtonsPrompt: typeof _TextAndButtonsPrompt;
type TextAndButtonsPrompt<T> = _TextAndButtonsPrompt<T>;
namespace TextAndButtonsPrompt {
type LocalizableTexts = _TextAndButtonsPrompt.LocalizableTexts;
}
}
}
export declare abstract class OkCancelPrompt<T, T2 = void> extends Popup<{
isOk: true;
value: T;
} | {
isOk: false;
value?: T2;
}> {
protected __okButton: TcHmiButton;
protected __cancelButton: TcHmiButton;
protected __backgroundAction: Popup.BackgroundAction<OkCancelPrompt.AvailableActions>;
protected __closeButton: Popup.CloseButton<OkCancelPrompt.AvailableActions>;
/**
* Creates a new OkCancelPrompt instance.
* @param localizations A collection of localization symbol expressions to localize texts in the control.
* @param parentControl The control which owns the popup.
*/
constructor(parentControl?: TcHmi.Controls.System.TcHmiControl | null);
/**
* Aborts a prompted popup and performs the given action to answer the prompt. If no action is specified, the promise is rejected.
* @param action The action to perform to answer the prompt.
*/
abort(action?: Popup.PromptAction<OkCancelPrompt.AvailableActions>): void;
/**
* Handler for the onPressed event of the OK button.
*/
protected __onOkPressed(): void;
/**
* Handler for the onPressed event of the cancel button.
*/
protected __onCancelPressed(): void;
/**
* Performs the action for the OK button, i.e. calling prompt.answer(). Must be implemented by inheriting class.
* Please check validity in this method and don't rely on the OK buttons isEnabled state, as this method might be called on background click or other events too.
*/
protected abstract __ok(): void;
/**
* Performs the action for the Cancel button.
*/
protected __cancel(): void;
/**
* Sets what happens when the user clicks the background while the popup is showing, or when the prompt is
* aborted via API call.
* @param action The action to perform. If the popup should be closed, you can specify ok or cancel to perform
* the associated action.
*/
setBackgroundAction(action: Popup.BackgroundAction<OkCancelPrompt.AvailableActions>): void;
/**
* Performs the background action.
*/
protected __performBackgroundAction(): void;
/**
* Sets if the close button should be used or not.
* @param button Defines whether to show the button and if yes, what action should be taken to answer the prompt.
*/
setCloseButton(button: Popup.CloseButton<OkCancelPrompt.AvailableActions>): void;
/**
* Sets if the close button should be used or not.
* @param show Defines whether to show the button.
*/
setCloseButton(show: boolean): void;
/**
* Performs the given action.
*/
protected __performPromptAction(toPerform: Popup.PromptAction<OkCancelPrompt.AvailableActions>): void;
/**
* DEPRECATED
* Please use setTexts
* @param texts A collection of localization symbol expressions.
* @deprecated Please use setTexts
*/
setLocalizations(texts: Partial<OkCancelPrompt.LocalizableTexts>): void;
/**
* Sets texts which can either be localizable or static.
*/
setTexts(texts: Partial<OkCancelPrompt.LocalizableTexts>): void;
}
export declare namespace OkCancelPrompt {
interface LocalizableTexts {
buttonTextOk: TcHmi.Localizable;
buttonTooltipOk: TcHmi.Localizable;
buttonTextCancel: TcHmi.Localizable;
buttonTooltipCancel: TcHmi.Localizable;
}
type AvailableActions = 'ok' | 'cancel';
}
import _OkCancelPrompt = OkCancelPrompt;
declare global {
namespace TcHmi.Controls.Helpers {
let OkCancelPrompt: typeof _OkCancelPrompt;
type OkCancelPrompt<T, T2 = void> = _OkCancelPrompt<T, T2>;
namespace OkCancelPrompt {
type LocalizableTexts = _OkCancelPrompt.LocalizableTexts;
type AvailableActions = _OkCancelPrompt.AvailableActions;
}
}
}
export declare class InputPrompt extends OkCancelPrompt<string> {
protected __input: TcHmiInput;
protected __forbiddenValues: Set<string>;
protected __validationPatterns: {
pattern: RegExp;
expectedTestResult: boolean;
}[];
protected __elementLabel: HTMLElement;
/**
* Creates a new InputPrompt instance.
* @param parentControl The control which owns the popup.
*/
constructor(parentControl?: TcHmi.Controls.System.TcHmiControl | null);
/**
* Handler for the onTextChanged event of the input.
*/
protected __onTextChanged(): void;
/**
* Handler for the keydown event of the popup element.
*/
protected __onKeydown(event: KeyboardEvent): void;
/**
* Checks if the text of the input is valid and sets the isEnabled state of the button and the invalid class of the input accordingly.
*/
protected __validate(): void;
/**
* Validates the given text.
* @param text The text to validate.
*/
protected __isValid(text: string): boolean;
/**
* Performs the action for the OK button, i.e. calling prompt.answer().
*/
protected __ok(): void;
/**
* Shows the popup and waits for the user to answer the prompt. A Promise is returned that will be resolved with the value the user provides.
* @param forbiddenValues Values that cannot be entered (i.e. because another item with this name already exists).
* @param defaultValue The default to fill the input with.
*/
prompt(forbiddenValues?: Iterable<string> | null, defaultValue?: string): Promise<{
isOk: true;
value: string;
} | {
isOk: false;
value?: void | undefined;
}>;
/**
* Shows the popup and waits for the user to answer the prompt. A Promise is returned that will be resolved with the value the user provides.
*/
show(): void;
setValidationPatterns(patterns: {
pattern: RegExp;
expectedTestResult: boolean;
}[]): void;
getValidationPatterns(): {
pattern: RegExp;
expectedTestResult: boolean;
}[];
/**
* DEPRECATED
* Please use setTexts
* @param texts A collection of localization symbol expressions.
* @deprecated Please use setTexts
*/
setLocalizations(texts: Partial<InputPrompt.LocalizableTexts>): void;
/**
* Sets texts which can either be localizable or static.
*/
setTexts(texts: Partial<InputPrompt.LocalizableTexts>): void;
}
export declare namespace InputPrompt {
interface LocalizableTexts extends OkCancelPrompt.LocalizableTexts {
labelText: TcHmi.Localizable;
headerText: TcHmi.Localizable;
}
}
import _InputPrompt = InputPrompt;
declare global {
namespace TcHmi.Controls.Helpers {
let InputPrompt: typeof _InputPrompt;
type InputPrompt = _InputPrompt;
namespace InputPrompt {
type LocalizableTexts = _InputPrompt.LocalizableTexts;
}
}
}
export declare class FilterPrompt extends Popup<TcHmi.Filter> {
protected __okButton: TcHmiButton;
protected __cancelButton: TcHmiButton;
protected __resetButton: TcHmiButton;
protected __removeButton: TcHmiButton;
protected __groupButton: TcHmiButton;
protected __ungroupButton: TcHmiButton;
protected __elementMenuBar: HTMLElement;
protected __elementFilterTableHeader: HTMLElement;
/** The element used to save the space for the group brackets */
protected __elementIndentationHeader: HTMLElement;
protected __elementFilterTable: HTMLElement;
protected __elementFilterTableBody: HTMLElement;
protected __filter: TcHmi.Filter;
protected __currentFilter: TcHmi.Filter;
protected __originalFilter: TcHmi.Filter;
protected __schemaInfo: FilterPrompt.SchemaInfo;
protected __localizableEnums: FilterPrompt.PathInfo[];
protected __domainPaths: Map<string, _FilterPrompt.PathInfo>;
protected __rows: FilterPrompt.RowData[];
protected __selectedRows: FilterPrompt.SelectedRow[];
protected __updateRequired: boolean;
protected __groupInfo: {
parent: FilterPrompt.FilterNesting;
toGroup: (TcHmi.Comparison | TcHmi.Filter)[];
} | null;
protected __ungroupInfo: {
parent: FilterPrompt.FilterNesting;
toUngroup: FilterPrompt.FilterNesting;
} | null;
protected __onScroll(_event: Event): void;
protected __onLocaleChangedDestroyer: TcHmi.DestroyFunction | null;
protected __onLocaleChanged(): void;
protected __localizeRequestId: number | null;
protected __localization: TcHmi.Locale.PackageLocalization;
protected __localizedElements: Map<HTMLElement, {
key: string;
parameters?: any[];
}>;
protected __localizationReader: TcHmi.Locale.LocalizationReader | undefined;
protected __listDomainsSubscriptionId: number | null;
protected __backgroundAction: Popup.BackgroundAction<OkCancelPrompt.AvailableActions>;
protected __closeButton: Popup.CloseButton<OkCancelPrompt.AvailableActions>;
/**
* Creates a new OkCancelPrompt instance.
* @param localizations A collection of localization symbol expressions to localize texts in the control.
* @param parentControl The control which owns the popup.
*/
constructor(schema: TcHmi.JsonSchema | null, originalFilter: TcHmi.Filter, parentControl?: TcHmi.Controls.System.TcHmiControl | null);
/**
* Destroys the popup and all its controls.
* @param force If true, child controls will be removed from the parent control before destruction, to ensure destruction in case of keepAlive === true.
*/
destroy(force?: boolean): void;
/**
* Aborts a prompted popup and performs the given action to answer the prompt. If no action is specified, the promise is rejected.
* @param action The action to perform to answer the prompt.
*/
abort(action?: Popup.PromptAction<OkCancelPrompt.AvailableActions>): void;
/**
* Handler for the onPressed event of the OK button.
*/
protected __onOkPressed(): void;
/**
* Handler for the onPressed event of the cancel button.
*/
protected __onCancelPressed(): void;
/**
* Performs the action for the OK button, i.e. calling prompt.answer().
*/
protected __ok(): void;
/**
* Performs the action for the Cancel button.
*/
protected __cancel(): void;
/**
* Performs the action for the Reset button.
*/
protected __reset(): void;
/**
* Returns the original filter.
*/
getOriginalFilter(): TcHmi.Filter;
/**
* Sets what happens when the user clicks the background while the popup is showing, or when the prompt is
* aborted via API call.
* @param action The action to perform. If the popup should be closed, you can specify ok or cancel to perform
* the associated action.
*/
setBackgroundAction(action: Popup.BackgroundAction<OkCancelPrompt.AvailableActions>): void;
/**
* Sets if the close button should be used or not.
* @param button Defines whether to show the button and if yes, what action should be taken to answer the prompt.
*/
setCloseButton(button: Popup.CloseButton<OkCancelPrompt.AvailableActions>): void;
/**
* Sets if the close button should be used or not.
* @param show Defines whether to show the button.
*/
setCloseButton(show: boolean): void;
/**
* Performs the given action.
*/
protected __performPromptAction(toPerform: Popup.PromptAction<OkCancelPrompt.AvailableActions>): void;
/**
* Updates the filter configuration.
* @param filter The current filter configuration.
* @param resetable Whether the reset button should be enabled or disabled.
*/
update(filter: TcHmi.Filter, _resetable: boolean): void;
/**
* Update the visual representation of the filter
*/
protected __update(): void;
/**
* Shows the popup.
*/
show(): void;
/**
* Hides the popup and clears the content of the table if necessary.
*/
hide(): void;
/**
* Clears the content of the table.
*/
protected __clear(): void;
/**
* Creates a new row for the filter configuration table.
* @param indentation The indentation levels and whether this row marks the beginnig, end or middle of an indentation.
* @param comparison The comparison to configure in this row.
* @param logic The logic to configure in this row.
*/
protected __createRow(indentation: FilterPrompt.GroupingLevel[], parent: FilterPrompt.FilterNesting, comparison: TcHmi.Comparison, logic?: TcHmi.LogicOperator): HTMLTableRowElement;
/**
* Updates the controls for comparator and value after path has been changed or row has been created.
* @param row An object containing the filter objects, table cell elements and controls
*/
protected __updateControls(row: FilterPrompt.RowData): void;
/**
* Gets the pathInfo for a given path.
* @param path The path to get info for.
*/
protected __getPathInfo(path?: string): _FilterPrompt.PathInfo | null;
/**
* Adds the given row to the __selectedRows collection and enables/disables remove, group and ungroup buttons accordingly.
* @param row The row to select
*/
protected __selectRow(row: FilterPrompt.SelectedRow): void;
/**
* Removes the given row from the __selectedRows collection and enables/disables remove, group and ungroup buttons accordingly.
* @param row The row to deselect
*/
protected __deselectRow(row: FilterPrompt.SelectedRow): void;
/**
* Adds a new row below the lowest selected row or at the end of the table.
*/
protected __add(): void;
/**
* Removes the selected rows.
*/
protected __remove(): void;
/**
* Groups the selected rows if possible.
*/
protected __group(): void;
/**
* Ungroups the selected rows if possible.
*/
protected __ungroup(ungroupInfo: {
parent: FilterPrompt.FilterNesting;
toUngroup: FilterPrompt.FilterNesting;
}, rows: FilterPrompt.SelectedRow[]): void;
/**
* Enables/disables remove, group and ungroup buttons according to currently selected rows.
*/
protected __processSelection(): void;
/**
* Resizes indentation header to match the table content.
*/
protected __resizeIndentationHeader(): void;
/**
* Generates a string consisting of the parentControlId, the name of the popup and a guid to be used as a control id.
*/
protected __newControlId(): string;
/**
* Clones a nesting object while leaving references to filters intact
* @param nesting The object to clone
*/
protected __cloneNesting(nesting: FilterPrompt.FilterNesting): FilterPrompt.FilterNesting;
/**
* Parses a JsonSchema into an object detailing which paths are available with which comparators and values.
* @param schema The JsonSchema to parse.
*/
protected __parseSchema(schema: TcHmi.JsonSchema | null): {
schemaInfo: FilterPrompt.SchemaInfo;
localizationInfo: FilterPrompt.PathInfo[];
domainPaths: string[];
};
/**
* Localizes enum labels and updates comboboxes using them.
*/
protected __localizeEnumLabels(): void;
/**
* Subscribes to ListDomains and updates the schemaInfo, if paths containing "domain" exist in the schemaInfo.
*/
protected __subscribeListDomains(): void;
}
export declare namespace FilterPrompt {
interface SchemaInfo {
availablePaths: Map<string, PathInfo>;
freePath: PathInfo | null;
availableLogic: string[];
}
interface PathInfo {
comparators: string[];
values: any[];
labels: Map<string | number, string>;
localizedLabels: Map<string | number, string>;
allowFreeValue: boolean;
valueIsDate: boolean;
valueType: 'string' | 'number' | 'integer' | 'boolean' | 'any';
nullable: boolean;
isSuggestion: boolean;
}
interface RowData {
row: HTMLTableRowElement;
logicOperator?: TcHmi.LogicOperator;
comparison: TcHmi.Comparison;
parent: FilterNesting;
selection: {
control: TcHmiCheckbox;
destroyer: TcHmi.DestroyFunction;
};
logic?: {
control: TcHmiCombobox<TcHmi.LogicOperator['logic']>;
destroyer: TcHmi.DestroyFunction;
};
path: {
control: TcHmiCombobox | TcHmiTextbox | null;
destroyer: TcHmi.DestroyFunction | null;
};
comparator: {
cell: HTMLTableCellElement;
control: TcHmiCombobox<string, TcHmiCombobox_ListItemGeneric<string>[]> | null;
destroyer: TcHmi.DestroyFunction | null;
};
value: {
cell: HTMLTableCellElement;
control: TcHmiCombobox | TcHmiTextbox | TcHmiDateTimeInput | null;
destroyer: TcHmi.DestroyFunction | null;
};
}
interface SelectedRow {
rowElement: HTMLTableRowElement;
comparison: TcHmi.Comparison;
parent: FilterNesting;
}
interface FilterNesting {
filter: TcHmi.Filter;
parent: FilterNesting | null;
}
interface GroupingLevel {
opens: boolean;
closes: boolean;
}
}
import _FilterPrompt = FilterPrompt;
declare global {
namespace TcHmi.Controls.Helpers {
let FilterPrompt: typeof _FilterPrompt;
type FilterPrompt = _FilterPrompt;
namespace FilterPrompt {
type SchemaInfo = _FilterPrompt.SchemaInfo;
type PathInfo = _FilterPrompt.PathInfo;
type RowData = _FilterPrompt.RowData;
type SelectedRow = _FilterPrompt.SelectedRow;
type FilterNesting = _FilterPrompt.FilterNesting;
type GroupingLevel = _FilterPrompt.GroupingLevel;
}
}
}

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#000000" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(5.000000, 5.000000)">
<path d="M 0.5,8.5 L 8.5,8.5 L 8.5,0.5 L 11.5,0.5 L 11.5,8.5 L 19.5,8.5 L 19.5,11.5 L 11.5,11.5 L 11.5,19.5 L 8.5,19.5 L 8.5,11.5 L 0.5,11.5 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 468 B

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="30px" height="30px" viewBox="0 0 30 30" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g stroke="#FFFFFF" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(5.000000, 5.000000)">
<path d="M 0.5,8.5 L 8.5,8.5 L 8.5,0.5 L 11.5,0.5 L 11.5,8.5 L 19.5,8.5 L 19.5,11.5 L 11.5,11.5 L 11.5,19.5 L 8.5,19.5 L 8.5,11.5 L 0.5,11.5 Z" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 464 B

Some files were not shown because too many files have changed in this diff Show More