LCOV - code coverage report
Current view: top level - src/pairinteraction_gui/qobjects - named_stacked_widget.py (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 29 29
Test Date: 2026-11-02 09:44:19 Functions: 100.0 % 7 7

            Line data    Source code
       1              : # SPDX-FileCopyrightText: 2025 PairInteraction Developers
       2              : # SPDX-License-Identifier: LGPL-3.0-or-later
       3            1 : from __future__ import annotations
       4              : 
       5            1 : import logging
       6            1 : from typing import TYPE_CHECKING, Generic, TypeVar
       7              : 
       8            1 : from PySide6.QtWidgets import QStackedWidget, QWidget
       9              : 
      10              : if TYPE_CHECKING:
      11              :     from collections.abc import ItemsView
      12              : 
      13            1 : logger = logging.getLogger(__name__)
      14              : 
      15              : 
      16            1 : WidgetType = TypeVar("WidgetType", bound=QWidget)
      17              : 
      18              : 
      19            1 : class NamedStackedWidget(QStackedWidget, Generic[WidgetType]):
      20            1 :     def __init__(self, parent: QWidget | None = None) -> None:
      21            1 :         super().__init__(parent)
      22            1 :         self._widgets: dict[str, WidgetType] = {}
      23              : 
      24            1 :     def addNamedWidget(self, widget: WidgetType, name: str) -> None:
      25            1 :         widget.setObjectName(name)
      26            1 :         self.addWidget(widget)
      27            1 :         self._widgets[name] = widget
      28              : 
      29            1 :     def setCurrentNamedWidget(self, name: str) -> None:
      30            1 :         widget = self.getNamedWidget(name)
      31            1 :         current_widget = self.currentWidget()
      32            1 :         if widget == current_widget:
      33            1 :             return
      34            1 :         self.setCurrentWidget(widget)
      35            1 :         logger.debug("Switched NamedStackedWidget to %s", name)
      36              : 
      37            1 :     def getNamedWidget(self, name: str) -> WidgetType:
      38            1 :         return self._widgets[name]
      39              : 
      40            1 :     def items(self) -> ItemsView[str, WidgetType]:
      41            1 :         return self._widgets.items()
      42              : 
      43            1 :     def currentWidget(self) -> WidgetType:
      44            1 :         return super().currentWidget()  # type: ignore [return-value] # explicitly override type hints
      45              : 
      46            1 :     def addWidget(self, widget: WidgetType) -> int:  # type: ignore [override] # explicitly override type hints
      47            1 :         return super().addWidget(widget)
        

Generated by: LCOV version 2.0-1