diff --git a/examples/CI-Eng-Sample/displays/CIENG_AlarmBanner.xml b/examples/CI-Eng-Sample/displays/CIENG_AlarmBanner.xml
new file mode 100644
index 0000000..9aaff3c
--- /dev/null
+++ b/examples/CI-Eng-Sample/displays/CIENG_AlarmBanner.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+Alarm banner
+true
+1920
+96
+14
+
+true
+
+
+
+
+
+
+500
+true
+false
+2OverviewAlways showntrue10.0
+3RoughShown when viewing viewing a large areatrue25.0
+4StandardShown when using the default view settingtrue100.0
+5DetailShown only when viewing a small areatrue400.0
+6IntricaciesShown only when viewing a very small areatrue1000.0
+1Layer1
+8
+7960.048.048.048.0960.0960.00.00.0falsetrueCIENG_OverviewCIENG_OperatorovwACTION navigate to ovw CIENG_Overview stretchDisplayfalse
+8960.00.00.50.5960.0960.00.00.0falsetrue
+90.09410.195195.048.041.041.085.085.00.00.0truetrue
+10ALARMStrue47.422.09.09.023.423.40.00.0
+11104.022.08.08.08.08.00.00.0falsetrue0.0java.lang.Doublefasttools.jwui.common.property.paint.PaintSet0.010.020.080.090.01CI-Eng-Sample.TANK1.LEVELItemValue
+12Tank 1true134.622.09.09.016.616.60.00.0
+
+14falsetruepriorityNackColor[00]priorityAckColor[00]priorityNackColor[01]priorityAckColor[01]priorityNackColor[02]priorityAckColor[02]priorityNackColor[03]priorityAckColor[03]priorityNackColor[04]priorityAckColor[04]priorityNackColor[05]priorityAckColor[05]priorityNackColor[06]priorityAckColor[06]priorityNackColor[07]priorityAckColor[07]priorityNackColor[08]priorityAckColor[08]priorityNackColor[09]priorityAckColor[09]priorityNackColor[10]priorityAckColor[10]priorityNackColor[11]priorityAckColor[11]priorityNackColor[12]priorityAckColor[12]priorityNackColor[13]priorityAckColor[13]priorityNackColor[14]priorityAckColor[14]priorityNackColor[15]priorityAckColor[15]true1199true269true3299true4169true5319true6299true7119true8109true9109falsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse1-12-23-30-0,4-15
+
+
diff --git a/examples/CI-Eng-Sample/displays/CIENG_Alarms.xml b/examples/CI-Eng-Sample/displays/CIENG_Alarms.xml
new file mode 100644
index 0000000..e495e82
--- /dev/null
+++ b/examples/CI-Eng-Sample/displays/CIENG_Alarms.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+Alarms
+true
+1880
+760
+15
+
+true
+
+
+
+
+
+
+500
+true
+false
+2OverviewAlways showntrue10.0
+3RoughShown when viewing viewing a large areatrue25.0
+4StandardShown when using the default view settingtrue100.0
+5DetailShown only when viewing a small areatrue400.0
+6IntricaciesShown only when viewing a very small areatrue1000.0
+1Layer1
+9
+7940.0380.0380.0380.0940.0940.00.00.0falsetrue
+80.01080.0459940.0229.1217.9217.9930.0930.00.00.0truetrue
+9CURRENT ALARMStrue78.336.911.011.048.348.30.00.0
+10All areas - acknowledge with the check box or right-clicktrue150.959.29.09.0120.9120.90.00.0
+11falsetruepriorityNackColor[00]priorityAckColor[00]priorityNackColor[01]priorityAckColor[01]priorityNackColor[02]priorityAckColor[02]priorityNackColor[03]priorityAckColor[03]priorityNackColor[04]priorityAckColor[04]priorityNackColor[05]priorityAckColor[05]priorityNackColor[06]priorityAckColor[06]priorityNackColor[07]priorityAckColor[07]priorityNackColor[08]priorityAckColor[08]priorityNackColor[09]priorityAckColor[09]priorityNackColor[10]priorityAckColor[10]priorityNackColor[11]priorityAckColor[11]priorityNackColor[12]priorityAckColor[12]priorityNackColor[13]priorityAckColor[13]priorityNackColor[14]priorityAckColor[14]priorityNackColor[15]priorityAckColor[15]true1213true274true3320true4181true5341true6320true7128true8117true9117falsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse1-12-23-30-0,4-15
+120.01080.0688940.0603.5145.3145.3930.0930.00.00.0truetrue
+13ALARM HISTORY - TANK 1true96.8483.911.011.066.866.80.00.0
+14Historical overview filtered on alarm selection area CIENG_TANK1true166.5506.39.09.0136.5136.50.00.0
+15falsetruepriorityNackColor[00]priorityAckColor[00]priorityNackColor[01]priorityAckColor[01]priorityNackColor[02]priorityAckColor[02]priorityNackColor[03]priorityAckColor[03]priorityNackColor[04]priorityAckColor[04]priorityNackColor[05]priorityAckColor[05]priorityNackColor[06]priorityAckColor[06]priorityNackColor[07]priorityAckColor[07]priorityNackColor[08]priorityAckColor[08]priorityNackColor[09]priorityAckColor[09]priorityNackColor[10]priorityAckColor[10]priorityNackColor[11]priorityAckColor[11]priorityNackColor[12]priorityAckColor[12]priorityNackColor[13]priorityAckColor[13]priorityNackColor[14]priorityAckColor[14]priorityNackColor[15]priorityAckColor[15]true1213true274true3320true4181true5341true6320true7128true8117true9117falsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalsefalse1-12-23-30-0,4-15CIENG_TANK1
+
+
diff --git a/examples/CI-Eng-Sample/displays/CIENG_Control.xml b/examples/CI-Eng-Sample/displays/CIENG_Control.xml
new file mode 100644
index 0000000..5501c0c
--- /dev/null
+++ b/examples/CI-Eng-Sample/displays/CIENG_Control.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+Process control
+true
+1880
+760
+72
+
+true
+
+
+
+
+
+
+500
+true
+false
+2OverviewAlways showntrue10.0
+3RoughShown when viewing viewing a large areatrue25.0
+4StandardShown when using the default view settingtrue100.0
+5DetailShown only when viewing a small areatrue400.0
+6IntricaciesShown only when viewing a very small areatrue1000.0
+1Layer1
+66
+7940.0380.0380.0380.0940.0940.00.00.0falsetrue
+80.02160.0551472.5192.8181.6181.6462.5462.50.00.0truetrue
+9SETPOINT -> PLC1 (MODBUS LOOPBACK)true134.836.911.011.0104.8104.80.00.0
+10Slider, spinner and input field write PLC1.SETPOINT; READBACK returns through Modbustrue218.259.29.09.0188.2188.20.00.0
+11100.00.00.010.05.0truetruefalsefalse0.0CI-Eng-Sample.PLC1.SETPOINTItemValue
+12SPINNERtrue61.0176.68.08.021.021.00.00.0
+13true5.00.0100.0false0.0CI-Eng-Sample.PLC1.SETPOINTItemValue
+14INPUT FIELDtrue228.3176.68.08.028.328.30.00.0
+15999true0.0CI-Eng-Sample.PLC1.SETPOINTItemValue
+16SETPOINTtrue383.4176.68.08.023.423.40.00.0
+170.0999true381.9210.120.020.021.921.90.00.00.01CI-Eng-Sample.PLC1.SETPOINTItemValue
+18READBACK (data bar + scale)true105.8261.58.08.065.865.80.00.0
+19true0.0100.00.01CI-Eng-Sample.PLC1.READBACKItemValue
+20100.00.010.05.0999false
+2145.0270.0false790.0195.695.095.095.095.00.00.0truefalse
+22179.80.5false790.0195.695.095.095.095.00.00.0truefalse0.0java.lang.Doublejava.lang.Double0.0100.00.5270.01CI-Eng-Sample.PLC1.READBACKItemValue0.0java.lang.Doublejava.lang.Double0.0100.0179.7545.01CI-Eng-Sample.PLC1.READBACKItemValue
+230.0999true790.0191.118.018.081.081.00.00.00.01CI-Eng-Sample.PLC1.READBACKItemValue
+24true790.0223.59.09.040.040.00.00.0
+25Readbacktrue790.0306.210.010.095.095.00.00.0
+26706.040.26.06.06.06.00.00.0falsetrue0.0java.lang.Booleanfasttools.jwui.common.property.paint.PaintSetfalsetrue1CI-Eng-Sample.PLC1.COMM_OKItemValue
+27station CIENG_PLCtrue762.939.19.09.044.944.90.00.0
+280.02160.05511407.5192.8181.6181.6462.5462.50.00.0truetrue
+29DIGITAL COMMAND -> PLC1.CMDtrue1052.836.911.011.087.887.80.00.0
+30Toggle and push buttons write the coil; FEEDBACK is read back from the input bittrue1139.059.29.09.0174.0174.00.00.0
+310.0CI-Eng-Sample.PLC1.CMDItemValue
+
+
+341360.0156.560.060.060.060.00.00.0truetrue0.0java.lang.Booleanfasttools.jwui.common.property.paint.PaintSetfalsetrue1CI-Eng-Sample.PLC1.FEEDBACKItemValue
+35FEEDBACKtrue1360.0156.512.012.060.060.00.00.0
+36LAST CHANGE OF FEEDBACKtrue1525.3109.58.08.065.365.30.00.0
+37truetrue0.01CI-Eng-Sample.PLC1.FEEDBACKItemUpdTime
+38STATUStrue1478.5187.88.08.018.518.50.00.0
+39NORMALtrue1493.6214.612.012.033.633.60.00.00.01CI-Eng-Sample.PLC1.FEEDBACKItemStatusMnemonic
+400.02160.0551472.5567.2181.6181.6462.5462.50.00.0truetrue
+41PUMP 1true50.5411.311.011.020.520.50.00.0
+42Combo box, buttons and check box write PUMP1.MODE / PUMP1.RUNNING (mode changes are audited)true257.7433.69.09.0227.7227.70.00.0
+43MODE (COMBO BOX)true90.2456.08.08.050.250.20.00.0
+440.0CI-Eng-Sample.PUMP1.MODEItemValue
+
+
+47RUN COMMAND (CHECK BOX, MANUAL MODE)true152.1543.28.08.0112.1112.10.00.0
+48false0.0CI-Eng-Sample.PUMP1.RUNNINGItemValue
+49DESCRIPTION (TEXT FIELD)true102.4625.98.08.062.462.40.00.0
+50false0.01CI-Eng-Sample.PUMP1.MODEItemDesc
+51655.0530.955.055.055.055.00.00.0truetrue0.0java.lang.Booleanfasttools.jwui.common.property.paint.PaintSetfalsetrue1CI-Eng-Sample.PUMP1.RUNNINGItemValue
+52P1true655.0529.812.012.055.055.00.00.0
+53RUN TIME (INTEGRATOR)true670.0621.48.08.0110.0110.00.00.0
+540.09999999true705.6651.617.017.044.444.40.00.00.01CI-Eng-Sample.PUMP1.RUNNING.RUN_SECONDSItemValue
+55strue756.4653.89.09.02.42.40.00.0
+560.02160.05511407.5567.2181.6181.6462.5462.50.00.0truetrue
+57TANK 1 - ALARM TESTtrue1021.5411.311.011.056.556.50.00.0
+58Stop live data first, then drive TANK1.LEVEL across its limits (H 80 / HH 90 / L 20 / LL 10)true1150.2433.69.09.0185.2185.20.00.0
+59100.00.00.010.05.0truetruefalsefalse0.0CI-Eng-Sample.TANK1.LEVELItemValue
+
+
+
+
+
+65LEVELtrue988.2641.58.08.013.213.20.00.0
+660.0999.9true1026.2680.625.025.051.251.20.00.00.01CI-Eng-Sample.TANK1.LEVELItemValue0.0java.lang.Doublefasttools.jwui.common.property.paint.PaintSet0.010.020.080.090.01CI-Eng-Sample.TANK1.LEVELItemValue
+67ITEM STATUStrue1211.7641.58.08.031.731.70.00.0
+68NORMALtrue1226.3678.417.017.046.346.30.00.00.01CI-Eng-Sample.TANK1.LEVELItemStatusMnemonic0.0java.lang.Doublefasttools.jwui.common.property.paint.PaintSet0.010.020.080.090.01CI-Eng-Sample.TANK1.LEVELItemValue
+6945.0270.0false1720.0581.290.090.090.090.00.00.0truefalse
+70179.80.5false1720.0581.290.090.090.090.00.00.0truefalse0.0java.lang.Doublejava.lang.Double0.0100.00.5270.01CI-Eng-Sample.TANK1.LEVELItemValue0.0java.lang.Doublejava.lang.Double0.0100.0179.7545.01CI-Eng-Sample.TANK1.LEVELItemValue0.0java.lang.Doublefasttools.jwui.common.property.paint.PaintSet0.010.020.080.090.01CI-Eng-Sample.TANK1.LEVELItemValue
+71100.00.020.05.0999225.0-270.0
+720.0999.9true1720.0581.220.020.060.060.00.00.00.01CI-Eng-Sample.TANK1.LEVELItemValue
+
+
diff --git a/examples/CI-Eng-Sample/displays/CIENG_Header.xml b/examples/CI-Eng-Sample/displays/CIENG_Header.xml
new file mode 100644
index 0000000..6fed28e
--- /dev/null
+++ b/examples/CI-Eng-Sample/displays/CIENG_Header.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+Header
+true
+1920
+96
+43
+
+true
+
+
+
+
+
+
+500
+true
+false
+2OverviewAlways showntrue10.0
+3RoughShown when viewing viewing a large areatrue25.0
+4StandardShown when using the default view settingtrue100.0
+5DetailShown only when viewing a small areatrue400.0
+6IntricaciesShown only when viewing a very small areatrue1000.0
+1Layer1
+37
+7960.048.048.048.0960.0960.00.00.0falsetrue
+8960.095.00.50.5960.0960.00.00.0falsetrue
+90.46670.466750.048.030.030.030.030.00.00.0falsetrue
+10CItrue50.048.014.014.030.030.00.00.0
+11CI-Eng-Sampletrue171.133.015.015.075.175.10.00.0
+12Operations dashboard | Tank farm demotrue201.862.010.010.0105.8105.80.00.0
+130.09520.2353604.048.034.034.084.084.00.00.0truetrue
+14TANK LEVELtrue561.830.08.08.027.827.80.00.0
+150.0999.9true563.256.016.016.029.229.20.00.00.01CI-Eng-Sample.TANK1.LEVELItemValue0.0java.lang.Doublefasttools.jwui.common.property.paint.PaintSet0.010.020.080.090.01CI-Eng-Sample.TANK1.LEVELItemValue
+16%true642.459.09.09.04.44.40.00.0
+170.09520.2353784.048.034.034.084.084.00.00.0truetrue
+18INFLOWtrue733.030.08.08.019.019.00.00.0
+190.09999.9true749.156.016.016.035.135.10.00.00.01CI-Eng-Sample.TANK1.INFLOWItemValue
+20m3/htrue830.259.09.09.012.212.20.00.0
+210.09520.2353964.048.034.034.084.084.00.00.0truetrue
+22VOLUMEtrue914.530.08.08.020.520.50.00.0
+230.09999.9true929.156.016.016.035.135.10.00.00.01CI-Eng-Sample.TANK1.CALC.VOLUMEItemValue
+24m3true1005.359.09.09.07.37.30.00.0
+250.09520.23531144.048.034.034.084.084.00.00.0truetrue
+26PUMP 1true1092.530.08.08.018.518.50.00.0
+271083.057.09.09.09.09.00.00.0falsetrue0.0java.lang.Booleanfasttools.jwui.common.property.paint.PaintSetfalsetrue1CI-Eng-Sample.PUMP1.RUNNINGItemValue
+28RUNNINGtrue1132.256.012.012.032.232.20.00.00.0java.lang.Booleanjava.lang.Booleanfalsefalsetruetrue1CI-Eng-Sample.PUMP1.RUNNINGItemValue
+29STOPPEDtrue1130.256.012.012.030.230.20.00.00.0java.lang.Booleanjava.lang.Booleanfalsetruetruefalse1CI-Eng-Sample.PUMP1.RUNNINGItemValue
+300.09520.23531324.048.034.034.084.084.00.00.0truetrue
+31COMMUNICATIONtrue1297.930.08.08.043.943.90.00.0
+321261.057.07.07.07.07.00.00.0falsetrue0.0java.lang.Booleanfasttools.jwui.common.property.paint.PaintSetfalsetrue1CI-Eng-Sample.PLC1.COMM_OKItemValue
+33PLC1true1286.756.010.010.012.712.70.00.0
+341337.057.07.07.07.07.00.00.0falsetrue0.0java.lang.Booleanfasttools.jwui.common.property.paint.PaintSetfalsetrue1CI-Eng-Sample.UA.COMM_OKItemValue
+35OPC UAtrue1370.556.010.010.020.520.50.00.0
+360.06400.23531549.048.034.034.0125.0125.00.00.0truetrue
+37LIVE DATAtrue1462.430.08.08.024.424.40.00.0
+381542.029.06.06.06.06.00.00.0falsetrue0.0java.lang.Booleanfasttools.jwui.common.property.paint.PaintSetfalsetrue1CI-Eng-Sample.DEMO.FEED_ONItemValue
+
+
+
+42LAST UPDATEtrue1823.730.08.08.031.731.70.00.0
+43falsetrue0.01CI-Eng-Sample.DEMO.COUNTERItemUpdTime
+
+
diff --git a/examples/CI-Eng-Sample/displays/CIENG_Overview.xml b/examples/CI-Eng-Sample/displays/CIENG_Overview.xml
new file mode 100644
index 0000000..545581a
--- /dev/null
+++ b/examples/CI-Eng-Sample/displays/CIENG_Overview.xml
@@ -0,0 +1,100 @@
+
+
+
+
+
+Overview
+true
+1880
+760
+76
+
+true
+
+
+
+
+
+
+500
+true
+false
+2OverviewAlways showntrue10.0
+3RoughShown when viewing viewing a large areatrue25.0
+4StandardShown when using the default view settingtrue100.0
+5DetailShown only when viewing a small areatrue400.0
+6IntricaciesShown only when viewing a very small areatrue1000.0
+1Layer1
+70
+7940.0380.0380.0380.0940.0940.00.00.0falsetrue
+80.01800.0271565.0380.0368.8368.8555.0555.00.00.0truetrue
+9PROCESS - TANK 1true76.836.911.011.046.846.80.00.0
+10Click the tank for its faceplatetrue92.459.29.09.062.462.40.00.0
+11250.0377.88.08.0190.0190.00.00.0falsetrue
+12250.0377.85.05.0190.0190.00.00.0falsetrue0.0java.lang.Doublejava.lang.Boolean0.0false5.0true1CI-Eng-Sample.TANK1.INFLOWItemValue
+13INFLOWtrue79.0288.48.08.019.019.00.00.0
+140.09999.9true109.7321.920.020.049.749.70.00.00.01CI-Eng-Sample.TANK1.INFLOWItemValue
+15m3/htrue227.7326.410.010.013.713.70.00.0
+16Tank 1 - click for the faceplate0.15000.0671560.0380.0268.2268.2120.0120.00.00.0truetrueCIENG_TankFaceplateCIENG_Popupdefault
+170.10910.0467560.0380.0257.1257.1110.0110.00.00.0falsetrue0.50.0java.lang.Doublejava.lang.Double0.0100.00.01.01CI-Eng-Sample.TANK1.LEVELItemValue0.0java.lang.Doublefasttools.jwui.common.property.paint.PaintSet0.010.020.080.090.01CI-Eng-Sample.TANK1.LEVELItemValueCIENG_TankFaceplateCIENG_Popupdefault
+18TANK 1true560.082.714.014.0110.0110.00.00.0
+190.0999.9true560.0363.225.025.0100.0100.00.00.00.01CI-Eng-Sample.TANK1.LEVELItemValue
+20% leveltrue560.0404.610.010.0100.0100.00.00.0
+21691.0174.41.01.09.09.00.00.0falsetrue
+22HH 90true721.1174.49.09.015.115.10.00.0
+23691.0225.81.01.09.09.00.00.0falsetrue
+24H 80true717.2225.89.09.011.211.20.00.0
+25691.0534.21.01.09.09.00.00.0falsetrue
+26L 20true715.8534.29.09.09.89.80.00.0
+27691.0585.61.01.09.09.00.00.0falsetrue
+28LL 10true718.2585.69.09.012.212.20.00.0
+
+30755.0603.58.08.075.075.00.00.0falsetrue
+31755.0603.55.05.075.075.00.00.0falsetrue0.01CI-Eng-Sample.PUMP1.RUNNINGItemValue
+32875.0603.545.045.045.045.00.00.0truetrue0.0java.lang.Booleanfasttools.jwui.common.property.paint.PaintSetfalsetrue1CI-Eng-Sample.PUMP1.RUNNINGItemValue
+33P1true875.0603.512.012.045.045.00.00.0
+341005.0603.58.08.085.085.00.00.0falsetrue
+351005.0603.55.05.085.085.00.00.0falsetrue0.01CI-Eng-Sample.PUMP1.RUNNINGItemValue
+36PUMP 1true875.0680.69.09.075.075.00.00.0
+37AUTOtrue875.0704.110.010.075.075.00.00.00.0java.lang.Doublejava.lang.Boolean0.0false1.0true1CI-Eng-Sample.PUMP1.MODEItemValue
+38MANUALtrue875.0704.110.010.075.075.00.00.00.0java.lang.Doublejava.lang.Boolean0.0true1.0false1CI-Eng-Sample.PUMP1.MODEItemValue
+390.06960.0434975.0285.0184.4184.4115.0115.00.00.0truetrue
+40VOLUME (TANK1.CALC)true926.2125.28.08.050.250.20.00.0
+410.09999.9true911.1153.115.015.035.135.10.00.00.01CI-Eng-Sample.TANK1.CALC.VOLUMEItemValue
+42m3true1035.3155.49.09.07.37.30.00.0
+43FLOW PER SECOND (JFLOW)true938.4196.78.08.062.462.40.00.0
+440.0999.99true911.1224.615.015.035.135.10.00.00.01CI-Eng-Sample.TANK1.JFLOW.sPerMinItemValue
+45m3/strue1039.7226.99.09.011.711.70.00.0
+46LEVEL MAXIMUMtrue914.0268.28.08.038.038.00.00.0
+470.0999.9true905.2296.215.015.029.229.20.00.00.01CI-Eng-Sample.TANK1.LEVEL.MAXItemValue
+48%true1032.4298.49.09.04.44.40.00.0
+49COUNTER (DEMO.INCR1)true930.1339.88.08.054.154.10.00.0
+500.0999true893.5367.715.015.017.617.60.00.00.01CI-Eng-Sample.DEMO.COUNTERItemValue
+51true1030.0369.99.09.02.02.00.00.0
+52true0.0100.00.01CI-Eng-Sample.DEMO.COUNTERItemValue
+53PUMP RUN TIMEtrue913.0429.28.08.037.037.00.00.0
+540.09999999true906.7451.512.012.030.730.70.00.00.01CI-Eng-Sample.PUMP1.RUNNING.RUN_SECONDSItemValue
+55strue1032.4452.69.09.02.42.40.00.0
+560.02700.05421500.0195.6184.4184.4370.0370.00.00.0truetrue
+57KEY FIGUREStrue1182.736.911.011.032.732.70.00.0
+5845.0270.0false1255.0195.695.095.095.095.00.00.0truefalse
+59179.80.5false1255.0195.695.095.095.095.00.00.0truefalse0.0java.lang.Doublejava.lang.Double0.0100.00.5270.01CI-Eng-Sample.TANK1.LEVELItemValue0.0java.lang.Doublejava.lang.Double0.0100.0179.7545.01CI-Eng-Sample.TANK1.LEVELItemValue0.0java.lang.Doublefasttools.jwui.common.property.paint.PaintSet0.010.020.080.090.01CI-Eng-Sample.TANK1.LEVELItemValue
+600.0999.9true1255.0191.118.018.081.081.00.00.00.01CI-Eng-Sample.TANK1.LEVELItemValue0.0java.lang.Doublefasttools.jwui.common.property.paint.PaintSet0.010.020.080.090.01CI-Eng-Sample.TANK1.LEVELItemValue
+61%true1255.0223.59.09.040.040.00.00.0
+62Leveltrue1255.0306.210.010.095.095.00.00.0
+6345.0270.0false1500.0195.695.095.095.095.00.00.0truefalse
+64179.80.5false1500.0195.695.095.095.095.00.00.0truefalse0.0java.lang.Doublejava.lang.Double0.0500.00.5270.01CI-Eng-Sample.TANK1.INFLOWItemValue0.0java.lang.Doublejava.lang.Double0.0500.0179.7545.01CI-Eng-Sample.TANK1.INFLOWItemValue
+650.09999true1500.0191.118.018.081.081.00.00.00.01CI-Eng-Sample.TANK1.INFLOWItemValue
+66m3/htrue1500.0223.59.09.040.040.00.00.0
+67Inflowtrue1500.0306.210.010.095.095.00.00.0
+6845.0270.0false1745.0195.695.095.095.095.00.00.0truefalse
+69179.80.5false1745.0195.695.095.095.095.00.00.0truefalse0.0java.lang.Doublejava.lang.Double0.0200.00.5270.01CI-Eng-Sample.TANK1.CALC.VOLUMEItemValue0.0java.lang.Doublejava.lang.Double0.0200.0179.7545.01CI-Eng-Sample.TANK1.CALC.VOLUMEItemValue
+700.0999.9true1745.0191.118.018.081.081.00.00.00.01CI-Eng-Sample.TANK1.CALC.VOLUMEItemValue
+71m3true1745.0223.59.09.040.040.00.00.0
+72Volumetrue1745.0306.210.010.095.095.00.00.0
+730.02700.05591500.0570.0178.8178.8370.0370.00.00.0truetrue
+74LAST 10 MINUTEStrue1195.3416.911.011.045.345.30.00.0
+75Micro trend: level (teal, 0-100 %) and inflow (violet, 0-500 m3/h)true1284.5439.29.09.0134.5134.50.00.0
+762truetruetruefalseitemName[0]scaleMin[0]0.0scaleMax[0]100.0color[0]stroke[0]itemName[1]scaleMin[1]0.0scaleMax[1]500.0color[1]stroke[1]0.01CI-Eng-Sample.TANK1.LEVELItemName0.01CI-Eng-Sample.TANK1.INFLOWItemName
+
+
diff --git a/examples/CI-Eng-Sample/displays/CIENG_System.xml b/examples/CI-Eng-Sample/displays/CIENG_System.xml
new file mode 100644
index 0000000..76d37e2
--- /dev/null
+++ b/examples/CI-Eng-Sample/displays/CIENG_System.xml
@@ -0,0 +1,84 @@
+
+
+
+
+
+System
+true
+1880
+760
+60
+
+true
+
+
+
+
+
+
+500
+true
+false
+2OverviewAlways showntrue10.0
+3RoughShown when viewing viewing a large areatrue25.0
+4StandardShown when using the default view settingtrue100.0
+5DetailShown only when viewing a small areatrue400.0
+6IntricaciesShown only when viewing a very small areatrue1000.0
+1Layer1
+54
+7940.0380.0380.0380.0940.0940.00.00.0falsetrue
+80.03330.0559310.0190.0178.8178.8300.0300.00.00.0truetrue
+9SERVER HEALTHtrue70.936.911.011.040.940.90.00.0
+10Real values of this PC, written by the live-data feedtrue137.259.29.09.0107.2107.20.00.0
+1145.0270.0false160.0201.2100.0100.0100.0100.00.00.0truefalse
+12179.80.5false160.0201.2100.0100.0100.0100.00.00.0truefalse0.0java.lang.Doublejava.lang.Double0.0100.00.5270.01CI-Eng-Sample.SYSTEM.CPU_LOADItemValue0.0java.lang.Doublejava.lang.Double0.0100.0179.7545.01CI-Eng-Sample.SYSTEM.CPU_LOADItemValue0.0java.lang.Doublefasttools.jwui.common.property.paint.PaintSet0.080.090.01CI-Eng-Sample.SYSTEM.CPU_LOADItemValue
+130.0999.9true160.0196.718.018.086.086.00.00.00.01CI-Eng-Sample.SYSTEM.CPU_LOADItemValue
+14%true160.0229.19.09.040.040.00.00.0
+15CPU loadtrue160.0317.410.010.0100.0100.00.00.0
+1645.0270.0false450.0201.2100.0100.0100.0100.00.00.0truefalse
+17179.80.5false450.0201.2100.0100.0100.0100.00.00.0truefalse0.0java.lang.Doublejava.lang.Double0.0100.00.5270.01CI-Eng-Sample.SYSTEM.DISK_CItemValue0.0java.lang.Doublejava.lang.Double0.0100.0179.7545.01CI-Eng-Sample.SYSTEM.DISK_CItemValue0.0java.lang.Doublefasttools.jwui.common.property.paint.PaintSet0.080.090.01CI-Eng-Sample.SYSTEM.DISK_CItemValue
+180.0999.9true450.0196.718.018.086.086.00.00.00.01CI-Eng-Sample.SYSTEM.DISK_CItemValue
+19%true450.0229.19.09.040.040.00.00.0
+20Disk C: usedtrue450.0317.410.010.0100.0100.00.00.0
+210.03330.0559920.0190.0178.8178.8300.0300.00.00.0truetrue
+22COMMUNICATION AND PROCESSEStrue731.636.911.011.091.691.60.00.0
+230.02140.2440920.091.624.624.6280.0280.00.00.0falsetrue
+24665.091.69.09.09.09.00.00.0falsetrue0.0java.lang.Booleanfasttools.jwui.common.property.paint.PaintSetfalsetrue1CI-Eng-Sample.PLC1.COMM_OKItemValue
+25Modbus station CIENG_PLCtrue765.591.610.010.077.577.50.00.0
+26NORMALtrue1165.691.610.010.024.424.40.00.00.01CI-Eng-Sample.PLC1.COMM_OKItemStatusMnemonic
+270.02140.2440920.0149.824.624.6280.0280.00.00.0falsetrue
+28665.0149.89.09.09.09.00.00.0falsetrue0.0java.lang.Booleanfasttools.jwui.common.property.paint.PaintSetfalsetrue1CI-Eng-Sample.UA.COMM_OKItemValue
+29OPC UA client station CIENG_UAtrue778.7149.810.010.090.790.70.00.0
+30NORMALtrue1165.6149.810.010.024.424.40.00.00.01CI-Eng-Sample.UA.COMM_OKItemStatusMnemonic
+310.02140.2440920.0207.924.624.6280.0280.00.00.0falsetrue
+32665.0207.99.09.09.09.00.00.0falsetrue0.0java.lang.Doublefasttools.jwui.common.property.paint.PaintSet0.00.51CI-Eng-Sample.UA.SRV_STATEItemValue
+33OPC UA server state (0 = running)true784.5207.910.010.096.596.50.00.0
+34NORMALtrue1165.6207.910.010.024.424.40.00.00.01CI-Eng-Sample.UA.SRV_STATEItemStatusMnemonic
+350.02140.2440920.0266.024.624.6280.0280.00.00.0falsetrue
+36665.0266.09.09.09.09.00.00.0falsetrue0.0java.lang.Doublefasttools.jwui.common.property.paint.PaintSet0.00.51CI-Eng-Sample.SYSTEM.PING_LOCALHOSTItemValue
+37localhost reachabletrue743.1266.010.010.055.155.10.00.0
+38NORMALtrue1165.6266.010.010.024.424.40.00.00.01CI-Eng-Sample.SYSTEM.PING_LOCALHOSTItemStatusMnemonic
+390.02140.2440920.0324.124.624.6280.0280.00.00.0falsetrue
+40665.0324.19.09.09.09.00.00.0falsetrue0.0java.lang.Doublefasttools.jwui.common.property.paint.PaintSet0.00.51CI-Eng-Sample.SYSTEM.PROC_ALMItemValue
+41ALARM process (alm) runningtrue772.3324.110.010.084.384.30.00.0
+42NORMALtrue1165.6324.110.010.024.424.40.00.00.01CI-Eng-Sample.SYSTEM.PROC_ALMItemStatusMnemonic
+430.03120.05591550.0190.0178.8178.8320.0320.00.00.0truetrue
+44OPC UA LOOPBACKtrue1299.736.911.011.049.749.70.00.0
+45TANK1.LEVEL read back through CI Server's own OPC UA servertrue1385.559.29.09.0135.5135.50.00.0
+46TANK1.LEVELtrue1290.787.28.08.030.730.70.00.0
+470.0999.9true1303.9125.222.022.043.943.90.00.00.01CI-Eng-Sample.TANK1.LEVELItemValue
+48true0.0100.00.01CI-Eng-Sample.TANK1.LEVELItemValue
+49LAST UPDATEtrue1291.7212.48.08.031.731.70.00.0
+50falsetrue0.01CI-Eng-Sample.TANK1.LEVELItemUpdTime
+51UA.LEVEL_COPYtrue1596.187.28.08.036.136.10.00.0
+520.0999.9true1603.9125.222.022.043.943.90.00.00.01CI-Eng-Sample.UA.LEVEL_COPYItemValue
+53true0.0100.00.01CI-Eng-Sample.UA.LEVEL_COPYItemValue
+54LAST UPDATEtrue1591.7212.48.08.031.731.70.00.0
+55falsetrue0.01CI-Eng-Sample.UA.LEVEL_COPYItemUpdTime
+56100.00.010.05.0999false
+570.01080.0542940.0564.4184.4184.4930.0930.00.00.0truetrue
+58REPORTStrue52.9405.711.011.022.922.90.00.0
+59Report component: select CIENG_TANK1 or CIENG_HTML, generate and viewtrue193.3428.19.09.0163.3163.30.00.0
+60
+
+
diff --git a/examples/CI-Eng-Sample/displays/CIENG_TankFaceplate.xml b/examples/CI-Eng-Sample/displays/CIENG_TankFaceplate.xml
new file mode 100644
index 0000000..b2a8c55
--- /dev/null
+++ b/examples/CI-Eng-Sample/displays/CIENG_TankFaceplate.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+Tank 1 faceplate
+true
+420
+600
+42
+
+true
+
+
+
+
+
+
+500
+true
+false
+2OverviewAlways showntrue10.0
+3RoughShown when viewing viewing a large areatrue25.0
+4StandardShown when using the default view settingtrue100.0
+5DetailShown only when viewing a small areatrue400.0
+6IntricaciesShown only when viewing a very small areatrue1000.0
+1Layer1
+36
+7210.0300.0300.0300.0210.0210.00.00.0falsetrue
+8210.026.026.026.0210.0210.00.00.0falsetrue
+9TANK 1 | LEVELtrue77.526.012.012.057.557.50.00.0
+
+11Tank 1 level (%)true57.073.09.09.037.037.00.00.00.01CI-Eng-Sample.TANK1.LEVELItemDesc
+120.0999.9true78.5114.028.028.058.558.50.00.00.01CI-Eng-Sample.TANK1.LEVELItemValue0.0java.lang.Doublefasttools.jwui.common.property.paint.PaintSet0.010.020.080.090.01CI-Eng-Sample.TANK1.LEVELItemValue
+13%true230.3118.012.012.06.36.30.00.0
+14STATUStrue381.5100.08.08.018.518.50.00.0
+15NORMALtrue366.4123.013.013.033.633.60.00.00.01CI-Eng-Sample.TANK1.LEVELItemStatusMnemonic0.0java.lang.Doublefasttools.jwui.common.property.paint.PaintSet0.010.020.080.090.01CI-Eng-Sample.TANK1.LEVELItemValue
+16true0.0100.00.01CI-Eng-Sample.TANK1.LEVELItemValue
+17100.00.020.05.0999true
+18ALARM LIMITStrue225.1168.08.08.035.135.10.00.0
+190.05710.3529295.0203.017.017.0105.0105.00.00.0falsetrue
+20193.0203.017.017.03.03.00.00.0falsetrue
+21High-Hightrue233.8203.09.09.027.827.80.00.0
+220.0999.9true368.1203.013.013.021.921.90.00.00.01CI-Eng-Sample.TANK1.LEVELItemHHL
+230.05710.3529295.0243.017.017.0105.0105.00.00.0falsetrue
+24193.0243.017.017.03.03.00.00.0falsetrue
+25Hightrue218.7243.09.09.012.712.70.00.0
+260.0999.9true368.1243.013.013.021.921.90.00.00.01CI-Eng-Sample.TANK1.LEVELItemHL
+270.05710.3529295.0283.017.017.0105.0105.00.00.0falsetrue
+28193.0283.017.017.03.03.00.00.0falsetrue
+29Lowtrue216.7283.09.09.010.710.70.00.0
+300.0999.9true368.1283.013.013.021.921.90.00.00.01CI-Eng-Sample.TANK1.LEVELItemLL
+310.05710.3529295.0323.017.017.0105.0105.00.00.0falsetrue
+32193.0323.017.017.03.03.00.00.0falsetrue
+33Low-Lowtrue229.9323.09.09.023.923.90.00.0
+340.0999.9true368.1323.013.013.021.921.90.00.00.01CI-Eng-Sample.TANK1.LEVELItemLLL
+35MAXIMUM SEENtrue229.5360.08.08.039.539.50.00.0
+360.0999.9true219.2386.016.016.029.229.20.00.00.01CI-Eng-Sample.TANK1.LEVEL.MAXItemValue
+37LAST UPDATEtrue221.7420.08.08.031.731.70.00.0
+38falsetrue0.01CI-Eng-Sample.TANK1.LEVELItemUpdTime
+391truetruetruefalseitemName[0]scaleMin[0]0.0scaleMax[0]100.0color[0]stroke[0]0.01CI-Eng-Sample.TANK1.LEVELItemName
+
+
+
+
+
diff --git a/examples/CI-Eng-Sample/displays/CIENG_Trends.xml b/examples/CI-Eng-Sample/displays/CIENG_Trends.xml
new file mode 100644
index 0000000..feff209
--- /dev/null
+++ b/examples/CI-Eng-Sample/displays/CIENG_Trends.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+Trends
+true
+1880
+760
+24
+
+true
+
+
+
+
+
+
+500
+true
+false
+2OverviewAlways showntrue10.0
+3RoughShown when viewing viewing a large areatrue25.0
+4StandardShown when using the default view settingtrue100.0
+5DetailShown only when viewing a small areatrue400.0
+6IntricaciesShown only when viewing a very small areatrue1000.0
+1Layer1
+18
+7940.0380.0380.0380.0940.0940.00.00.0falsetrue
+80.01450.0271700.0380.0368.8368.8690.0690.00.00.0truetrue
+9false-1true00falsefalse@NULLfalse001360715falsefalse@NULLfalsetruetruetruetruefalsetrue0.0truefalsefalsefalsefalsefalsefalsefalse5000truetruefalsetruefalse0050truefalseTank 1 - level and inflowtruetrue0true0@NULLtruetruetrue0truetruetrue@NULL@NULL10.0100.0falseTank 1 level (%)000falsefalsefalsefalsefalse@NULL@NULL@NULL@NULL@NULLfalse00@NULLtruetruefalse0truetruetrue@NULL@NULL10.0500.0falseTank 1 inflow (m3/h)000falsefalsefalsefalsefalse@NULL@NULL@NULL@NULL@NULLfalse05truetrue700.0380.0357.6357.6680.0680.00.00.0
+100.04260.08401635.0130.2119.0119.0235.0235.00.00.0truetrue
+11LEVELtrue1435.136.911.011.015.115.10.00.0
+120.0999.9true1783.236.915.015.026.826.80.00.00.01CI-Eng-Sample.TANK1.LEVELItemValue
+13%true1818.436.99.09.04.44.40.00.0
+141truetruetruefalseitemName[0]scaleMin[0]0.0scaleMax[0]100.0color[0]stroke[0]0.01CI-Eng-Sample.TANK1.LEVELItemName
+150.04260.08401635.0379.4119.0119.0235.0235.00.00.0truetrue
+16INFLOWtrue1441.0286.111.011.021.021.00.00.0
+170.09999.9true1777.8286.115.015.032.232.20.00.00.01CI-Eng-Sample.TANK1.INFLOWItemValue
+18m3/htrue1826.2286.19.09.012.212.20.00.0
+191truetruetruefalseitemName[0]scaleMin[0]0.0scaleMax[0]500.0color[0]stroke[0]0.01CI-Eng-Sample.TANK1.INFLOWItemName
+200.04260.08401635.0628.7119.0119.0235.0235.00.00.0truetrue
+21CPU LOADtrue1446.8535.411.011.026.826.80.00.0
+220.0999.9true1783.2535.415.015.026.826.80.00.00.01CI-Eng-Sample.SYSTEM.CPU_LOADItemValue
+23%true1818.4535.49.09.04.44.40.00.0
+241truefalsetruefalseitemName[0]scaleMin[0]0.0scaleMax[0]100.0color[0]stroke[0]0.01CI-Eng-Sample.SYSTEM.CPU_LOADItemName
+
+
diff --git a/examples/CI-Eng-Sample/displays/deploy_displays.cmd b/examples/CI-Eng-Sample/displays/deploy_displays.cmd
index f4d289a..55ab3ef 100644
--- a/examples/CI-Eng-Sample/displays/deploy_displays.cmd
+++ b/examples/CI-Eng-Sample/displays/deploy_displays.cmd
@@ -3,12 +3,11 @@ rem Deploy the CI-Eng-Sample displays into the operator interface (deployment DE
rem CI Server R1.03.00. Load the sample (load.cmd) first; no admin rights needed.
rem Copies the display XML, then creates the HTML (Mobile Operator) version with jwuiutl;
rem without -o the HTML goes to %TLS_WAP_PATH%\mobileoperator\operatorInterfaces\DEPLOY.
+rem The files are generated by generator\build.py (already in this folder; rerun only after changes).
cd /d "%~dp0"
set WAP=%TLS_WAP_PATH%
if not defined TLS_WAP_PATH set WAP=C:\Users\Public\Yokogawa\tls\wap
-copy /y CIENG_Tank.xml "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\"
-copy /y CIENG_Menu.xml "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\"
-copy /y CIENG_TrendLab.xml "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\"
-call jwuiutl.cmd -e HTML -i -f DEPLOY CIENG_Tank
-call jwuiutl.cmd -e HTML -i -f DEPLOY CIENG_Menu
-call jwuiutl.cmd -e HTML -i -f DEPLOY CIENG_TrendLab
+for %%d in (CIENG_Header CIENG_Overview CIENG_Control CIENG_Trends CIENG_Alarms CIENG_System CIENG_AlarmBanner CIENG_TankFaceplate) do (
+ copy /y %%d.xml "%WAP%\cfg\operatorInterfaces\DEPLOY\displays\" > nul
+ call jwuiutl.cmd -e HTML -i -f DEPLOY %%d
+)
diff --git a/examples/CI-Eng-Sample/displays/generator/.gitignore b/examples/CI-Eng-Sample/displays/generator/.gitignore
new file mode 100644
index 0000000..c18dd8d
--- /dev/null
+++ b/examples/CI-Eng-Sample/displays/generator/.gitignore
@@ -0,0 +1 @@
+__pycache__/
diff --git a/examples/CI-Eng-Sample/displays/generator/README.md b/examples/CI-Eng-Sample/displays/generator/README.md
new file mode 100644
index 0000000..5f6628b
--- /dev/null
+++ b/examples/CI-Eng-Sample/displays/generator/README.md
@@ -0,0 +1,44 @@
+# Display generator (CI-Eng-Sample operator HMI)
+
+A small Python tool that **writes the CI-Eng-Sample display files** (`..\CIENG_*.xml`) instead of
+drawing them in the Edit Module. The XML is the same format the Edit Module saves (display
+definition 1.3.0.0, *HTML display* on), so the files run in the Operator Interface (desktop) and in
+the HTML display (web), and they can still be opened and changed in the Edit Module afterwards
+(but a later generator run overwrites such changes).
+
+Built and tested with CI Server R1.03.00, Python 3.12 and Pillow, 2026-10-06.
+
+## Files
+
+| File | Purpose |
+|---|---|
+| `cixml.py` | Library: a `Display` class with one method per component (rectangle, text, number, number/text/date-time field, button, toggle, check box, slider, spinner, combo box, data bar, scales, arc / ring gauge, lamp, alarm overview, report, micro trend, trend), item connections, linear and threshold transformations, actions (open / close display, set item value, execute command) and the dark colour theme |
+| `build.py` | The eight sample displays: `CIENG_Header`, `CIENG_Overview`, `CIENG_Control`, `CIENG_Trends`, `CIENG_Alarms`, `CIENG_System`, `CIENG_AlarmBanner` (layout `CIENG_Operator`) and `CIENG_TankFaceplate` (layout `CIENG_Popup`) |
+
+## Use
+
+```
+python build.py (writes ..\CIENG_*.xml)
+python build.py (writes into another folder)
+```
+
+Then deploy with `..\deploy_displays.cmd`. Requirements: Python 3, Pillow (`pip install pillow`;
+used to measure text widths with the Windows fonts Segoe UI and Consolas). Without Pillow it falls
+back to an estimate and left/right-aligned texts land slightly off.
+
+## How it works (rules learned on R1.03.00)
+
+- Positions are boxes (left, top, width, height); the file stores the centre plus half sizes.
+- Texts and numbers use *keep original size*: the HTML export draws them at their font size centred
+ on the box (otherwise the text is stretched to the box). The box is therefore shrunk to the
+ measured text width for left / right alignment.
+- Rectangle rounding is stored as a fraction (0..1) of the half size (values above 1 draw an
+ ellipse in the web client).
+- The tab displays are designed 1880 x 680 and stretched to 1880 x 760 (`design_h`): panels, bars,
+ lists and trends grow, texts / controls / round shapes keep their size and only move.
+- Ring gauges are symmetric about the horizontal axis (gap on the right, value growing from 9
+ o'clock up and down) because the desktop draws arc angles mirrored compared with the web.
+- The live-data button runs `C:\Users\Public\CI-Eng-Sample\feed\cieng_feed_start.cmd` on the
+ server (`FEED_START` in `build.py`; installed by `..\..\feed\install_feed.ps1`).
+- Trend: `trend(..., web_spares=True)` pads a trend to 50 pens so it also draws on the web; the
+ sample trend uses `web_spares=False` (2 pens, clean desktop hairline, no line on the web).
diff --git a/examples/CI-Eng-Sample/displays/generator/build.py b/examples/CI-Eng-Sample/displays/generator/build.py
new file mode 100644
index 0000000..7109dc6
--- /dev/null
+++ b/examples/CI-Eng-Sample/displays/generator/build.py
@@ -0,0 +1,351 @@
+"""Build the CI-Eng-Sample demo displays (CI Server R1.03.00, HTML mode = desktop + web).
+
+ python build.py [