Searching container registry returns ContainerStacks.

Made typing more generic to work with an ContainerStack to compensate.

Made AbstractMachine getMachines a classmethod so it can be called with ContainerStacks.

CURA-9514
This commit is contained in:
joeydelarago 2022-08-23 10:35:00 +02:00
parent d1ae3136aa
commit 7ffa770fb4
4 changed files with 22 additions and 6 deletions

View file

@ -115,6 +115,7 @@ from . import CuraActions
from . import PlatformPhysics from . import PlatformPhysics
from . import PrintJobPreviewImageProvider from . import PrintJobPreviewImageProvider
from .AutoSave import AutoSave from .AutoSave import AutoSave
from .Machines.Models.AbstractStacksModel import AbstractStacksModel
from .Machines.Models.ActiveIntentQualitiesModel import ActiveIntentQualitiesModel from .Machines.Models.ActiveIntentQualitiesModel import ActiveIntentQualitiesModel
from .Machines.Models.IntentSelectionModel import IntentSelectionModel from .Machines.Models.IntentSelectionModel import IntentSelectionModel
from .SingleInstance import SingleInstance from .SingleInstance import SingleInstance
@ -1194,6 +1195,7 @@ class CuraApplication(QtApplication):
qmlRegisterType(InstanceContainer, "Cura", 1, 0, "InstanceContainer") qmlRegisterType(InstanceContainer, "Cura", 1, 0, "InstanceContainer")
qmlRegisterType(ExtrudersModel, "Cura", 1, 0, "ExtrudersModel") qmlRegisterType(ExtrudersModel, "Cura", 1, 0, "ExtrudersModel")
qmlRegisterType(GlobalStacksModel, "Cura", 1, 0, "GlobalStacksModel") qmlRegisterType(GlobalStacksModel, "Cura", 1, 0, "GlobalStacksModel")
qmlRegisterType(AbstractStacksModel, "Cura", 1, 0, "AbstractStacksModel")
self.processEvents() self.processEvents()
qmlRegisterType(FavoriteMaterialsModel, "Cura", 1, 0, "FavoriteMaterialsModel") qmlRegisterType(FavoriteMaterialsModel, "Cura", 1, 0, "FavoriteMaterialsModel")

View file

@ -5,10 +5,12 @@ from PyQt6.QtCore import Qt, QTimer
from typing import Optional, Dict from typing import Optional, Dict
from UM.Qt.ListModel import ListModel from UM.Qt.ListModel import ListModel
from UM.Settings.ContainerStack import ContainerStack
from UM.i18n import i18nCatalog from UM.i18n import i18nCatalog
from UM.Util import parseBool from UM.Util import parseBool
from cura.PrinterOutput.PrinterOutputDevice import ConnectionType from cura.PrinterOutput.PrinterOutputDevice import ConnectionType
from cura.Settings.AbstractMachine import AbstractMachine
from cura.Settings.CuraContainerRegistry import CuraContainerRegistry from cura.Settings.CuraContainerRegistry import CuraContainerRegistry
from cura.Settings.GlobalStack import GlobalStack from cura.Settings.GlobalStack import GlobalStack
@ -62,8 +64,11 @@ class AbstractStacksModel(ListModel):
abstract_machine_stacks = CuraContainerRegistry.getInstance().findContainerStacks(type="abstract_machine") abstract_machine_stacks = CuraContainerRegistry.getInstance().findContainerStacks(type="abstract_machine")
abstract_machine_stacks.sort(key=lambda machine: machine.getName(), reverse=True)
for abstract_machine in abstract_machine_stacks: for abstract_machine in abstract_machine_stacks:
machine_stacks = container_stacks # FIXME: This should point to abstract_machine.getPrinters() machine_stacks = AbstractMachine.getMachines(abstract_machine)
# Create item for abstract printer # Create item for abstract printer
items.append(self.createItem(abstract_machine)) items.append(self.createItem(abstract_machine))
@ -76,7 +81,7 @@ class AbstractStacksModel(ListModel):
self.setItems(items) self.setItems(items)
def createItem(self, container_stack: GlobalStack) -> Optional[Dict]: def createItem(self, container_stack: ContainerStack) -> Optional[Dict]:
if parseBool(container_stack.getMetaDataEntry("hidden", False)): if parseBool(container_stack.getMetaDataEntry("hidden", False)):
return return

View file

@ -14,13 +14,22 @@ class AbstractMachine(GlobalStack):
super().__init__(container_id) super().__init__(container_id)
self.setMetaDataEntry("type", "abstract_machine") self.setMetaDataEntry("type", "abstract_machine")
def getMachines(self) -> List[ContainerStack]: @classmethod
from cura.CuraApplication import CuraApplication def getMachines(cls, abstract_machine: ContainerStack) -> List[ContainerStack]:
""" Fetches containers for all machines that match definition with an abstract machine.
:param abstractMachine: The abstract machine stack.
:return: A list of Containers or an empty list if stack is not an "abstract_machine"
"""
if not abstract_machine.getMetaDataEntry("type") == "abstract_machine":
return []
from cura.CuraApplication import CuraApplication # In function to avoid circular import
application = CuraApplication.getInstance() application = CuraApplication.getInstance()
registry = application.getContainerRegistry() registry = application.getContainerRegistry()
printer_type = self.definition.getId() printer_type = abstract_machine.definition.getId()
return [machine for machine in registry.findContainerStacks(type="machine") if machine.definition.id == printer_type and ConnectionType.CloudConnection in machine.configuredConnectionTypes] return [machine for machine in registry.findContainerStacks(type="machine") if machine.definition.id == printer_type and ConnectionType.CloudConnection in machine.configuredConnectionTypes]

View file

@ -10,7 +10,7 @@ import Cura 1.0 as Cura
ListView ListView
{ {
id: listView id: listView
model: Cura.GlobalStacksModel {} model: Cura.AbstractStacksModel {}
section.property: "hasRemoteConnection" section.property: "hasRemoteConnection"
property real contentHeight: childrenRect.height property real contentHeight: childrenRect.height