Source code for malcolm.modules.system.parts.iociconpart

import os

from malcolm.core import PartRegistrar, StringMeta
from malcolm.modules import builtin, ca

from .dirparsepart import AIoc


[docs]class IocIconPart(builtin.parts.IconPart): def __init__(self, ioc: AIoc, initial_svg: builtin.parts.ASvg) -> None: self.initial_svg = initial_svg super().__init__(initial_svg) meta = StringMeta("Host Architecture") self.host_arch = ca.util.CAAttribute( meta, ca.util.catools.DBR_STRING, "", ioc + ":KERNEL_VERS", throw=False, callback=self.update_icon, ) def setup(self, registrar: PartRegistrar) -> None: super().setup(registrar) self.host_arch.setup(registrar, "hostOs", self.register_hooked) def update_icon(self, arch): svg = self.initial_svg if arch.ok: if arch.upper().startswith("WINDOWS"): svg = os.path.split(__file__)[0] + "/../icons/win_epics.svg" elif arch.upper().startswith("LINUX"): # Linux (typically RHEL) svg = os.path.split(__file__)[0] + "/../icons/linux_epics.svg" elif arch.upper().startswith("WIND"): # WIND River VXWorks svg = os.path.split(__file__)[0] + "/../icons/vx_epics.svg" else: svg = os.path.split(__file__)[0] + "/../icons/epics-logo.svg" with open(svg) as f: svg_text = f.read() self.attr.set_value(svg_text)