lpcmanager

LPCSVGHMI: add orientation selection (portrait+rotate180), add defaul landscape and portrait SVG with Smarteh branding
from svghmi.svghmi import SVGHMI, SVGHMILibrary, paths
import os
# set default values so that COG browser is managed by SVGHMI
SVGHMI.XSD = """<?xml version="1.0" encoding="utf-8" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="SVGHMI">
<xsd:complexType>
<xsd:attribute name="OnStart" type="xsd:string" use="optional" default="{LPCBrowserStart}"/>
<xsd:attribute name="OnStop" type="xsd:string" use="optional" default="{LPCBrowserStop}"/>
<xsd:attribute name="Portrait" type="xsd:boolean" use="optional" default="false"/>
<xsd:attribute name="Rotate180" type="xsd:boolean" use="optional" default="false"/>
<xsd:attribute name="EnableWatchdog" type="xsd:boolean" use="optional" default="true"/>
<xsd:attribute name="OnWatchdog" type="xsd:string" use="optional" default="{LPCBrowserRestart}"/>
<xsd:attribute name="WatchdogInitial" use="optional" default="30">
<xsd:simpleType>
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="2"/>
<xsd:maxInclusive value="600"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="WatchdogInterval" use="optional" default="5">
<xsd:simpleType>
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="2"/>
<xsd:maxInclusive value="60"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="Port" type="xsd:integer" use="optional" default="8008"/>
<xsd:attribute name="Interface" type="xsd:string" use="optional" default="localhost"/>
<xsd:attribute name="Path" type="xsd:string" use="optional" default="{name}"/>
<xsd:attribute name="MaxConnections" use="optional" default="4">
<xsd:simpleType>
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="1"/>
<xsd:maxInclusive value="16"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:complexType>
</xsd:element>
</xsd:schema>
"""
old_get_SVGHMI_options = SVGHMI.get_SVGHMI_options
def get_SVGHMI_options(self):
svghmi_options = old_get_SVGHMI_options(self)
portrait = self.GetParamsAttributes("SVGHMI.Portrait")["value"]
rotate180 = self.GetParamsAttributes("SVGHMI.Rotate180")["value"]
angle = {(False,False): "0",
(False,True): "90",
(True,False): "180",
(True,True): "-90"}[(rotate180,portrait)]
browser_commandline = 'QT_QPA_EGLFS_ROTATION=' + angle + \
' qt_webenginewidgets_minimal' + \
' --js-flags="--max_old_space_size=16 --gc_interval=100 --optimize_for_size"' + \
' --single-process' + \
' --no-sandbox "' + svghmi_options["url"] + '"'
svghmi_options.update(
{"LPCBrowserStart": "sh -c '"+browser_commandline+"'",
"LPCBrowserStop": "killall qt_webenginewidgets_minimal",
"LPCBrowserRestart": "sh -c 'killall qt_webenginewidgets_minimal; sleep 1; "+browser_commandline+" '"})
return svghmi_options
SVGHMI.get_SVGHMI_options = get_SVGHMI_options
def getDefaultSVG(self):
ScriptDirectory = paths.AbsDir(__file__)
portrait = self.GetParamsAttributes("SVGHMI.Portrait")["value"]
return os.path.join(ScriptDirectory, "portrait.svg" if portrait else "landscape.svg")
SVGHMI.getDefaultSVG = getDefaultSVG