Browse Source

Merge branch 'fix_unsupported_materials_warning' into 2.3

Simon Edwards 8 years ago
parent
commit
df922f5382

+ 27 - 1
cura/Settings/MachineManager.py

@@ -223,6 +223,9 @@ class MachineManager(QObject):
 
 
     def _onActiveExtruderStackChanged(self):
     def _onActiveExtruderStackChanged(self):
         self.blurSettings.emit()  # Ensure no-one has focus.
         self.blurSettings.emit()  # Ensure no-one has focus.
+
+        old_active_container_stack = self._active_container_stack
+
         if self._active_container_stack and self._active_container_stack != self._global_container_stack:
         if self._active_container_stack and self._active_container_stack != self._global_container_stack:
             self._active_container_stack.containersChanged.disconnect(self._onInstanceContainersChanged)
             self._active_container_stack.containersChanged.disconnect(self._onInstanceContainersChanged)
             self._active_container_stack.propertyChanged.disconnect(self._onPropertyChanged)
             self._active_container_stack.propertyChanged.disconnect(self._onPropertyChanged)
@@ -232,8 +235,16 @@ class MachineManager(QObject):
             self._active_container_stack.propertyChanged.connect(self._onPropertyChanged)
             self._active_container_stack.propertyChanged.connect(self._onPropertyChanged)
         else:
         else:
             self._active_container_stack = self._global_container_stack
             self._active_container_stack = self._global_container_stack
+
+        old_active_stack_valid = self._active_stack_valid
         self._active_stack_valid = not self._checkStackForErrors(self._active_container_stack)
         self._active_stack_valid = not self._checkStackForErrors(self._active_container_stack)
-        self.activeStackValidationChanged.emit()
+        if old_active_stack_valid != self._active_stack_valid:
+            self.activeStackValidationChanged.emit()
+
+        if old_active_container_stack != self._active_container_stack:
+            # Many methods and properties related to the active quality actually depend
+            # on _active_container_stack. If it changes, then the properties change.
+            self.activeQualityChanged.emit()
 
 
     def _onInstanceContainersChanged(self, container):
     def _onInstanceContainersChanged(self, container):
         container_type = container.getMetaDataEntry("type")
         container_type = container.getMetaDataEntry("type")
@@ -492,6 +503,21 @@ class MachineManager(QObject):
                 return quality.getMetaDataEntry("quality_type")
                 return quality.getMetaDataEntry("quality_type")
         return ""
         return ""
 
 
+    ##  Get the Quality ID associated with the currently active extruder
+    #   Note that this only returns the "quality", not the "quality_changes"
+    #   \returns QualityID (string) if found, empty string otherwise
+    #   \sa activeQualityId()
+    #   \todo Ideally, this method would be named activeQualityId(), and the other one
+    #         would be named something like activeQualityOrQualityChanges() for consistency
+    @pyqtProperty(str, notify = activeQualityChanged)
+    def activeQualityContainerId(self):
+        # We're using the active stack instead of the global stack in case the list of qualities differs per extruder
+        if self._active_container_stack:
+            quality = self._active_container_stack.findContainer(type = "quality")
+            if quality:
+                return quality.getId()
+        return ""
+
     @pyqtProperty(str, notify = activeQualityChanged)
     @pyqtProperty(str, notify = activeQualityChanged)
     def activeQualityChangesId(self):
     def activeQualityChangesId(self):
         if self._global_container_stack:
         if self._global_container_stack:

+ 8 - 4
cura/Settings/QualitySettingsModel.py

@@ -120,7 +120,11 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
             quality_container = quality_container[0]
             quality_container = quality_container[0]
 
 
         quality_type = quality_container.getMetaDataEntry("quality_type")
         quality_type = quality_container.getMetaDataEntry("quality_type")
-        definition_id = quality_container.getDefinition().getId()
+        definition = quality_container.getDefinition()
+        if definition:
+            definition_id = definition.getId()
+        else:
+            definition_id = "empty_quality"
 
 
         criteria = {"type": "quality", "quality_type": quality_type, "definition": definition_id}
         criteria = {"type": "quality", "quality_type": quality_type, "definition": definition_id}
 
 
@@ -136,9 +140,9 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
             new_criteria.pop("extruder")
             new_criteria.pop("extruder")
             containers = self._container_registry.findInstanceContainers(**new_criteria)
             containers = self._container_registry.findInstanceContainers(**new_criteria)
 
 
-        if not containers:
+        if not containers and "material" in criteria:
             # Try again, this time without material
             # Try again, this time without material
-            criteria.pop("material")
+            criteria.pop("material", None)
             containers = self._container_registry.findInstanceContainers(**criteria)
             containers = self._container_registry.findInstanceContainers(**criteria)
 
 
         if not containers:
         if not containers:
@@ -147,7 +151,7 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
             containers = self._container_registry.findInstanceContainers(**criteria)
             containers = self._container_registry.findInstanceContainers(**criteria)
 
 
         if not containers:
         if not containers:
-            UM.Logger.log("Could not find any quality containers matching the search criteria %s" % str(criteria))
+            UM.Logger.log("w", "Could not find any quality containers matching the search criteria %s" % str(criteria))
             return
             return
 
 
         if quality_changes_container:
         if quality_changes_container:

+ 1 - 1
resources/qml/Actions.qml

@@ -137,7 +137,7 @@ Item
     Action
     Action
     {
     {
         id: addProfileAction;
         id: addProfileAction;
-        enabled: Cura.MachineManager.isActiveStackValid && Cura.MachineManager.hasUserSettings
+        enabled: Cura.MachineManager.isActiveStackValid && Cura.MachineManager.hasUserSettings && Cura.MachineManager.activeQualityId != "empty_quality"
         text: catalog.i18nc("@action:inmenu menubar:profile","&Create profile from current settings...");
         text: catalog.i18nc("@action:inmenu menubar:profile","&Create profile from current settings...");
     }
     }
 
 

+ 2 - 2
resources/qml/Preferences/ProfilesPage.qml

@@ -62,7 +62,7 @@ UM.ManagementPage
         Button
         Button
         {
         {
             text: catalog.i18nc("@label", "Create")
             text: catalog.i18nc("@label", "Create")
-            enabled: base.canCreateProfile()
+            enabled: base.canCreateProfile() && Cura.MachineManager.activeQualityId != "empty_quality"
             visible: base.canCreateProfile()
             visible: base.canCreateProfile()
             iconName: "list-add";
             iconName: "list-add";
 
 
@@ -78,7 +78,7 @@ UM.ManagementPage
         Button
         Button
         {
         {
             text: catalog.i18nc("@label", "Duplicate")
             text: catalog.i18nc("@label", "Duplicate")
-            enabled: ! base.canCreateProfile()
+            enabled: ! base.canCreateProfile() && Cura.MachineManager.activeQualityId != "empty_quality"
             visible: ! base.canCreateProfile()
             visible: ! base.canCreateProfile()
             iconName: "list-add";
             iconName: "list-add";
 
 

+ 1 - 1
resources/qml/SidebarHeader.qml

@@ -244,7 +244,7 @@ Column
                     }
                     }
 
 
                 }
                 }
-                property var valueWarning: Cura.MachineManager.activeQualityId == "empty_quality"
+                property var valueWarning: Cura.MachineManager.activeQualityContainerId == "empty_quality"
 
 
                 enabled: !extrudersList.visible || base.currentExtruderIndex  > -1
                 enabled: !extrudersList.visible || base.currentExtruderIndex  > -1