1from UM.Scene.SceneNodeDecorator import SceneNodeDecorator
2from cura.Scene.CuraSceneNode import CuraSceneNode
3
4
5class BuildPlateDecorator(SceneNodeDecorator):
6    """Make a SceneNode build plate aware CuraSceneNode objects all have this decorator."""
7
8    def __init__(self, build_plate_number: int = -1) -> None:
9        super().__init__()
10        self._build_plate_number = build_plate_number
11        self.setBuildPlateNumber(build_plate_number)
12
13    def setBuildPlateNumber(self, nr: int) -> None:
14        # Make sure that groups are set correctly
15        # setBuildPlateForSelection in CuraActions makes sure that no single childs are set.
16        self._build_plate_number = nr
17        if isinstance(self._node, CuraSceneNode):
18            self._node.transformChanged()  # trigger refresh node without introducing a new signal
19        if self._node:
20            for child in self._node.getChildren():
21                child.callDecoration("setBuildPlateNumber", nr)
22
23    def getBuildPlateNumber(self) -> int:
24        return self._build_plate_number
25
26    def __deepcopy__(self, memo):
27        return BuildPlateDecorator()
28