Cura/resources/qml/Dialogs/DiscardOrKeepProfileChangesDialog.qml
2023-01-04 13:17:56 +01:00

184 lines
6.4 KiB
QML

//Copyright (c) 2022 Ultimaker B.V.
//Cura is released under the terms of the LGPLv3 or higher.
import QtQuick 2.1
import QtQuick.Controls 2.15
import UM 1.6 as UM
import Cura 1.6 as Cura
UM.Dialog
{
id: base
title: catalog.i18nc("@title:window", "Discard or Keep changes")
enum ButtonsType { DiscardOrKeep, SaveFromBuiltIn, SaveFromCustom}
property int buttonState: DiscardOrKeepProfileChangesDialog.ButtonsType.DiscardOrKeep
onAccepted: buttonState == DiscardOrKeepProfileChangesDialog.ButtonsType.DiscardOrKeep ?
CuraApplication.discardOrKeepProfileChangesClosed("discard") : Cura.Actions.addProfile.trigger()
onRejected: buttonState == DiscardOrKeepProfileChangesDialog.ButtonsType.DiscardOrKeep ?
CuraApplication.discardOrKeepProfileChangesClosed("keep") : Cura.Actions.updateProfile.trigger()
minimumWidth: UM.Theme.getSize("popup_dialog").width
minimumHeight: UM.Theme.getSize("popup_dialog").height
width: minimumWidth
height: minimumHeight
backgroundColor: UM.Theme.getColor("background_1")
margin: UM.Theme.getSize("thick_margin").width
property var changesModel: Cura.UserChangesModel { id: userChangesModel }
// Hack to make sure that when the data of our model changes the tablemodel is also updated
// If we directly set the rows (So without the clear being called) it doesn't seem to
// get updated correctly.
property var modelRows: userChangesModel.items
onModelRowsChanged:
{
tableModel.clear()
tableModel.rows = modelRows
}
onVisibilityChanged:
{
if(visible)
{
changesModel.forceUpdate()
discardOrKeepProfileChangesDropDownButton.currentIndex = 0;
for (var i = 0; i < discardOrKeepProfileChangesDropDownButton.model.count; ++i)
{
var code = discardOrKeepProfileChangesDropDownButton.model.get(i).code;
if (code == UM.Preferences.getValue("cura/choice_on_profile_override"))
{
discardOrKeepProfileChangesDropDownButton.currentIndex = i;
break;
}
}
}
}
UM.Label
{
id: infoText
text: catalog.i18nc("@text:window, %1 is a profile name", "You have customized some profile settings. Would you like to Keep these changed settings after switching profiles? Alternatively, you can discard the changes to load the defaults from '%1'.").arg(Cura.MachineManager.activeQualityDisplayNameMainStringParts.join(" - "))
anchors.left: parent.left
anchors.right: parent.right
wrapMode: Text.WordWrap
UM.I18nCatalog
{
id: catalog
name: "cura"
}
}
Item
{
anchors.topMargin: UM.Theme.getSize("default_margin").height
anchors.top: infoText.bottom
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
Cura.TableView
{
id: tableView
anchors.fill: parent
columnHeaders: [
catalog.i18nc("@title:column", "Profile settings"),
Cura.MachineManager.activeQualityDisplayNameMainStringParts.join(" - "),
catalog.i18nc("@title:column", "Current changes")
]
model: UM.TableModel
{
id: tableModel
headers: ["label", "original_value", "user_value"]
rows: modelRows
}
sectionRole: "category"
}
}
buttonSpacing: UM.Theme.getSize("thin_margin").width
leftButtons:
[
Cura.ComboBox
{
visible: buttonState === DiscardOrKeepProfileChangesDialog.ButtonsType.DiscardOrKeep
implicitHeight: UM.Theme.getSize("combobox").height
implicitWidth: UM.Theme.getSize("combobox").width
id: discardOrKeepProfileChangesDropDownButton
textRole: "text"
model: ListModel
{
id: discardOrKeepProfileListModel
Component.onCompleted: {
append({ text: catalog.i18nc("@option:discardOrKeep", "Always ask me this"), code: "always_ask" })
append({ text: catalog.i18nc("@option:discardOrKeep", "Discard and never ask again"), code: "always_discard" })
append({ text: catalog.i18nc("@option:discardOrKeep", "Keep and never ask again"), code: "always_keep" })
}
}
onActivated:
{
const code = model.get(index).code;
UM.Preferences.setValue("cura/choice_on_profile_override", code);
switch (code) {
case "always_keep":
keepButton.enabled = true;
discardButton.enabled = false;
break;
case "always_discard":
keepButton.enabled = false;
discardButton.enabled = true;
break;
default:
keepButton.enabled = true;
discardButton.enabled = true;
break;
}
}
}
]
rightButtons:
[
Cura.PrimaryButton
{
id: discardButton
text: catalog.i18nc("@action:button", "Discard changes")
onClicked: base.accept()
visible: buttonState == DiscardOrKeepProfileChangesDialog.ButtonsType.DiscardOrKeep
},
Cura.SecondaryButton
{
id: keepButton
text: catalog.i18nc("@action:button", "Keep changes")
onClicked: base.reject()
visible: buttonState == DiscardOrKeepProfileChangesDialog.ButtonsType.DiscardOrKeep
},
Cura.SecondaryButton
{
id: overwriteButton
text: catalog.i18nc("@action:button", "Save as new custom profile")
visible: buttonState != DiscardOrKeepProfileChangesDialog.ButtonsType.DiscardOrKeep
onClicked: base.accept()
},
Cura.PrimaryButton
{
id: saveButton
text: catalog.i18nc("@action:button", "Save changes")
visible: buttonState == DiscardOrKeepProfileChangesDialog.ButtonsType.SaveFromCustom
onClicked: base.reject()
}
]
}