mirror of
https://github.com/Ultimaker/Cura.git
synced 2025-07-16 11:17:49 -06:00

So if we ever change the order of initialisation this stays working. Contributes to issue CURA-6600.
49 lines
No EOL
2 KiB
Python
49 lines
No EOL
2 KiB
Python
# Copyright (c) 2019 Ultimaker B.V.
|
|
# Cura is released under the terms of the LGPLv3 or higher.
|
|
|
|
from UM.Logger import Logger
|
|
from UM.Settings.ContainerRegistry import ContainerRegistry # To listen to containers being added.
|
|
from UM.Settings.DefinitionContainer import DefinitionContainer
|
|
from UM.Settings.Interfaces import ContainerInterface
|
|
from cura.Machines.MachineNode import MachineNode
|
|
|
|
from typing import Dict
|
|
|
|
## This class contains a look-up tree for which containers are available at
|
|
# which stages of configuration.
|
|
#
|
|
# The tree starts at the machine definitions. For every distinct definition
|
|
# there will be one machine node here.
|
|
class ContainerTree:
|
|
__instance = None
|
|
|
|
@classmethod
|
|
def getInstance(cls):
|
|
if cls.__instance is None:
|
|
cls.__instance = ContainerTree()
|
|
return cls.__instance
|
|
|
|
def __init__(self) -> None:
|
|
self.machines = {} # type: Dict[str, MachineNode] # Mapping from definition ID to machine nodes.
|
|
container_registry = ContainerRegistry.getInstance()
|
|
container_registry.containerAdded.connect(self._machineAdded)
|
|
self._loadAll()
|
|
|
|
## Builds the initial container tree.
|
|
def _loadAll(self):
|
|
Logger.log("i", "Building container tree.")
|
|
all_stacks = ContainerRegistry.getInstance().findContainerStacks()
|
|
for stack in all_stacks:
|
|
definition_id = stack.definition.getId()
|
|
if definition_id not in self.machines:
|
|
self.machines[definition_id] = MachineNode(definition_id)
|
|
|
|
## When a printer gets added, we need to build up the tree for that container.
|
|
def _machineAdded(self, definition_container: ContainerInterface):
|
|
if not isinstance(definition_container, DefinitionContainer):
|
|
return # Not our concern.
|
|
definition_id = definition_container.getId()
|
|
if definition_id in self.machines:
|
|
return # Already have this definition ID.
|
|
|
|
self.machines[definition_id] = MachineNode(definition_id) |