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:
@ -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}")
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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_())
|
||||
|
Reference in New Issue
Block a user