2. Overview
The IFW Widget Library is organized into the following components:
2.1. Components
- Communication Facades (
ifw.wdglib.comm) Facades for the standard ELT MAL interfaces, managed through a singleton
ConnectionManager:StdCmdsFacade– Standard commands (Init, Reset, Enable, Disable, etc.)DcsCmdsFacade– DCS-specific commands (Start, Abort, Execute, Setup, etc.)RecCmdsFacade– Recording commands (RecStart, RecStop, RecPause, etc.)FcfCmdsFacade– FCF device control (shutters, lamps, motors, I/O, etc.)SysSupCmdsFacade– System supervisor commands (SubInit, SubEnable, SetObMode, etc.)ConnectionManager– Singleton that caches and manages facade instances by URI
- CCF Widgets (
ifw.wdglib.widgets.ccf) Widgets for the ELT ICS Camera Control Framework: state machine, acquisition, setup, recording, and data pipeline management.
- SysSup Widgets (
ifw.wdglib.widgets.syssup) Widgets for subsystem-level state control, including the CCF and NGC (New General Detector Controller) instrument control widgets.
- Utility Widgets (
ifw.wdglib.widgets.utils) Generic-purpose widgets such as disk space monitoring, collapsible sections, and ROI window configuration.
- Utilities (
ifw.wdglib.utils) Helper functions for OLDB queries, error dialogs, and Taurus event mapping.
- Styles (
ifw/wdglib/styles) Pre-built QSS (Qt Style Sheet) themes with ESO-specific dynamic styling rules for operational status indicators and Taurus device labels.
2.2. Widget Architecture
All widgets in the library inherit from BaseMalWidget, which centralizes MAL
connection management, facade registration, and Taurus styling. See the
BaseMalWidget chapter for details.
They override
_setup_facades()to register the MAL facades they needThey use a frozen
@dataclassto build OLDB paths fromdcs_db_prefixThey call
_update_db_models()to bind Taurus labels to OLDB data pointsThey call
_init_gui()to wire up Qt signals for UI interactionsremove_bgrole()is called automatically at the end of__init__, allowing QSS themes to control widget appearance uniformlyThey rely on the CUT library for
MalAdapter(facades base class),elt.cut.task.Task(asynchronous command execution), and CiiWidgets/CutWidgets (Qt widget components)
A typical widget constructor accepts parent, base_uri, and dcs_db_prefix
as its first three parameters. Some widgets require additional parameters for
camera, pipeline, or publisher identification.
2.3. Typical Workflow
A typical workflow for creating a panel is:
Obtain communication facades via the
ConnectionManagerInstantiate widgets, passing the MAL
base_uriand OLDBdcs_db_prefixAdd widgets to your UI layout
Apply a QSS theme for consistent styling
For a concrete example of a complete application built with this library, see the ccfGui project source code. See the ccfGui Design Decisions chapter for details on how all components are wired together.