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 need

  • They use a frozen @dataclass to build OLDB paths from dcs_db_prefix

  • They call _update_db_models() to bind Taurus labels to OLDB data points

  • They call _init_gui() to wire up Qt signals for UI interactions

  • remove_bgrole() is called automatically at the end of __init__, allowing QSS themes to control widget appearance uniformly

  • They 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:

  1. Obtain communication facades via the ConnectionManager

  2. Instantiate widgets, passing the MAL base_uri and OLDB dcs_db_prefix

  3. Add widgets to your UI layout

  4. 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.