Browse Source

Connect compare-and-safe profile dialog buttons to actions.

Some rework was needed as to not get the entire Preferences window to show up, which previously came along with the add profile action.

part of CURA-9347
Remco Burema 2 years ago
parent
commit
8f65af61e5

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

@@ -184,7 +184,8 @@ class QualityManagementModel(ListModel):
                 container_registry.addContainer(container.duplicate(new_id, new_name))
 
     @pyqtSlot(str)
-    def createQualityChanges(self, base_name: str) -> None:
+    @pyqtSlot(str, bool)
+    def createQualityChanges(self, base_name: str, activate_after_success: bool = False) -> None:
         """Create quality changes containers from the user containers in the active stacks.
 
         This will go through the global and extruder stacks and create quality_changes containers from the user
@@ -233,6 +234,14 @@ class QualityManagementModel(ListModel):
 
             container_registry.addContainer(new_changes)
 
+        if activate_after_success:
+            # At this point, the QualityChangesGroup object for the new changes may not exist yet.
+            # This can be forced by asking for all of them. At that point it's just as well to loop.
+            for quality_changes in ContainerTree.getInstance().getCurrentQualityChangesGroups():
+                if quality_changes.name == unique_name:
+                    machine_manager.setQualityChangesGroup(quality_changes)
+                    break
+
     def _createQualityChanges(self, quality_type: str, intent_category: Optional[str], new_name: str, machine: "GlobalStack", extruder_stack: Optional["ExtruderStack"]) -> "InstanceContainer":
         """Create a quality changes container with the given set-up.
 

+ 10 - 16
resources/qml/Cura.qml

@@ -494,13 +494,7 @@ UM.MainWindow
     Connections
     {
         target: Cura.Actions.addProfile
-        function onTriggered()
-        {
-            preferences.show();
-            preferences.setPage(4);
-            // Create a new profile after a very short delay so the preference page has time to initiate
-            createProfileTimer.start();
-        }
+        function onTriggered() { createNewQualityDialog.visible = true; }
     }
 
     Connections
@@ -547,15 +541,6 @@ UM.MainWindow
         }
     }
 
-    Timer
-    {
-        id: createProfileTimer
-        repeat: false
-        interval: 1
-
-        onTriggered: preferences.getCurrentItem().createProfile()
-    }
-
     // BlurSettings is a way to force the focus away from any of the setting items.
     // We need to do this in order to keep the bindings intact.
     Connections
@@ -887,6 +872,15 @@ UM.MainWindow
         }
     }
 
+    Cura.RenameDialog
+    {
+        id: createNewQualityDialog
+        title: catalog.i18nc("@title:window", "Save Custom Profile")
+        object: catalog.i18nc("@textfield:placeholder", "<New Custom Profile>")
+        explanation: catalog.i18nc("@info", "Custom profile name:")
+        onAccepted: CuraApplication.getQualityManagementModel().createQualityChanges(newName, true);
+    }
+
     /**
      * Function to check whether a QML object has a certain type.
      * Taken from StackOverflow: https://stackoverflow.com/a/28384228 and

+ 2 - 1
resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml

@@ -15,7 +15,7 @@ UM.Dialog
     property alias state: alternateStates.state
 
     onAccepted: alternateStates.state == "" ? CuraApplication.discardOrKeepProfileChangesClosed("discard") : Cura.Actions.addProfile.trigger()
-    onRejected: alternateStates.state == "" ? CuraApplication.discardOrKeepProfileChangesClosed("keep") : Cura.Actions.addProfile.trigger()
+    onRejected: alternateStates.state == "" ? CuraApplication.discardOrKeepProfileChangesClosed("keep") : Cura.Actions.updateProfile.trigger()
 
     minimumWidth: UM.Theme.getSize("popup_dialog").width
     minimumHeight: UM.Theme.getSize("popup_dialog").height
@@ -160,6 +160,7 @@ UM.Dialog
         {
             // Workaround: If this placeholder isn't in here, then on repeated state-changes of the window, the rightButtons will be in the center (despite initially showing up right).
             visible: alternateStates.state != ""
+            color: base.backgroundColor
             implicitHeight: UM.Theme.getSize("combobox").height
             implicitWidth: UM.Theme.getSize("combobox").width
         }

+ 16 - 5
resources/qml/Preferences/RenameDialog.qml → resources/qml/Dialogs/RenameDialog.qml

@@ -21,6 +21,9 @@ UM.Dialog
     property string validationError
     property string dialogTitle: catalog.i18nc("@title:window", "Rename")
     property string explanation: catalog.i18nc("@info", "Please provide a new name.")
+    property string okButtonText: catalog.i18nc("@action:button", "OK")
+
+    property list<Item> extraInfo
 
     title: dialogTitle
     backgroundColor: UM.Theme.getColor("main_background")
@@ -60,6 +63,11 @@ UM.Dialog
             onTextChanged: base.textChanged(text)
         }
 
+        Row
+        {
+            children: extraInfo
+        }
+
         UM.Label
         {
             visible: !base.validName
@@ -67,20 +75,23 @@ UM.Dialog
         }
     }
 
-    rightButtons: [
-        Cura.SecondaryButton
+    leftButtons:
+    [
+        Cura.TertiaryButton
         {
             id: cancelButton
             text: catalog.i18nc("@action:button","Cancel")
             onClicked: base.reject()
-        },
+        }
+    ]
+    rightButtons:
+    [
         Cura.PrimaryButton
         {
             id: okButton
-            text: catalog.i18nc("@action:button", "OK")
+            text: base.okButtonText
             onClicked: base.accept()
             enabled: base.validName
         }
     ]
 }
-