0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-14 03:31:50 +02:00

WIP Name passing removed from Dock and BECWidget base classes

This commit is contained in:
2025-04-08 10:03:57 +02:00
parent b3beb1375e
commit a77367f2bd
6 changed files with 35 additions and 21 deletions

View File

@ -52,7 +52,7 @@ class RPCWidgetHandler:
"""
widget_class = self.widget_classes.get(widget_type) # type: ignore
if widget_class:
return widget_class(name=name, **kwargs)
return widget_class(**kwargs)
raise ValueError(f"Unknown widget type: {widget_type}")

View File

@ -83,7 +83,7 @@ class BECConnector:
client=None,
config: ConnectionConfig | None = None,
gui_id: str | None = None,
name: str | None = None,
# name: str | None = None,
parent_dock: BECDock | None = None,
parent_id: str | None = None,
**kwargs,
@ -94,7 +94,7 @@ class BECConnector:
# BEC related connections
self.bec_dispatcher = BECDispatcher(client=client)
self.client = self.bec_dispatcher.client if client is None else client
self._parent_dock = parent_dock
self._parent_dock = parent_dock # TODO also remove at some point
if not self.client in BECConnector.EXIT_HANDLERS:
# register function to clean connections at exit;
@ -127,22 +127,23 @@ class BECConnector:
self.gui_id: str = gui_id # Keep namespace in sync
else:
self.gui_id: str = self.config.gui_id # type: ignore
if name is None:
name = self.__class__.__name__
else:
if not WidgetContainerUtils.has_name_valid_chars(name):
raise ValueError(f"Name {name} contains invalid characters.")
# if name is None:
# name = self.__class__.__name__
# else:
# if not WidgetContainerUtils.has_name_valid_chars(name):
# raise ValueError(f"Name {name} contains invalid characters.")
# TODO Hierarchy can be refreshed upon creation -> also registry should be notified if objectName changes
if isinstance(self, QObject):
# 1) If no objectName is set, set the initial name
if not self.objectName():
self.setObjectName(name if name else self.__class__.__name__)
self.setObjectName(self.__class__.__name__)
self._name = self.objectName()
# 2) Enforce unique objectName among siblings with the same BECConnector parent
self.setParent(parent)
self._enforce_unique_sibling_name()
else:
self._name = name if name else self.__class__.__name__
# else:
# self._name = name if name else self.__class__.__name__
self.rpc_register = RPCRegister()
self.rpc_register.add_rpc(self)
@ -165,7 +166,7 @@ class BECConnector:
if parent_bec:
# We have a parent => only compare with siblings under that parent
siblings = parent_bec.findChildren(BECConnector, options=Qt.FindDirectChildrenOnly)
siblings = parent_bec.findChildren(BECConnector)
else:
# No parent => treat all top-level BECConnectors as siblings
# 1) Gather all BECConnectors from QApplication

View File

@ -33,8 +33,7 @@ class BECWidget(BECConnector):
config: ConnectionConfig = None,
gui_id: str | None = None,
theme_update: bool = False,
name: str | None = None,
parent_dock: BECDock | None = None,
parent_dock: BECDock | None = None, # TODO should not be there
parent_id: str | None = None,
**kwargs,
):
@ -60,7 +59,6 @@ class BECWidget(BECConnector):
client=client,
config=config,
gui_id=gui_id,
name=name,
parent_dock=parent_dock,
parent_id=parent_id,
**kwargs,

View File

@ -31,7 +31,7 @@ if PYSIDE6:
f"Custom widget {class_name} does not have a parent_id argument. "
)
widget = self.custom_widgets[class_name](self.baseinstance)
widget.setObjectName(name)
# widget.setObjectName(name) #TODO careful...
return widget
return super().createWidget(class_name, self.baseinstance, name)

View File

@ -150,7 +150,13 @@ class BECDock(BECWidget, Dock):
self.config = config
label = CustomDockLabel(text=name, closable=closable)
super().__init__(
parent=parent, client=client, gui_id=gui_id, config=config, label=label, **kwargs
parent=parent_dock_area,
name=name,
client=client,
gui_id=gui_id,
config=config,
label=label,
**kwargs,
)
# Dock.__init__(self, name=name, **kwargs)
@ -324,7 +330,11 @@ class BECDock(BECWidget, Dock):
widget = cast(
BECWidget,
widget_handler.create_widget(
widget_type=widget, name=name, parent_dock=self, parent_id=self.gui_id
widget_type=widget,
name=name,
parent_dock=self,
parent_id=self.gui_id,
parent=self,
),
)
else:

View File

@ -21,6 +21,7 @@ from bec_widgets.utils.toolbar import (
ModularToolBar,
SeparatorAction,
)
from bec_widgets.utils.widget_io import WidgetHierarchy
from bec_widgets.widgets.containers.dock.dock import BECDock, DockConfig
from bec_widgets.widgets.control.device_control.positioner_box import PositionerBox
from bec_widgets.widgets.control.scan_control.scan_control import ScanControl
@ -363,7 +364,9 @@ class BECDockArea(BECWidget, QWidget):
else: # Name is not provided
name = WidgetContainerUtils.generate_unique_name(name="dock", list_of_names=dock_names)
dock = BECDock(name=name, parent_dock_area=self, parent_id=self.gui_id, closable=closable)
dock = BECDock(
parent=self, name=name, parent_dock_area=self, parent_id=self.gui_id, closable=closable
)
dock.config.position = position
self.config.docks[dock.name()] = dock.config
# The dock.name is equal to the name passed to BECDock
@ -498,11 +501,13 @@ if __name__ == "__main__": # pragma: no cover
app = QApplication([])
set_theme("auto")
dock_area = BECDockArea()
dock_1 = dock_area.new(name="dock_0", widget="Waveform")
dock_1 = dock_area.new(name="dock_0", widget="DarkModeButton")
dock_1.new(widget="DarkModeButton")
# dock_1 = dock_area.new(name="dock_0", widget="Waveform")
dock_area.new(widget="Waveform")
dock_area.new(widget="DarkModeButton")
dock_area.show()
dock_area.setGeometry(100, 100, 800, 600)
app.topLevelWidgets()
WidgetHierarchy.print_becconnector_hierarchy_from_app()
app.exec_()
sys.exit(app.exec_())