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