diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 1155c67423..58fc9fc394 100755 --- a/cura/CuraApplication.py +++ b/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") diff --git a/cura/UI/RecommendedMode.py b/cura/UI/RecommendedMode.py new file mode 100644 index 0000000000..6f5db27da2 --- /dev/null +++ b/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"] diff --git a/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml b/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml index aaa10fbfcd..1ae265ab47 100644 --- a/resources/qml/PrintSetupSelector/Recommended/RecommendedAdhesionSelector.qml +++ b/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: