Make ManageButton a reusable Component

cura 8734
This commit is contained in:
casper 2021-12-08 15:50:00 +01:00
parent 4a436b5598
commit c72fd12ea2
3 changed files with 158 additions and 62 deletions

View file

@ -8,17 +8,13 @@ import QtQuick.Layouts 1.1
import UM 1.6 as UM import UM 1.6 as UM
import Cura 1.6 as Cura import Cura 1.6 as Cura
RowLayout Item
{ {
id: manageButton id: manageButton
property string button_style property string button_style
property string primaryText property string text
property string secondaryText property bool busy
property string busyPrimaryText property bool confirmed
property string busySecondaryText
property string confirmedPrimaryText
property string confirmedSecondaryText
property bool confirmedTextChoice: true
signal clicked(bool primary_action) signal clicked(bool primary_action)
@ -27,12 +23,10 @@ RowLayout
Cura.PrimaryButton Cura.PrimaryButton
{ {
id: primaryButton id: primaryButton
enabled: manageButton.enabled text: manageButton.text
text: manageButton.primaryText
onClicked: onClicked:
{ {
manageButton.confirmedTextChoice = true
manageButton.clicked(true) manageButton.clicked(true)
} }
} }
@ -43,12 +37,10 @@ RowLayout
Cura.SecondaryButton Cura.SecondaryButton
{ {
id: secondaryButton id: secondaryButton
enabled: manageButton.enabled text: manageButton.text
text: manageButton.secondaryText
onClicked: onClicked:
{ {
manageButton.confirmedTextChoice = false
manageButton.clicked(false) manageButton.clicked(false)
} }
} }
@ -59,8 +51,6 @@ RowLayout
Item Item
{ {
id: busyMessage id: busyMessage
height: UM.Theme.getSize("action_button").height
width: childrenRect.width
UM.RecolorImage UM.RecolorImage
{ {
@ -91,7 +81,7 @@ RowLayout
anchors.left: busyIndicator.right anchors.left: busyIndicator.right
anchors.leftMargin: UM.Theme.getSize("narrow_margin").width anchors.leftMargin: UM.Theme.getSize("narrow_margin").width
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
text: manageButton.busyMessageText text: manageButton.text
font: UM.Theme.getFont("medium_bold") font: UM.Theme.getFont("medium_bold")
color: UM.Theme.getColor("primary") color: UM.Theme.getColor("primary")
@ -111,7 +101,7 @@ RowLayout
{ {
id: confirmedMessageText id: confirmedMessageText
anchors.verticalCenter: parent.verticalCenter anchors.verticalCenter: parent.verticalCenter
text: manageButton.confirmedTextChoice ? manageButton.confirmedPrimaryText : manageButton.confirmedSecondaryText text: manageButton.text
font: UM.Theme.getFont("medium_bold") font: UM.Theme.getFont("medium_bold")
color: UM.Theme.getColor("primary") color: UM.Theme.getColor("primary")
@ -119,8 +109,12 @@ RowLayout
} }
} }
height: UM.Theme.getSize("action_button").height
width: childrenRect.width
Loader Loader
{ {
sourceComponent: sourceComponent:
{ {
switch (manageButton.button_style) switch (manageButton.button_style)

View file

@ -257,15 +257,34 @@ Rectangle
ManageButton ManageButton
{ {
id: enableManageButton id: enableManageButton
button_style: !(installManageButton.confirmed || updateManageButton.confirmed) || enableManageButton.confirmed ? packageData.stateManageEnableButton : "hidden" visible: !(installManageButton.confirmed || updateManageButton.confirmed) || enableManageButton.confirmed
button_style: packageData.stateManageEnableButton
Layout.alignment: Qt.AlignTop Layout.alignment: Qt.AlignTop
primaryText: catalog.i18nc("@button", "Enable") busy: packageData.enableManageButton == "busy"
busyPrimaryText: catalog.i18nc("@button", "Enabling...") confirmed: packageData.enableManageButton == "confirmed"
confirmedPrimaryText: catalog.i18nc("@button", "Enabled") text: {
secondaryText: catalog.i18nc("@button", "Disable") switch (packageData.stateManageEnableButton) {
busySecondaryText: catalog.i18nc("@button", "Disabling...") case "primary":
confirmedSecondaryText: catalog.i18nc("@button", "Disabled") return catalog.i18nc("@button", "Enable");
enabled: !(installManageButton.busy || updateManageButton.busy) case "secondary":
return catalog.i18nc("@button", "Disable");
case "busy":
if (packageData.installationStatus) {
return catalog.i18nc("@button", "Enabling...");
} else {
return catalog.i18nc("@button", "Disabling...");
}
case "confirmed":
if (packageData.installationStatus) {
return catalog.i18nc("@button", "Enabled");
} else {
return catalog.i18nc("@button", "Disabled");
}
default:
return "";
}
}
enabled: !installManageButton.busy && !updateManageButton.busy
onClicked: onClicked:
{ {
@ -283,16 +302,34 @@ Rectangle
ManageButton ManageButton
{ {
id: installManageButton id: installManageButton
button_style: (root.manageableInListView || installManageButton.confirmed) && !(enableManageButton.confirmed || updateManageButton.confirmed) ? packageData.stateManageInstallButton : "hidden" visible: (root.manageableInListView || installManageButton.confirmed) && !(enableManageButton.confirmed || updateManageButton.confirmed)
button_style: packageData.stateManageInstallButton
busy: packageData.stateManageInstallButton == "busy"
confirmed: packageData.stateManageInstallButton == "confirmed"
Layout.alignment: Qt.AlignTop Layout.alignment: Qt.AlignTop
primaryText: catalog.i18nc("@button", "Install") text: {
busyPrimaryText: catalog.i18nc("@button", "Installing...") switch (packageData.stateManageInstallButton) {
confirmedPrimaryText: catalog.i18nc("@button", "Installed") case "primary":
secondaryText: catalog.i18nc("@button", "Uninstall") return catalog.i18nc("@button", "Install");
busySecondaryText: catalog.i18nc("@button", "Uninstalling...") case "secondary":
confirmedSecondaryText: catalog.i18nc("@button", "Uninstalled") return catalog.i18nc("@button", "Uninstall");
confirmedTextChoice: packageData.installationStatus case "busy":
enabled: !(enableManageButton.busy || updateManageButton.busy) if (packageData.installationStatus) {
return catalog.i18nc("@button", "Installing...");
} else {
return catalog.i18nc("@button", "Uninstalling...");
}
case "confirmed":
if (packageData.installationStatus) {
return catalog.i18nc("@button", "Installed");
} else {
return catalog.i18nc("@button", "Uninstalled");
}
default:
return "";
}
}
enabled: !enableManageButton.busy && !updateManageButton.busy
onClicked: onClicked:
{ {
@ -310,12 +347,26 @@ Rectangle
ManageButton ManageButton
{ {
id: updateManageButton id: updateManageButton
button_style: (root.manageableInListView) && (!installManageButton.confirmed || updateManageButton.confirmed) ? packageData.stateManageUpdateButton : "hidden" visible: (root.manageableInListView) && (!installManageButton.confirmed || updateManageButton.confirmed)
button_style: packageData.stateManageUpdateButton
busy: packageData.stateManageUpdateButton == "busy"
confirmed: packageData.stateManageUpdateButton == "confirmed"
Layout.alignment: Qt.AlignTop Layout.alignment: Qt.AlignTop
primaryText: catalog.i18nc("@button", "Update") enabled: !installManageButton.busy && !enableManageButton.busy
busyPrimaryText: catalog.i18nc("@button", "Updating...")
confirmedPrimaryText: catalog.i18nc("@button", "Updated") text: {
enabled: !(installManageButton.busy || enableManageButton.busy) switch (packageData.stateManageInstallButton) {
case "primary":
return catalog.i18nc("@button", "Update");
case "busy":
return catalog.i18nc("@button", "Updating...");
case "confirmed":
return catalog.i18nc("@button", "Updated");
default:
return "";
}
}
onClicked: packageData.updatePackageTriggered(packageData.packageId) onClicked: packageData.updatePackageTriggered(packageData.packageId)
} }

View file

@ -207,15 +207,34 @@ Rectangle
ManageButton ManageButton
{ {
id: enableManageButton id: enableManageButton
button_style: !(installManageButton.confirmed || updateManageButton.confirmed) || enableManageButton.confirmed ? packageData.stateManageEnableButton : "hidden" visible: !(installManageButton.confirmed || updateManageButton.confirmed) || enableManageButton.confirmed
button_style: packageData.stateManageEnableButton
Layout.alignment: Qt.AlignTop Layout.alignment: Qt.AlignTop
primaryText: catalog.i18nc("@button", "Enable") busy: packageData.enableManageButton == "busy"
busyPrimaryText: catalog.i18nc("@button", "Enabling...") confirmed: packageData.enableManageButton == "confirmed"
confirmedPrimaryText: catalog.i18nc("@button", "Enabled") text: {
secondaryText: catalog.i18nc("@button", "Disable") switch (packageData.stateManageEnableButton) {
busySecondaryText: catalog.i18nc("@button", "Disabling...") case "primary":
confirmedSecondaryText: catalog.i18nc("@button", "Disabled") return catalog.i18nc("@button", "Enable");
enabled: !(installManageButton.busy || updateManageButton.busy) case "secondary":
return catalog.i18nc("@button", "Disable");
case "busy":
if (packageData.installationStatus) {
return catalog.i18nc("@button", "Enabling...");
} else {
return catalog.i18nc("@button", "Disabling...");
}
case "confirmed":
if (packageData.installationStatus) {
return catalog.i18nc("@button", "Enabled");
} else {
return catalog.i18nc("@button", "Disabled");
}
default:
return "";
}
}
enabled: !installManageButton.busy && !updateManageButton.busy
onClicked: onClicked:
{ {
@ -233,16 +252,34 @@ Rectangle
ManageButton ManageButton
{ {
id: installManageButton id: installManageButton
button_style: !(enableManageButton.confirmed || updateManageButton.confirmed) ? packageData.stateManageInstallButton : "hidden" visible: !(enableManageButton.confirmed || updateManageButton.confirmed)
button_style: packageData.stateManageInstallButton
busy: packageData.stateManageInstallButton == "busy"
confirmed: packageData.stateManageInstallButton == "confirmed"
Layout.alignment: Qt.AlignTop Layout.alignment: Qt.AlignTop
primaryText: catalog.i18nc("@button", "Install") text: {
busyPrimaryText: catalog.i18nc("@button", "Installing...") switch (packageData.stateManageInstallButton) {
confirmedPrimaryText: catalog.i18nc("@button", "Installed") case "primary":
secondaryText: catalog.i18nc("@button", "Uninstall") return catalog.i18nc("@button", "Install");
busySecondaryText: catalog.i18nc("@button", "Uninstalling...") case "secondary":
confirmedSecondaryText: catalog.i18nc("@button", "Uninstalled") return catalog.i18nc("@button", "Uninstall");
confirmedTextChoice: packageData.isRecentlyInstalled case "busy":
enabled: !(enableManageButton.busy || updateManageButton.busy) if (packageData.installationStatus) {
return catalog.i18nc("@button", "Installing...");
} else {
return catalog.i18nc("@button", "Uninstalling...");
}
case "confirmed":
if (packageData.installationStatus) {
return catalog.i18nc("@button", "Installed");
} else {
return catalog.i18nc("@button", "Uninstalled");
}
default:
return "";
}
}
enabled: !enableManageButton.busy && !updateManageButton.busy
onClicked: onClicked:
{ {
@ -260,12 +297,26 @@ Rectangle
ManageButton ManageButton
{ {
id: updateManageButton id: updateManageButton
button_style: !installManageButton.confirmed || updateManageButton.confirmed ? packageData.stateManageUpdateButton : "hidden" visible: !installManageButton.confirmed || updateManageButton.confirmed
button_style: packageData.stateManageUpdateButton
busy: packageData.stateManageUpdateButton == "busy"
confirmed: packageData.stateManageUpdateButton == "confirmed"
Layout.alignment: Qt.AlignTop Layout.alignment: Qt.AlignTop
primaryText: catalog.i18nc("@button", "Update") enabled: !installManageButton.busy && !enableManageButton.busy
busyPrimaryText: catalog.i18nc("@button", "Updating...")
confirmedPrimaryText: catalog.i18nc("@button", "Updated") text: {
enabled: !(installManageButton.busy || enableManageButton.busy) switch (packageData.stateManageInstallButton) {
case "primary":
return catalog.i18nc("@button", "Update");
case "busy":
return catalog.i18nc("@button", "Updating...");
case "confirmed":
return catalog.i18nc("@button", "Updated");
default:
return "";
}
}
onClicked: packageData.updatePackageTriggered(packageData.packageId) onClicked: packageData.updatePackageTriggered(packageData.packageId)
} }