From 555cd58f5e33784d5454758bb6aa8532e78d0d2b Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 20 Mar 2017 15:27:38 +0100 Subject: [PATCH 1/2] Save with code names for profile override preference CURA-3561 --- cura/CuraApplication.py | 6 +-- .../qml/DiscardOrKeepProfileChangesDialog.qml | 45 ++++++++--------- resources/qml/Preferences/GeneralPage.qml | 50 +++++++++++++++---- 3 files changed, 65 insertions(+), 36 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 6fcd0fbf4f..b6816a38ae 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -245,7 +245,7 @@ class CuraApplication(QtApplication): Preferences.getInstance().addPreference("mesh/scale_tiny_meshes", True) Preferences.getInstance().addPreference("cura/dialog_on_project_save", True) Preferences.getInstance().addPreference("cura/asked_dialog_on_project_save", False) - Preferences.getInstance().addPreference("cura/choice_on_profile_override", 0) + Preferences.getInstance().addPreference("cura/choice_on_profile_override", "always_ask") Preferences.getInstance().addPreference("cura/currency", "€") Preferences.getInstance().addPreference("cura/material_settings", "{}") @@ -338,10 +338,10 @@ class CuraApplication(QtApplication): def discardOrKeepProfileChanges(self): choice = Preferences.getInstance().getValue("cura/choice_on_profile_override") - if choice == 1: + if choice == "always_discard": # don't show dialog and DISCARD the profile self.discardOrKeepProfileChangesClosed("discard") - elif choice == 2: + elif choice == "always_keep": # don't show dialog and KEEP the profile self.discardOrKeepProfileChangesClosed("keep") else: diff --git a/resources/qml/DiscardOrKeepProfileChangesDialog.qml b/resources/qml/DiscardOrKeepProfileChangesDialog.qml index 1752995ec5..e2212a8f9f 100644 --- a/resources/qml/DiscardOrKeepProfileChangesDialog.qml +++ b/resources/qml/DiscardOrKeepProfileChangesDialog.qml @@ -21,9 +21,18 @@ UM.Dialog if(visible) { changesModel.forceUpdate() - } - discardOrKeepProfileChangesDropDownButton.currentIndex = UM.Preferences.getValue("cura/choice_on_profile_override") + discardOrKeepProfileChangesDropDownButton.currentIndex = 0; + for (var i = 0; i < discardOrKeepProfileChangesDropDownButton.model.count; ++i) + { + var code = discardOrKeepProfileChangesDropDownButton.model.get(i).code; + if (code == UM.Preferences.getValue("cura/choice_on_profile_override")) + { + discardOrKeepProfileChangesDropDownButton.currentIndex = i; + break; + } + } + } } Column @@ -133,32 +142,20 @@ UM.Dialog ComboBox { id: discardOrKeepProfileChangesDropDownButton - model: [ - catalog.i18nc("@option:discardOrKeep", "Always ask me this"), - catalog.i18nc("@option:discardOrKeep", "Discard and never ask again"), - catalog.i18nc("@option:discardOrKeep", "Keep and never ask again") - ] width: 300 - currentIndex: UM.Preferences.getValue("cura/choice_on_profile_override") - onCurrentIndexChanged: + + model: ListModel { - UM.Preferences.setValue("cura/choice_on_profile_override", currentIndex) - if (currentIndex == 1) { - // 1 == "Discard and never ask again", so only enable the "Discard" button - discardButton.enabled = true - keepButton.enabled = false - } - else if (currentIndex == 2) { - // 2 == "Keep and never ask again", so only enable the "Keep" button - keepButton.enabled = true - discardButton.enabled = false - } - else { - // 0 == "Always ask me this", so show both - keepButton.enabled = true - discardButton.enabled = true + id: discardOrKeepProfileListModel + + Component.onCompleted: { + append({ text: catalog.i18nc("@option:discardOrKeep", "Always ask me this"), code: "always_ask" }) + append({ text: catalog.i18nc("@option:discardOrKeep", "Discard and never ask again"), code: "always_discard" }) + append({ text: catalog.i18nc("@option:discardOrKeep", "Keep and never ask again"), code: "always_keep" }) } } + + onActivated: UM.Preferences.setValue("cura/choice_on_profile_override", model.get(index).code) } } diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index d9170ec597..b6694972c5 100755 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -25,6 +25,18 @@ UM.PreferencesPage } } + function setDefaultDiscardOrKeepProfile(code) + { + for (var i = 0; i < choiceOnProfileOverrideDropDownButton.model.count; i++) + { + if (choiceOnProfileOverrideDropDownButton.model.get(i).code == code) + { + choiceOnProfileOverrideDropDownButton.currentIndex = i; + break; + } + } + } + function reset() { UM.Preferences.resetPreference("general/language") @@ -47,8 +59,9 @@ UM.PreferencesPage centerOnSelectCheckbox.checked = boolCheck(UM.Preferences.getValue("view/center_on_select")) UM.Preferences.resetPreference("view/top_layer_count"); topLayerCountCheckbox.checked = boolCheck(UM.Preferences.getValue("view/top_layer_count")) + UM.Preferences.resetPreference("cura/choice_on_profile_override") - choiceOnProfileOverrideDropDownButton.currentIndex = UM.Preferences.getValue("cura/choice_on_profile_override") + setDefaultDiscardOrKeepProfile(UM.Preferences.getValue("cura/choice_on_profile_override")) if (plugins.find("id", "SliceInfoPlugin") > -1) { UM.Preferences.resetPreference("info/send_slice_info") @@ -364,15 +377,34 @@ UM.PreferencesPage ComboBox { id: choiceOnProfileOverrideDropDownButton - - model: [ - catalog.i18nc("@option:discardOrKeep", "Always ask me this"), - catalog.i18nc("@option:discardOrKeep", "Discard and never ask again"), - catalog.i18nc("@option:discardOrKeep", "Keep and never ask again") - ] width: 300 - currentIndex: UM.Preferences.getValue("cura/choice_on_profile_override") - onCurrentIndexChanged: UM.Preferences.setValue("cura/choice_on_profile_override", currentIndex) + + model: ListModel + { + id: discardOrKeepProfileListModel + + Component.onCompleted: { + append({ text: catalog.i18nc("@option:discardOrKeep", "Always ask me this"), code: "always_ask" }) + append({ text: catalog.i18nc("@option:discardOrKeep", "Discard and never ask again"), code: "always_discard" }) + append({ text: catalog.i18nc("@option:discardOrKeep", "Keep and never ask again"), code: "always_keep" }) + } + } + + currentIndex: + { + var index = 0; + var code = UM.Preferences.getValue("cura/choice_on_profile_override"); + for (var i = 0; i < model.count; ++i) + { + if (model.get(i).code == code) + { + index = i; + break; + } + } + return index; + } + onActivated: UM.Preferences.setValue("cura/choice_on_profile_override", model.get(index).code) } } From 90a92dce19ce548c28a1c61b95c9e2dd455737eb Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 21 Mar 2017 11:13:10 +0100 Subject: [PATCH 2/2] If a container_changes can not be found, handle it more gracefully CURA-3560 --- cura/Settings/MachineManager.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index e690fcec1d..84b7b46069 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -813,6 +813,10 @@ class MachineManager(QObject): Logger.log("e", "Tried to set quality to a container that is not of the right type") return + # Check if it was at all possible to find new settings + if new_quality_settings_list is None: + return + name_changed_connect_stacks = [] # Connect these stacks to the name changed callback for setting_info in new_quality_settings_list: stack = setting_info["stack"] @@ -889,7 +893,12 @@ class MachineManager(QObject): quality_changes_profiles = quality_manager.findQualityChangesByName(quality_changes_name, global_machine_definition) - global_quality_changes = [qcp for qcp in quality_changes_profiles if qcp.getMetaDataEntry("extruder") is None][0] + global_quality_changes = [qcp for qcp in quality_changes_profiles if qcp.getMetaDataEntry("extruder") is None] + if global_quality_changes: + global_quality_changes = global_quality_changes[0] + else: + Logger.log("e", "Could not find the global quality changes container with name %s", quality_changes_name) + return None material = global_container_stack.findContainer(type="material") # For the global stack, find a quality which matches the quality_type in