1# Copyright (c) 2019 Ultimaker B.V.
2# Cura is released under the terms of the LGPLv3 or higher.
3
4import copy
5
6from UM.Settings.constant_instance_containers import EMPTY_CONTAINER_ID, empty_container
7from UM.i18n import i18nCatalog
8catalog = i18nCatalog("cura")
9
10
11# Empty definition changes
12EMPTY_DEFINITION_CHANGES_CONTAINER_ID = "empty_definition_changes"
13empty_definition_changes_container = copy.deepcopy(empty_container)
14empty_definition_changes_container.setMetaDataEntry("id", EMPTY_DEFINITION_CHANGES_CONTAINER_ID)
15empty_definition_changes_container.setMetaDataEntry("type", "definition_changes")
16
17# Empty variant
18EMPTY_VARIANT_CONTAINER_ID = "empty_variant"
19empty_variant_container = copy.deepcopy(empty_container)
20empty_variant_container.setMetaDataEntry("id", EMPTY_VARIANT_CONTAINER_ID)
21empty_variant_container.setMetaDataEntry("type", "variant")
22
23# Empty material
24EMPTY_MATERIAL_CONTAINER_ID = "empty_material"
25empty_material_container = copy.deepcopy(empty_container)
26empty_material_container.setMetaDataEntry("id", EMPTY_MATERIAL_CONTAINER_ID)
27empty_material_container.setMetaDataEntry("type", "material")
28empty_material_container.setMetaDataEntry("base_file", "empty_material")
29empty_material_container.setMetaDataEntry("GUID", "FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF")
30empty_material_container.setMetaDataEntry("material", "empty")
31
32# Empty quality
33EMPTY_QUALITY_CONTAINER_ID = "empty_quality"
34empty_quality_container = copy.deepcopy(empty_container)
35empty_quality_container.setMetaDataEntry("id", EMPTY_QUALITY_CONTAINER_ID)
36empty_quality_container.setName(catalog.i18nc("@info:not supported profile", "Not supported"))
37empty_quality_container.setMetaDataEntry("quality_type", "not_supported")
38empty_quality_container.setMetaDataEntry("type", "quality")
39empty_quality_container.setMetaDataEntry("supported", False)
40
41# Empty quality changes
42EMPTY_QUALITY_CHANGES_CONTAINER_ID = "empty_quality_changes"
43empty_quality_changes_container = copy.deepcopy(empty_container)
44empty_quality_changes_container.setMetaDataEntry("id", EMPTY_QUALITY_CHANGES_CONTAINER_ID)
45empty_quality_changes_container.setMetaDataEntry("type", "quality_changes")
46empty_quality_changes_container.setMetaDataEntry("quality_type", "not_supported")
47empty_quality_changes_container.setMetaDataEntry("intent_category", "not_supported")
48
49# Empty intent
50EMPTY_INTENT_CONTAINER_ID = "empty_intent"
51empty_intent_container = copy.deepcopy(empty_container)
52empty_intent_container.setMetaDataEntry("id", EMPTY_INTENT_CONTAINER_ID)
53empty_intent_container.setMetaDataEntry("type", "intent")
54empty_intent_container.setMetaDataEntry("intent_category", "default")
55empty_intent_container.setName(catalog.i18nc("@info:No intent profile selected", "Default"))
56
57
58# All empty container IDs set
59ALL_EMPTY_CONTAINER_ID_SET = {
60    EMPTY_CONTAINER_ID,
61    EMPTY_DEFINITION_CHANGES_CONTAINER_ID,
62    EMPTY_VARIANT_CONTAINER_ID,
63    EMPTY_MATERIAL_CONTAINER_ID,
64    EMPTY_QUALITY_CONTAINER_ID,
65    EMPTY_QUALITY_CHANGES_CONTAINER_ID,
66    EMPTY_INTENT_CONTAINER_ID
67}
68
69
70# Convenience function to check if a container ID represents an empty container.
71def isEmptyContainer(container_id: str) -> bool:
72    return container_id in ALL_EMPTY_CONTAINER_ID_SET
73
74
75__all__ = ["EMPTY_CONTAINER_ID",
76           "empty_container",  # For convenience
77           "EMPTY_DEFINITION_CHANGES_CONTAINER_ID",
78           "empty_definition_changes_container",
79           "EMPTY_VARIANT_CONTAINER_ID",
80           "empty_variant_container",
81           "EMPTY_MATERIAL_CONTAINER_ID",
82           "empty_material_container",
83           "EMPTY_QUALITY_CHANGES_CONTAINER_ID",
84           "empty_quality_changes_container",
85           "EMPTY_QUALITY_CONTAINER_ID",
86           "empty_quality_container",
87           "ALL_EMPTY_CONTAINER_ID_SET",
88           "isEmptyContainer",
89           "EMPTY_INTENT_CONTAINER_ID",
90           "empty_intent_container"
91           ]
92