Browse Source

Fix adhesion checkbox in recommended mode

CURA-6182

Move complex logic to Python.
Lipu Fei 5 years ago
parent
commit
80827bdf70

+ 2 - 0
cura/CuraApplication.py

@@ -114,6 +114,7 @@ from cura.UI.MachineSettingsManager import MachineSettingsManager
 from cura.UI.ObjectsModel import ObjectsModel
 from cura.UI.TextManager import TextManager
 from cura.UI.AddPrinterPagesModel import AddPrinterPagesModel
+from cura.UI.RecommendedMode import RecommendedMode
 from cura.UI.WelcomePagesModel import WelcomePagesModel
 from cura.UI.WhatsNewPagesModel import WhatsNewPagesModel
 
@@ -1037,6 +1038,7 @@ class CuraApplication(QtApplication):
         qmlRegisterType(WhatsNewPagesModel, "Cura", 1, 0, "WhatsNewPagesModel")
         qmlRegisterType(AddPrinterPagesModel, "Cura", 1, 0, "AddPrinterPagesModel")
         qmlRegisterType(TextManager, "Cura", 1, 0, "TextManager")
+        qmlRegisterType(RecommendedMode, "Cura", 1, 0, "RecommendedMode")
 
         qmlRegisterType(NetworkMJPGImage, "Cura", 1, 0, "NetworkMJPGImage")
 

+ 50 - 0
cura/UI/RecommendedMode.py

@@ -0,0 +1,50 @@
+# Copyright (c) 2019 Ultimaker B.V.
+# Cura is released under the terms of the LGPLv3 or higher.
+
+from PyQt5.QtCore import QObject, pyqtSlot
+
+
+#
+# This object contains helper/convenience functions for Recommended mode.
+#
+class RecommendedMode(QObject):
+
+    # Sets to use the adhesion or not for the "Adhesion" CheckBox in Recommended mode.
+    @pyqtSlot(bool)
+    def setAdhesion(self, checked: bool) -> None:
+        from cura.CuraApplication import CuraApplication
+
+        application = CuraApplication.getInstance()
+        global_stack = application.getMachineManager().activeMachine
+        if global_stack is None:
+            return
+
+        # Remove the adhesion type value set by the user.
+        adhesion_type_key = "adhesion_type"
+        user_changes_container = global_stack.userChanges
+        if adhesion_type_key in user_changes_container.getAllKeys():
+            user_changes_container.removeInstance(adhesion_type_key)
+
+        # Get the default value of adhesion type after user's value has been removed.
+        # skirt and none are counted as "no adhesion", the others are considered as "with adhesion". The conditions are
+        # as the following:
+        #  - if the user checks the adhesion checkbox, get the default value (including the custom quality) for adhesion
+        #    type.
+        #     (1) If the default value is "skirt" or "none" (no adhesion), set adhesion_type to "brim".
+        #     (2) If the default value is "with adhesion", do nothing.
+        #  - if the user unchecks the adhesion checkbox, get the default value (including the custom quality) for
+        #    adhesion type.
+        #     (1) If the default value is "skirt" or "none" (no adhesion), do nothing.
+        #     (2) Otherwise, set adhesion_type to "skirt".
+        value = global_stack.getProperty(adhesion_type_key, "value")
+        if checked:
+            if value in ("skirt", "none"):
+                value = "brim"
+        else:
+            if value not in ("skirt", "none"):
+                value = "skirt"
+
+        user_changes_container.setProperty(adhesion_type_key, "value", value)
+
+
+__all__ = ["RecommendedMode"]

+ 2 - 13
resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml

@@ -18,6 +18,7 @@ Item
     height: childrenRect.height
 
     property real labelColumnWidth: Math.round(width / 3)
+    property var curaRecommendedMode: Cura.RecommendedMode {}
 
     Cura.IconWithText
     {
@@ -64,19 +65,7 @@ Item
 
                 onClicked:
                 {
-                    var adhesionType = "skirt";
-                    if (!parent.checked)
-                    {
-                        // Remove the "user" setting to see if the rest of the stack prescribes a brim or a raft
-                        platformAdhesionType.removeFromContainer(0);
-                        adhesionType = platformAdhesionType.properties.resolve;
-                        if(adhesionType === "skirt" || adhesionType === "none")
-                        {
-                            // If the rest of the stack doesn't prescribe an adhesion-type, default to a brim
-                            adhesionType = "brim";
-                        }
-                    }
-                    platformAdhesionType.setPropertyValue("value", adhesionType);
+                    curaRecommendedMode.setAdhesion(!parent.checked)
                 }
 
                 onEntered: