LCOV - code coverage report
Current view: top level - src/pairinteraction_gui/qobjects - named_stacked_widget.py (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 29 0.0 %
Date: 2025-04-29 15:59:54 Functions: 0 14 0.0 %

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

Generated by: LCOV version 1.16