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 widget_class = self.widget_classes.get(widget_type) # type: ignore
if widget_class: if widget_class:
return widget_class(name=name, **kwargs) return widget_class(**kwargs)
raise ValueError(f"Unknown widget type: {widget_type}") raise ValueError(f"Unknown widget type: {widget_type}")

View File

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

View File

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

View File

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

View File

@ -150,7 +150,13 @@ class BECDock(BECWidget, Dock):
self.config = config self.config = config
label = CustomDockLabel(text=name, closable=closable) label = CustomDockLabel(text=name, closable=closable)
super().__init__( 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) # Dock.__init__(self, name=name, **kwargs)
@ -324,7 +330,11 @@ class BECDock(BECWidget, Dock):
widget = cast( widget = cast(
BECWidget, BECWidget,
widget_handler.create_widget( 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: else:

View File

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