From a9039c5ee66ad39ccb8919e277decc729094303c Mon Sep 17 00:00:00 2001 From: wyzula-jan Date: Wed, 19 Nov 2025 15:46:55 +0100 Subject: [PATCH] fix(qt_ads): pythons stubs match structure of PySide6QtAds --- bec_widgets/__init__.py | 3 +- .../device_manager_view.py | 11 ++-- .../advanced_dock_area/advanced_dock_area.py | 4 +- .../advanced_dock_area/basic_dock_area.py | 43 +++++++------- .../advanced_dock_area/profile_utils.py | 3 +- .../containers/{ads => qt_ads}/__init__.py | 0 .../containers/{ads => qt_ads}/__init__.pyi | 56 +----------------- .../widgets/containers/qt_ads/ads/__init__.py | 0 .../containers/qt_ads/ads/__init__.pyi | 58 +++++++++++++++++++ .../widgets/editors/monaco/monaco_dock.py | 2 +- 10 files changed, 93 insertions(+), 87 deletions(-) rename bec_widgets/widgets/containers/{ads => qt_ads}/__init__.py (100%) rename bec_widgets/widgets/containers/{ads => qt_ads}/__init__.pyi (97%) create mode 100644 bec_widgets/widgets/containers/qt_ads/ads/__init__.py create mode 100644 bec_widgets/widgets/containers/qt_ads/ads/__init__.pyi diff --git a/bec_widgets/__init__.py b/bec_widgets/__init__.py index 3d7d19fb..f88f7db6 100644 --- a/bec_widgets/__init__.py +++ b/bec_widgets/__init__.py @@ -1,8 +1,7 @@ import os import sys -import PySide6QtAds as QtAds - +import bec_widgets.widgets.containers.qt_ads as QtAds from bec_widgets.utils.bec_widget import BECWidget from bec_widgets.utils.error_popups import SafeProperty, SafeSlot diff --git a/bec_widgets/applications/views/device_manager_view/device_manager_view.py b/bec_widgets/applications/views/device_manager_view/device_manager_view.py index 9acdb5a3..3029adae 100644 --- a/bec_widgets/applications/views/device_manager_view/device_manager_view.py +++ b/bec_widgets/applications/views/device_manager_view/device_manager_view.py @@ -4,7 +4,6 @@ import os from functools import partial from typing import List, Literal -import PySide6QtAds as QtAds import yaml from bec_lib import config_helper from bec_lib.bec_yaml_loader import yaml_load @@ -12,7 +11,6 @@ from bec_lib.file_utils import DeviceConfigWriter from bec_lib.logger import bec_logger from bec_lib.plugin_helper import plugin_package_name, plugin_repo_path from bec_qthemes import apply_theme -from PySide6QtAds import CDockManager, CDockWidget from qtpy.QtCore import Qt, QThreadPool, QTimer from qtpy.QtWidgets import ( QDialog, @@ -28,6 +26,7 @@ from qtpy.QtWidgets import ( QWidget, ) +import bec_widgets.widgets.containers.qt_ads as QtAds from bec_widgets import BECWidget from bec_widgets.utils.error_popups import SafeSlot from bec_widgets.utils.help_inspector.help_inspector import HelpInspector @@ -158,7 +157,7 @@ class DeviceManagerView(BECWidget, QWidget): self._root_layout = QVBoxLayout(self) self._root_layout.setContentsMargins(0, 0, 0, 0) self._root_layout.setSpacing(0) - self.dock_manager = CDockManager(self) + self.dock_manager = QtAds.CDockManager(self) self.dock_manager.setStyleSheet("") self._root_layout.addWidget(self.dock_manager) @@ -237,9 +236,9 @@ class DeviceManagerView(BECWidget, QWidget): self.dock_manager.addDockWidgetTabToArea(self.error_logs_dock, area) for dock in self.dock_manager.dockWidgets(): - dock.setFeature(CDockWidget.DockWidgetClosable, False) - dock.setFeature(CDockWidget.DockWidgetFloatable, False) - dock.setFeature(CDockWidget.DockWidgetMovable, False) + dock.setFeature(QtAds.CDockWidget.DockWidgetClosable, False) + dock.setFeature(QtAds.CDockWidget.DockWidgetFloatable, False) + dock.setFeature(QtAds.CDockWidget.DockWidgetMovable, False) # Apply stretch after the layout is done self.set_default_view([2, 8, 2], [7, 3]) diff --git a/bec_widgets/widgets/containers/advanced_dock_area/advanced_dock_area.py b/bec_widgets/widgets/containers/advanced_dock_area/advanced_dock_area.py index a7a062ba..b02f5c1d 100644 --- a/bec_widgets/widgets/containers/advanced_dock_area/advanced_dock_area.py +++ b/bec_widgets/widgets/containers/advanced_dock_area/advanced_dock_area.py @@ -3,9 +3,7 @@ from __future__ import annotations import os from typing import Callable, Literal, Mapping, Sequence -import PySide6QtAds as QtAds from bec_lib import bec_logger -from PySide6QtAds import CDockWidget from qtpy.QtCore import QTimer, Signal from qtpy.QtGui import QPixmap from qtpy.QtWidgets import ( @@ -18,6 +16,7 @@ from qtpy.QtWidgets import ( QWidget, ) +import bec_widgets.widgets.containers.qt_ads as QtAds from bec_widgets import BECWidget, SafeProperty, SafeSlot from bec_widgets.cli.rpc.rpc_widget_handler import widget_handler from bec_widgets.utils import BECDispatcher @@ -66,6 +65,7 @@ from bec_widgets.widgets.containers.advanced_dock_area.toolbar_components.worksp workspace_bundle, ) from bec_widgets.widgets.containers.main_window.main_window import BECMainWindowNoRPC +from bec_widgets.widgets.containers.qt_ads import CDockWidget from bec_widgets.widgets.control.device_control.positioner_box import PositionerBox, PositionerBox2D from bec_widgets.widgets.control.scan_control import ScanControl from bec_widgets.widgets.editors.web_console.web_console import WebConsole diff --git a/bec_widgets/widgets/containers/advanced_dock_area/basic_dock_area.py b/bec_widgets/widgets/containers/advanced_dock_area/basic_dock_area.py index 09898569..7334bd85 100644 --- a/bec_widgets/widgets/containers/advanced_dock_area/basic_dock_area.py +++ b/bec_widgets/widgets/containers/advanced_dock_area/basic_dock_area.py @@ -5,18 +5,17 @@ from dataclasses import dataclass from typing import Any, Callable, Literal, Mapping, Sequence, cast from bec_qthemes import material_icon -from PySide6QtAds import ads from qtpy.QtCore import QByteArray, QSettings, Qt, QTimer from qtpy.QtGui import QIcon from qtpy.QtWidgets import QDialog, QVBoxLayout, QWidget from shiboken6 import isValid -import bec_widgets.widgets.containers.ads as QtAds +import bec_widgets.widgets.containers.qt_ads as QtAds from bec_widgets import BECWidget, SafeSlot from bec_widgets.cli.rpc.rpc_widget_handler import widget_handler from bec_widgets.utils.property_editor import PropertyEditor from bec_widgets.utils.toolbars.actions import MaterialIconAction -from bec_widgets.widgets.containers.ads import ( +from bec_widgets.widgets.containers.qt_ads import ( CDockAreaWidget, CDockManager, CDockSplitter, @@ -70,7 +69,7 @@ class DockAreaWidget(BECWidget, QWidget): tab_with: CDockWidget | None = None relative_to: CDockWidget | None = None title_visible: bool | None = None - title_buttons: Mapping[ads.TitleBarButton, bool] | None = None + title_buttons: Mapping[QtAds.ads.TitleBarButton, bool] | None = None show_settings_action: bool | None = False dock_preferences: Mapping[str, Any] | None = None promote_central: bool = False @@ -979,38 +978,38 @@ class DockAreaWidget(BECWidget, QWidget): self._apply_splitter_tree(splitter, (), horizontal, vertical, overrides) @staticmethod - def _title_bar_button_enum(name: str) -> ads.TitleBarButton | None: + def _title_bar_button_enum(name: str) -> QtAds.ads.TitleBarButton | None: """Translate a user-friendly button name into an ADS TitleBarButton enum.""" normalized = (name or "").lower().replace("-", "_").replace(" ", "_") - mapping: dict[str, ads.TitleBarButton] = { - "menu": ads.TitleBarButton.TitleBarButtonTabsMenu, - "tabs_menu": ads.TitleBarButton.TitleBarButtonTabsMenu, - "tabs": ads.TitleBarButton.TitleBarButtonTabsMenu, - "undock": ads.TitleBarButton.TitleBarButtonUndock, - "float": ads.TitleBarButton.TitleBarButtonUndock, - "detach": ads.TitleBarButton.TitleBarButtonUndock, - "close": ads.TitleBarButton.TitleBarButtonClose, - "auto_hide": ads.TitleBarButton.TitleBarButtonAutoHide, - "autohide": ads.TitleBarButton.TitleBarButtonAutoHide, - "minimize": ads.TitleBarButton.TitleBarButtonMinimize, + mapping: dict[str, QtAds.ads.TitleBarButton] = { + "menu": QtAds.ads.TitleBarButton.TitleBarButtonTabsMenu, + "tabs_menu": QtAds.ads.TitleBarButton.TitleBarButtonTabsMenu, + "tabs": QtAds.ads.TitleBarButton.TitleBarButtonTabsMenu, + "undock": QtAds.ads.TitleBarButton.TitleBarButtonUndock, + "float": QtAds.ads.TitleBarButton.TitleBarButtonUndock, + "detach": QtAds.ads.TitleBarButton.TitleBarButtonUndock, + "close": QtAds.ads.TitleBarButton.TitleBarButtonClose, + "auto_hide": QtAds.ads.TitleBarButton.TitleBarButtonAutoHide, + "autohide": QtAds.ads.TitleBarButton.TitleBarButtonAutoHide, + "minimize": QtAds.ads.TitleBarButton.TitleBarButtonMinimize, } return mapping.get(normalized) def _normalize_title_buttons( self, spec: ( - Mapping[str | ads.TitleBarButton, bool] - | Sequence[str | ads.TitleBarButton] + Mapping[str | QtAds.ads.TitleBarButton, bool] + | Sequence[str | QtAds.ads.TitleBarButton] | str - | ads.TitleBarButton + | QtAds.ads.TitleBarButton | None ), - ) -> dict[ads.TitleBarButton, bool]: + ) -> dict[QtAds.ads.TitleBarButton, bool]: """Normalize button visibility specifications into an enum mapping.""" if spec is None: return {} - result: dict[ads.TitleBarButton, bool] = {} + result: dict[QtAds.ads.TitleBarButton, bool] = {} if isinstance(spec, Mapping): iterator = spec.items() else: @@ -1019,7 +1018,7 @@ class DockAreaWidget(BECWidget, QWidget): iterator = ((name, False) for name in spec) for name, visible in iterator: - if isinstance(name, ads.TitleBarButton): + if isinstance(name, QtAds.ads.TitleBarButton): enum = name else: enum = self._title_bar_button_enum(str(name)) diff --git a/bec_widgets/widgets/containers/advanced_dock_area/profile_utils.py b/bec_widgets/widgets/containers/advanced_dock_area/profile_utils.py index 59c4847b..9e239b03 100644 --- a/bec_widgets/widgets/containers/advanced_dock_area/profile_utils.py +++ b/bec_widgets/widgets/containers/advanced_dock_area/profile_utils.py @@ -20,10 +20,11 @@ from bec_lib import bec_logger from bec_lib.client import BECClient from bec_lib.plugin_helper import plugin_package_name, plugin_repo_path from pydantic import BaseModel, Field -from PySide6QtAds import CDockWidget from qtpy.QtCore import QByteArray, QDateTime, QSettings, Qt from qtpy.QtGui import QPixmap +from bec_widgets.widgets.containers.qt_ads import CDockWidget + logger = bec_logger.logger MODULE_PATH = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) diff --git a/bec_widgets/widgets/containers/ads/__init__.py b/bec_widgets/widgets/containers/qt_ads/__init__.py similarity index 100% rename from bec_widgets/widgets/containers/ads/__init__.py rename to bec_widgets/widgets/containers/qt_ads/__init__.py diff --git a/bec_widgets/widgets/containers/ads/__init__.pyi b/bec_widgets/widgets/containers/qt_ads/__init__.pyi similarity index 97% rename from bec_widgets/widgets/containers/ads/__init__.pyi rename to bec_widgets/widgets/containers/qt_ads/__init__.pyi index 7bb78f08..dfc1232f 100644 --- a/bec_widgets/widgets/containers/ads/__init__.pyi +++ b/bec_widgets/widgets/containers/qt_ads/__init__.pyi @@ -7,61 +7,11 @@ import typing from qtpy import QtCore, QtGui, QtWidgets from qtpy.QtCore import Signal +from bec_widgets.widgets.containers.qt_ads import ads +from bec_widgets.widgets.containers.qt_ads.ads import * + # pylint: disable=unused-argument,invalid-name, missing-function-docstring, super-init-not-called -class SideBarLocation(enum.Enum): - SideBarTop = ... - SideBarLeft = ... - SideBarRight = ... - SideBarBottom = ... - SideBarNone = ... - -class eBitwiseOperator(enum.Enum): - BitwiseAnd = ... - BitwiseOr = ... - -class eIcon(enum.Enum): - TabCloseIcon = ... - AutoHideIcon = ... - DockAreaMenuIcon = ... - DockAreaUndockIcon = ... - DockAreaCloseIcon = ... - DockAreaMinimizeIcon = ... - IconCount = ... - -class eDragState(enum.Enum): - DraggingInactive = ... - DraggingMousePressed = ... - DraggingTab = ... - DraggingFloatingWidget = ... - -class TitleBarButton(enum.Enum): - TitleBarButtonTabsMenu = ... - TitleBarButtonUndock = ... - TitleBarButtonClose = ... - TitleBarButtonAutoHide = ... - TitleBarButtonMinimize = ... - -class eTabIndex(enum.Enum): - TabDefaultInsertIndex = ... - TabInvalidIndex = ... - -class DockWidgetArea(enum.Enum): - NoDockWidgetArea = ... - LeftDockWidgetArea = ... - RightDockWidgetArea = ... - TopDockWidgetArea = ... - BottomDockWidgetArea = ... - CenterDockWidgetArea = ... - LeftAutoHideArea = ... - RightAutoHideArea = ... - TopAutoHideArea = ... - BottomAutoHideArea = ... - InvalidDockWidgetArea = ... - OuterDockAreas = ... - AutoHideDockAreas = ... - AllDockAreas = ... - class CAutoHideDockContainer(QtWidgets.QFrame): def __init__( self, diff --git a/bec_widgets/widgets/containers/qt_ads/ads/__init__.py b/bec_widgets/widgets/containers/qt_ads/ads/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/bec_widgets/widgets/containers/qt_ads/ads/__init__.pyi b/bec_widgets/widgets/containers/qt_ads/ads/__init__.pyi new file mode 100644 index 00000000..30b3a90a --- /dev/null +++ b/bec_widgets/widgets/containers/qt_ads/ads/__init__.pyi @@ -0,0 +1,58 @@ +from __future__ import annotations + +import enum + +# pylint: disable=unused-argument,invalid-name, missing-function-docstring, super-init-not-called + +class SideBarLocation(enum.Enum): + SideBarTop = ... + SideBarLeft = ... + SideBarRight = ... + SideBarBottom = ... + SideBarNone = ... + +class eBitwiseOperator(enum.Enum): + BitwiseAnd = ... + BitwiseOr = ... + +class eIcon(enum.Enum): + TabCloseIcon = ... + AutoHideIcon = ... + DockAreaMenuIcon = ... + DockAreaUndockIcon = ... + DockAreaCloseIcon = ... + DockAreaMinimizeIcon = ... + IconCount = ... + +class eDragState(enum.Enum): + DraggingInactive = ... + DraggingMousePressed = ... + DraggingTab = ... + DraggingFloatingWidget = ... + +class TitleBarButton(enum.Enum): + TitleBarButtonTabsMenu = ... + TitleBarButtonUndock = ... + TitleBarButtonClose = ... + TitleBarButtonAutoHide = ... + TitleBarButtonMinimize = ... + +class eTabIndex(enum.Enum): + TabDefaultInsertIndex = ... + TabInvalidIndex = ... + +class DockWidgetArea(enum.Enum): + NoDockWidgetArea = ... + LeftDockWidgetArea = ... + RightDockWidgetArea = ... + TopDockWidgetArea = ... + BottomDockWidgetArea = ... + CenterDockWidgetArea = ... + LeftAutoHideArea = ... + RightAutoHideArea = ... + TopAutoHideArea = ... + BottomAutoHideArea = ... + InvalidDockWidgetArea = ... + OuterDockAreas = ... + AutoHideDockAreas = ... + AllDockAreas = ... diff --git a/bec_widgets/widgets/editors/monaco/monaco_dock.py b/bec_widgets/widgets/editors/monaco/monaco_dock.py index 8b8cd191..3186d82c 100644 --- a/bec_widgets/widgets/editors/monaco/monaco_dock.py +++ b/bec_widgets/widgets/editors/monaco/monaco_dock.py @@ -9,8 +9,8 @@ from bec_lib.macro_update_handler import has_executable_code from qtpy.QtCore import QEvent, QTimer, Signal from qtpy.QtWidgets import QFileDialog, QMessageBox, QToolButton, QWidget -from bec_widgets.widgets.containers.ads import CDockAreaWidget, CDockWidget from bec_widgets.widgets.containers.advanced_dock_area.basic_dock_area import DockAreaWidget +from bec_widgets.widgets.containers.qt_ads import CDockAreaWidget, CDockWidget from bec_widgets.widgets.editors.monaco.monaco_widget import MonacoWidget logger = bec_logger.logger