diff --git a/bec_widgets/cli/rpc/rpc_widget_handler.py b/bec_widgets/cli/rpc/rpc_widget_handler.py index ace92ed5..735a33e0 100644 --- a/bec_widgets/cli/rpc/rpc_widget_handler.py +++ b/bec_widgets/cli/rpc/rpc_widget_handler.py @@ -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}") diff --git a/bec_widgets/utils/bec_connector.py b/bec_widgets/utils/bec_connector.py index f989683e..71022ff1 100644 --- a/bec_widgets/utils/bec_connector.py +++ b/bec_widgets/utils/bec_connector.py @@ -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 diff --git a/bec_widgets/utils/bec_widget.py b/bec_widgets/utils/bec_widget.py index fb1a83f0..d655eae4 100644 --- a/bec_widgets/utils/bec_widget.py +++ b/bec_widgets/utils/bec_widget.py @@ -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, diff --git a/bec_widgets/utils/ui_loader.py b/bec_widgets/utils/ui_loader.py index 83299cfc..60fb02cf 100644 --- a/bec_widgets/utils/ui_loader.py +++ b/bec_widgets/utils/ui_loader.py @@ -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) diff --git a/bec_widgets/widgets/containers/dock/dock.py b/bec_widgets/widgets/containers/dock/dock.py index a4c501f5..2b9fbff7 100644 --- a/bec_widgets/widgets/containers/dock/dock.py +++ b/bec_widgets/widgets/containers/dock/dock.py @@ -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: diff --git a/bec_widgets/widgets/containers/dock/dock_area.py b/bec_widgets/widgets/containers/dock/dock_area.py index 92b5a172..b46eb3ee 100644 --- a/bec_widgets/widgets/containers/dock/dock_area.py +++ b/bec_widgets/widgets/containers/dock/dock_area.py @@ -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_())