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
This commit is contained in:
Remco Burema 2022-11-30 18:48:07 +01:00
parent c13deba1ea
commit 8f65af61e5
4 changed files with 38 additions and 23 deletions

View file

@ -184,7 +184,8 @@ class QualityManagementModel(ListModel):
container_registry.addContainer(container.duplicate(new_id, new_name)) container_registry.addContainer(container.duplicate(new_id, new_name))
@pyqtSlot(str) @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. """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 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) 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": 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. """Create a quality changes container with the given set-up.

View file

@ -494,13 +494,7 @@ UM.MainWindow
Connections Connections
{ {
target: Cura.Actions.addProfile target: Cura.Actions.addProfile
function onTriggered() function onTriggered() { createNewQualityDialog.visible = true; }
{
preferences.show();
preferences.setPage(4);
// Create a new profile after a very short delay so the preference page has time to initiate
createProfileTimer.start();
}
} }
Connections 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. // 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. // We need to do this in order to keep the bindings intact.
Connections 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. * Function to check whether a QML object has a certain type.
* Taken from StackOverflow: https://stackoverflow.com/a/28384228 and * Taken from StackOverflow: https://stackoverflow.com/a/28384228 and

View file

@ -15,7 +15,7 @@ UM.Dialog
property alias state: alternateStates.state property alias state: alternateStates.state
onAccepted: alternateStates.state == "" ? CuraApplication.discardOrKeepProfileChangesClosed("discard") : Cura.Actions.addProfile.trigger() 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 minimumWidth: UM.Theme.getSize("popup_dialog").width
minimumHeight: UM.Theme.getSize("popup_dialog").height 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). // 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 != "" visible: alternateStates.state != ""
color: base.backgroundColor
implicitHeight: UM.Theme.getSize("combobox").height implicitHeight: UM.Theme.getSize("combobox").height
implicitWidth: UM.Theme.getSize("combobox").width implicitWidth: UM.Theme.getSize("combobox").width
} }

View file

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