diff --git a/cura/Machines/Models/QualityManagementModel.py b/cura/Machines/Models/QualityManagementModel.py index 589fec3440..cf7a163d9c 100644 --- a/cura/Machines/Models/QualityManagementModel.py +++ b/cura/Machines/Models/QualityManagementModel.py @@ -27,7 +27,7 @@ class QualityManagementModel(ListModel): self._quality_manager = CuraApplication.getInstance()._quality_manager self._machine_manager.globalContainerChanged.connect(self._update) - #self._quality_manager.materialsUpdated.connect(self._update) # TODO + self._quality_manager.qualitiesUpdated.connect(self._update) self._update() diff --git a/cura/Machines/Models/QualityProfilesModel.py b/cura/Machines/Models/QualityProfilesModel.py index 19262bf75a..11127190e1 100644 --- a/cura/Machines/Models/QualityProfilesModel.py +++ b/cura/Machines/Models/QualityProfilesModel.py @@ -37,6 +37,7 @@ class QualityProfilesModel(ListModel): Application.getInstance().getMachineManager().activeQualityGroupChanged.connect(self._update) self._quality_manager = Application.getInstance()._quality_manager + self._quality_manager.qualitiesUpdated.connect(self._update) self._layer_height_unit = "" # This is cached diff --git a/cura/Machines/Models/QualitySettingsModel.py b/cura/Machines/Models/QualitySettingsModel.py index d3a177c3eb..6353ec841e 100644 --- a/cura/Machines/Models/QualitySettingsModel.py +++ b/cura/Machines/Models/QualitySettingsModel.py @@ -26,6 +26,7 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel): self._container_registry = ContainerRegistry.getInstance() self._application = Application.getInstance() + self._quality_manager = self._application._quality_manager self._extruder_position = "" self._quality = None @@ -42,6 +43,7 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel): self._empty_quality = self._container_registry.findInstanceContainers(id = "empty_quality")[0] self._update() + self._quality_manager.qualitiesUpdated.connect(self._update) def setExtruderPosition(self, extruder_position): if extruder_position != self._extruder_position: diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py index c2481af85e..a5457344f1 100644 --- a/cura/Machines/QualityManager.py +++ b/cura/Machines/QualityManager.py @@ -1,5 +1,6 @@ from typing import Optional +from PyQt5.Qt import pyqtSignal from PyQt5.QtCore import QObject, QTimer from UM.Application import Application @@ -111,6 +112,8 @@ class QualityNode(ContainerNode): class QualityManager(QObject): + qualitiesUpdated = pyqtSignal() + def __init__(self, container_registry, parent = None): super().__init__(parent) self._application = Application.getInstance() @@ -213,6 +216,9 @@ class QualityManager(QObject): machine_node = self._machine_quality_type_to_quality_changes_dict[machine_definition_id] machine_node.addQualityChangesMetadata(quality_type, metadata) + Logger.log("d", "Lookup tables updated.") + self.qualitiesUpdated.emit() + def _updateMaps(self): self.initialize() diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index c420f5b49e..f6ce1bfaf7 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -398,16 +398,16 @@ class ContainerManager(QObject): # stack and clear the user settings. # # \return \type{bool} True if the operation was successfully, False if not. - @pyqtSlot(str, result = bool) + @pyqtSlot(str) def createQualityChanges(self, base_name): global_stack = Application.getInstance().getGlobalContainerStack() if not global_stack: - return False + return active_quality_name = self._machine_manager.activeQualityName if active_quality_name == "": Logger.log("w", "No quality container found in stack %s, cannot create profile", global_stack.getId()) - return False + return self._machine_manager.blurSettings.emit() if base_name is None or base_name == "": @@ -416,7 +416,7 @@ class ContainerManager(QObject): # Go through the active stacks and create quality_changes containers from the user containers. for stack in ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks(): - user_container = stack.getTop() + user_container = stack.userChanges quality_container = stack.quality quality_changes_container = stack.qualityChanges if not quality_container or not quality_changes_container: @@ -431,10 +431,12 @@ class ContainerManager(QObject): self._performMerge(new_changes, user_container) self._container_registry.addContainer(new_changes) - stack.replaceContainer(stack.getContainerIndex(quality_changes_container), new_changes) + #stack.replaceContainer(stack.getContainerIndex(quality_changes_container), new_changes) - self._machine_manager.activeQualityChanged.emit() - return True + #self._machine_manager.activeQualityChanged.emit() + + #self._machine_manager.activeQualityGroupChanged.emit() + #self._machine_manager.activeQualityChangesGroupChanged.emit() ## Remove all quality changes containers matching a specified name. # diff --git a/resources/qml/Preferences/ProfilesPage.qml b/resources/qml/Preferences/ProfilesPage.qml index 0424dd823f..5452648187 100644 --- a/resources/qml/Preferences/ProfilesPage.qml +++ b/resources/qml/Preferences/ProfilesPage.qml @@ -50,6 +50,10 @@ Item return base.currentItem.name == Cura.MachineManager.activeQualityOrQualityChangesName; } + property var canCreateProfile: { + return isCurrentItemActivated && Cura.MachineManager.hasUserSettings; + } + Row // Button Row { id: buttonRow @@ -80,13 +84,13 @@ Item { text: catalog.i18nc("@label", "Create") iconName: "list-add" - //enabled: base.canCreateProfile() && !Cura.MachineManager.stacksHaveErrors - enabled: true // TODO - //visible: base.canCreateProfile() - visible: true // TODO + enabled: base.canCreateProfile && !Cura.MachineManager.stacksHaveErrors + visible: base.canCreateProfile onClicked: { - // TODO + newNameDialog.object = base.currentItem != null ? Cura.ContainerManager.makeUniqueName(Cura.MachineManager.activeQualityOrQualityChangesName) : ""; + newNameDialog.open(); + newNameDialog.selectText(); } } @@ -95,10 +99,8 @@ Item { text: catalog.i18nc("@label", "Duplicate") iconName: "list-add" - //enabled: ! base.canCreateProfile() - enabled: true // TODO - //visible: ! base.canCreateProfile() - visible: true // TODO + enabled: !base.canCreateProfile + visible: !base.canCreateProfile onClicked: { // TODO @@ -153,6 +155,18 @@ Item } + // Dialog to request a name when creating a new profile + UM.RenameDialog + { + title: catalog.i18nc("@title:window", "Create Profile") + id: newNameDialog; + object: ""; + onAccepted: + { + var selectedContainer = Cura.ContainerManager.createQualityChanges(newName); + objectList.currentIndex = -1 //Reset selection. + } + } Item { id: contentsItem