Browse Source

Make code a bit smarter about reusing ExtruderConfigurationModels

This prevents a lot of unneeded signal noise
Jaime van Kessel 5 years ago
parent
commit
05a6c9c3cf

+ 8 - 0
cura/PrinterOutput/Models/MaterialOutputModel.py

@@ -34,3 +34,11 @@ class MaterialOutputModel(QObject):
     @pyqtProperty(str, constant = True)
     def name(self) -> str:
         return self._name
+
+    def __eq__(self, other):
+        if self is other:
+            return True
+        if type(other) is not MaterialOutputModel:
+            return False
+
+        return self.guid == other.guid and self.type == other.type and self.brand == other.brand and self.color == other.color and self.name == other.name

+ 5 - 4
cura/Settings/MachineManager.py

@@ -182,9 +182,11 @@ class MachineManager(QObject):
 
         # Create the configuration model with the current data in Cura
         self._current_printer_configuration.printerType = self._global_container_stack.definition.getName()
-        self._current_printer_configuration.extruderConfigurations = []
-        for extruder in self._global_container_stack.extruderList:
-            extruder_configuration = ExtruderConfigurationModel()
+
+        if len(self._current_printer_configuration.extruderConfigurations) != len(self._global_container_stack.extruderList):
+            self._current_printer_configuration.extruderConfigurations = [ExtruderConfigurationModel() for extruder in self._global_container_stack.extruderList]
+
+        for extruder, extruder_configuration in zip(self._global_container_stack.extruderList, self._current_printer_configuration.extruderConfigurations):
             # For compare just the GUID is needed at this moment
             mat_type = extruder.material.getMetaDataEntry("material") if extruder.material != empty_material_container else None
             mat_guid = extruder.material.getMetaDataEntry("GUID") if extruder.material != empty_material_container else None
@@ -196,7 +198,6 @@ class MachineManager(QObject):
             extruder_configuration.position = int(extruder.getMetaDataEntry("position"))
             extruder_configuration.material = material_model
             extruder_configuration.hotendID = extruder.variant.getName() if extruder.variant != empty_variant_container else None
-            self._current_printer_configuration.extruderConfigurations.append(extruder_configuration)
 
         # An empty build plate configuration from the network printer is presented as an empty string, so use "" for an
         # empty build plate.