Browse Source

Fix some quality_changes being incorrectly shown for some configurations

CURA-7589
Jaime van Kessel 4 years ago
parent
commit
eb17e146bc
2 changed files with 16 additions and 3 deletions
  1. 13 3
      cura/Machines/MachineNode.py
  2. 3 0
      cura/Machines/Models/QualityManagementModel.py

+ 13 - 3
cura/Machines/MachineNode.py

@@ -135,9 +135,7 @@ class MachineNode(ContainerNode):
                 groups_by_name[name] = QualityChangesGroup(name, quality_type = quality_changes["quality_type"],
                                                            intent_category = quality_changes.get("intent_category", "default"),
                                                            parent = CuraApplication.getInstance())
-                # CURA-6882
-                # Custom qualities are always available, even if they are based on the "not supported" profile.
-                groups_by_name[name].is_available = True
+
             elif groups_by_name[name].intent_category == "default":  # Intent category should be stored as "default" if everything is default or as the intent if any of the extruder have an actual intent.
                 groups_by_name[name].intent_category = quality_changes.get("intent_category", "default")
 
@@ -146,6 +144,18 @@ class MachineNode(ContainerNode):
             else:  # Global profile.
                 groups_by_name[name].metadata_for_global = quality_changes
 
+        quality_groups = self.getQualityGroups(variant_names, material_bases, extruder_enabled)
+        for quality_changes_group in groups_by_name.values():
+            if quality_changes_group.quality_type not in quality_groups:
+                if quality_changes_group.quality_type == "not_supported":
+                    # Quality changes based on an empty profile are always available. 
+                    quality_changes_group.is_available = True
+                else:
+                    quality_changes_group.is_available = False
+            else:
+                # Quality changes group is available iff the quality group it depends on is available. Irrespective of whether the intent category is available.
+                quality_changes_group.is_available = quality_groups[quality_changes_group.quality_type].is_available
+
         return list(groups_by_name.values())
 
     def preferredGlobalQuality(self) -> "QualityNode":

+ 3 - 0
cura/Machines/Models/QualityManagementModel.py

@@ -365,6 +365,9 @@ class QualityManagementModel(ListModel):
             # CURA-6913 Note that custom qualities can be based on "not supported", so the quality group can be None.
             quality_group = quality_group_dict.get(quality_changes_group.quality_type)
             quality_type = quality_changes_group.quality_type
+
+            if not quality_changes_group.is_available:
+                continue
             item = {"name": quality_changes_group.name,
                     "is_read_only": False,
                     "quality_group": quality_group,