From abece3c415c792c424d499387070e0a10a6a77b5 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 16 Jan 2018 11:54:25 +0100 Subject: [PATCH 1/5] Add quality_type = not_supported to empty_quality_changes CURA-4807 --- cura/CuraApplication.py | 1 + 1 file changed, 1 insertion(+) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 402917d748..b453504f08 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -299,6 +299,7 @@ class CuraApplication(QtApplication): empty_quality_changes_container = copy.deepcopy(empty_container) empty_quality_changes_container.setMetaDataEntry("id", "empty_quality_changes") empty_quality_changes_container.addMetaDataEntry("type", "quality_changes") + empty_quality_changes_container.addMetaDataEntry("quality_type", "not_supported") ContainerRegistry.getInstance().addContainer(empty_quality_changes_container) with ContainerRegistry.getInstance().lockFile(): From 8a570c4b01981dfae96f7feeeeeed2a69f0d8728 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 16 Jan 2018 11:55:54 +0100 Subject: [PATCH 2/5] Show user profiles based on Not Supported CURA-4807 --- cura/Settings/QualityAndUserProfilesModel.py | 8 +++++++- cura/Settings/QualitySettingsModel.py | 2 +- cura/Settings/UserProfilesModel.py | 5 +++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/cura/Settings/QualityAndUserProfilesModel.py b/cura/Settings/QualityAndUserProfilesModel.py index 8396e62417..645e63acdb 100644 --- a/cura/Settings/QualityAndUserProfilesModel.py +++ b/cura/Settings/QualityAndUserProfilesModel.py @@ -1,17 +1,21 @@ # Copyright (c) 2016 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from UM.Application import Application +from UM.Settings.ContainerRegistry import ContainerRegistry from cura.QualityManager import QualityManager from cura.Settings.ProfilesModel import ProfilesModel from cura.Settings.ExtruderManager import ExtruderManager + ## QML Model for listing the current list of valid quality and quality changes profiles. # class QualityAndUserProfilesModel(ProfilesModel): def __init__(self, parent = None): super().__init__(parent) + self._empty_quality = ContainerRegistry.getInstance().findInstanceContainers(id = "empty_quality")[0] + ## Fetch the list of containers to display. # # See UM.Settings.Models.InstanceContainersModel._fetchInstanceContainers(). @@ -35,7 +39,9 @@ class QualityAndUserProfilesModel(ProfilesModel): # Filter the quality_change by the list of available quality_types quality_type_set = set([x.getMetaDataEntry("quality_type") for x in quality_list]) - filtered_quality_changes = {qc.getId():qc for qc in quality_changes_list if + # Also show custom profiles based on "Not Supported" quality profile + quality_type_set.add(self._empty_quality.getMetaDataEntry("quality_type")) + filtered_quality_changes = {qc.getId(): qc for qc in quality_changes_list if qc.getMetaDataEntry("quality_type") in quality_type_set and qc.getMetaDataEntry("extruder") is not None and (qc.getMetaDataEntry("extruder") == active_extruder.definition.getMetaDataEntry("quality_definition") or diff --git a/cura/Settings/QualitySettingsModel.py b/cura/Settings/QualitySettingsModel.py index 0e17237ff7..fb1aa9a6b2 100644 --- a/cura/Settings/QualitySettingsModel.py +++ b/cura/Settings/QualitySettingsModel.py @@ -107,7 +107,7 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel): else: quality_changes_container = containers[0] - if quality_changes_container.getMetaDataEntry("quality_type") == "not_supported": + if quality_changes_container.getMetaDataEntry("quality_type") == self._empty_quality.getMetaDataEntry("quality_type"): quality_container = self._empty_quality else: criteria = { diff --git a/cura/Settings/UserProfilesModel.py b/cura/Settings/UserProfilesModel.py index e093c6c132..6605f52f8a 100644 --- a/cura/Settings/UserProfilesModel.py +++ b/cura/Settings/UserProfilesModel.py @@ -2,6 +2,8 @@ # Cura is released under the terms of the LGPLv3 or higher. from UM.Application import Application +from UM.Settings.ContainerRegistry import ContainerRegistry + from cura.QualityManager import QualityManager from cura.Settings.ProfilesModel import ProfilesModel from cura.Settings.ExtruderManager import ExtruderManager @@ -22,6 +24,8 @@ class UserProfilesModel(ProfilesModel): for material in self.__current_materials: material.metaDataChanged.connect(self._onContainerChanged) + self._empty_quality = ContainerRegistry.getInstance().findContainers(id = "empty_quality")[0] + ## Fetch the list of containers to display. # # See UM.Settings.Models.InstanceContainersModel._fetchInstanceContainers(). @@ -45,6 +49,7 @@ class UserProfilesModel(ProfilesModel): # Filter the quality_change by the list of available quality_types quality_type_set = set([x.getMetaDataEntry("quality_type") for x in quality_list]) + quality_type_set.add(self._empty_quality.getMetaDataEntry("quality_type")) filtered_quality_changes = {qc.getId():qc for qc in quality_changes_list if qc.getMetaDataEntry("quality_type") in quality_type_set and From 0a4c30603faa66844edd777a65f1ae8148aa2097 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Tue, 16 Jan 2018 11:57:39 +0100 Subject: [PATCH 3/5] Change style of Add/Remove printers link in Monitor tab --- plugins/UM3NetworkPrinting/ClusterMonitorItem.qml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml index e78c7d1cc9..ef82ac7638 100644 --- a/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml +++ b/plugins/UM3NetworkPrinting/ClusterMonitorItem.qml @@ -52,13 +52,19 @@ Component { id: addRemovePrintersLabel anchors.right: parent.right - text: "Add / remove printers" + text: catalog.i18nc("@label link to connect manager", "Add/Remove printers") + font: UM.Theme.getFont("default") + color: UM.Theme.getColor("text") + linkColor: UM.Theme.getColor("text_link") } MouseArea { anchors.fill: addRemovePrintersLabel + hoverEnabled: true onClicked: Cura.MachineManager.printerOutputDevices[0].openPrinterControlPanel() + onEntered: addRemovePrintersLabel.font.underline = true + onExited: addRemovePrintersLabel.font.underline = false } } From 51b49c89f4ddf6a1fca225ef1a527ff7ab381818 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 16 Jan 2018 12:43:56 +0100 Subject: [PATCH 4/5] Switch to LayerView after GCode has been fully loaded CURA-4805 --- cura/CuraApplication.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index b453504f08..f4f121eda8 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -1461,11 +1461,7 @@ class CuraApplication(QtApplication): extension = os.path.splitext(filename)[1] if extension.lower() in self._non_sliceable_extensions: - self.getController().setActiveView("SimulationView") - view = self.getController().getActiveView() - view.resetLayerData() - view.setLayer(9999999) - view.calculateMaxLayers() + self.callLater(lambda: self.getController().setActiveView("SimulationView")) block_slicing_decorator = BlockSlicingDecorator() node.addDecorator(block_slicing_decorator) From f948203a63fc246abb7d6e3c62dac63616d4fecf Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 16 Jan 2018 13:43:28 +0100 Subject: [PATCH 5/5] Fix crash when clearing build plate We shouldn't delete the singleton PrintInformation object. We should rather just zero out the print information. And instead of doing that explicitly in deleteAll, listen to scene changes from PrintInformation in order to keep the logic related to the print information contained within its class. Contributes to issue CURA-4810. --- cura/CuraApplication.py | 3 --- cura/PrintInformation.py | 5 +++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index f4f121eda8..37952a42ac 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -1061,9 +1061,6 @@ class CuraApplication(QtApplication): op.push() Selection.clear() - Logger.log("i", "Reseting print information") - self._print_information = PrintInformation.PrintInformation() - # stay on the same build plate #self.getCuraSceneController().setActiveBuildPlate(0) # Select first build plate diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py index 838628e37c..5d5d59ed3b 100644 --- a/cura/PrintInformation.py +++ b/cura/PrintInformation.py @@ -1,4 +1,4 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty @@ -65,6 +65,7 @@ class PrintInformation(QObject): self._backend = Application.getInstance().getBackend() if self._backend: self._backend.printDurationMessage.connect(self._onPrintDurationMessage) + Application.getInstance().getController().getScene().sceneChanged.connect(self.setToZeroPrintInformation) self._base_name = "" self._abbr_machine = "" @@ -171,7 +172,7 @@ class PrintInformation(QObject): def printTimes(self): return self._print_time_message_values[self._active_build_plate] - def _onPrintDurationMessage(self, build_plate_number, print_time, material_amounts): + def _onPrintDurationMessage(self, build_plate_number, print_time: Dict[str, int], material_amounts: list): self._updateTotalPrintTimePerFeature(build_plate_number, print_time) self.currentPrintTimeChanged.emit()