Browse Source

CURA-4606 fixed Create profile

Jack Ha 7 years ago
parent
commit
7a78f9821f

+ 1 - 1
cura/Machines/Models/QualityManagementModel.py

@@ -27,7 +27,7 @@ class QualityManagementModel(ListModel):
         self._quality_manager = CuraApplication.getInstance()._quality_manager
         self._quality_manager = CuraApplication.getInstance()._quality_manager
 
 
         self._machine_manager.globalContainerChanged.connect(self._update)
         self._machine_manager.globalContainerChanged.connect(self._update)
-        #self._quality_manager.materialsUpdated.connect(self._update)  # TODO
+        self._quality_manager.qualitiesUpdated.connect(self._update)
 
 
         self._update()
         self._update()
 
 

+ 1 - 0
cura/Machines/Models/QualityProfilesModel.py

@@ -37,6 +37,7 @@ class QualityProfilesModel(ListModel):
         Application.getInstance().getMachineManager().activeQualityGroupChanged.connect(self._update)
         Application.getInstance().getMachineManager().activeQualityGroupChanged.connect(self._update)
 
 
         self._quality_manager = Application.getInstance()._quality_manager
         self._quality_manager = Application.getInstance()._quality_manager
+        self._quality_manager.qualitiesUpdated.connect(self._update)
 
 
         self._layer_height_unit = ""  # This is cached
         self._layer_height_unit = ""  # This is cached
 
 

+ 2 - 0
cura/Machines/Models/QualitySettingsModel.py

@@ -26,6 +26,7 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel):
 
 
         self._container_registry = ContainerRegistry.getInstance()
         self._container_registry = ContainerRegistry.getInstance()
         self._application = Application.getInstance()
         self._application = Application.getInstance()
+        self._quality_manager = self._application._quality_manager
 
 
         self._extruder_position = ""
         self._extruder_position = ""
         self._quality = None
         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._empty_quality = self._container_registry.findInstanceContainers(id = "empty_quality")[0]
 
 
         self._update()
         self._update()
+        self._quality_manager.qualitiesUpdated.connect(self._update)
 
 
     def setExtruderPosition(self, extruder_position):
     def setExtruderPosition(self, extruder_position):
         if extruder_position != self._extruder_position:
         if extruder_position != self._extruder_position:

+ 6 - 0
cura/Machines/QualityManager.py

@@ -1,5 +1,6 @@
 from typing import Optional
 from typing import Optional
 
 
+from PyQt5.Qt import pyqtSignal
 from PyQt5.QtCore import QObject, QTimer
 from PyQt5.QtCore import QObject, QTimer
 
 
 from UM.Application import Application
 from UM.Application import Application
@@ -111,6 +112,8 @@ class QualityNode(ContainerNode):
 
 
 class QualityManager(QObject):
 class QualityManager(QObject):
 
 
+    qualitiesUpdated = pyqtSignal()
+
     def __init__(self, container_registry, parent = None):
     def __init__(self, container_registry, parent = None):
         super().__init__(parent)
         super().__init__(parent)
         self._application = Application.getInstance()
         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 = self._machine_quality_type_to_quality_changes_dict[machine_definition_id]
             machine_node.addQualityChangesMetadata(quality_type, metadata)
             machine_node.addQualityChangesMetadata(quality_type, metadata)
 
 
+        Logger.log("d", "Lookup tables updated.")
+        self.qualitiesUpdated.emit()
+
     def _updateMaps(self):
     def _updateMaps(self):
         self.initialize()
         self.initialize()
 
 

+ 9 - 7
cura/Settings/ContainerManager.py

@@ -398,16 +398,16 @@ class ContainerManager(QObject):
     #   stack and clear the user settings.
     #   stack and clear the user settings.
     #
     #
     #   \return \type{bool} True if the operation was successfully, False if not.
     #   \return \type{bool} True if the operation was successfully, False if not.
-    @pyqtSlot(str, result = bool)
+    @pyqtSlot(str)
     def createQualityChanges(self, base_name):
     def createQualityChanges(self, base_name):
         global_stack = Application.getInstance().getGlobalContainerStack()
         global_stack = Application.getInstance().getGlobalContainerStack()
         if not global_stack:
         if not global_stack:
-            return False
+            return
 
 
         active_quality_name = self._machine_manager.activeQualityName
         active_quality_name = self._machine_manager.activeQualityName
         if active_quality_name == "":
         if active_quality_name == "":
             Logger.log("w", "No quality container found in stack %s, cannot create profile", global_stack.getId())
             Logger.log("w", "No quality container found in stack %s, cannot create profile", global_stack.getId())
-            return False
+            return
 
 
         self._machine_manager.blurSettings.emit()
         self._machine_manager.blurSettings.emit()
         if base_name is None or base_name == "":
         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.
         # Go through the active stacks and create quality_changes containers from the user containers.
         for stack in ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks():
         for stack in ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks():
-            user_container = stack.getTop()
+            user_container = stack.userChanges
             quality_container = stack.quality
             quality_container = stack.quality
             quality_changes_container = stack.qualityChanges
             quality_changes_container = stack.qualityChanges
             if not quality_container or not quality_changes_container:
             if not quality_container or not quality_changes_container:
@@ -431,10 +431,12 @@ class ContainerManager(QObject):
             self._performMerge(new_changes, user_container)
             self._performMerge(new_changes, user_container)
 
 
             self._container_registry.addContainer(new_changes)
             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.
     ##  Remove all quality changes containers matching a specified name.
     #
     #

+ 23 - 9
resources/qml/Preferences/ProfilesPage.qml

@@ -50,6 +50,10 @@ Item
         return base.currentItem.name == Cura.MachineManager.activeQualityOrQualityChangesName;
         return base.currentItem.name == Cura.MachineManager.activeQualityOrQualityChangesName;
     }
     }
 
 
+    property var canCreateProfile: {
+        return isCurrentItemActivated && Cura.MachineManager.hasUserSettings;
+    }
+
     Row  // Button Row
     Row  // Button Row
     {
     {
         id: buttonRow
         id: buttonRow
@@ -80,13 +84,13 @@ Item
         {
         {
             text: catalog.i18nc("@label", "Create")
             text: catalog.i18nc("@label", "Create")
             iconName: "list-add"
             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: {
             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")
             text: catalog.i18nc("@label", "Duplicate")
             iconName: "list-add"
             iconName: "list-add"
-            //enabled: ! base.canCreateProfile()
-            enabled: true // TODO
-            //visible: ! base.canCreateProfile()
-            visible: true // TODO
+            enabled: !base.canCreateProfile
+            visible: !base.canCreateProfile
 
 
             onClicked: {
             onClicked: {
                 // TODO
                 // 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: "<new name>";
+        onAccepted:
+        {
+            var selectedContainer = Cura.ContainerManager.createQualityChanges(newName);
+            objectList.currentIndex = -1 //Reset selection.
+        }
+    }
 
 
     Item {
     Item {
         id: contentsItem
         id: contentsItem