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

View file

@ -257,15 +257,34 @@ Rectangle
ManageButton
{
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
primaryText: catalog.i18nc("@button", "Enable")
busyPrimaryText: catalog.i18nc("@button", "Enabling...")
confirmedPrimaryText: catalog.i18nc("@button", "Enabled")
secondaryText: catalog.i18nc("@button", "Disable")
busySecondaryText: catalog.i18nc("@button", "Disabling...")
confirmedSecondaryText: catalog.i18nc("@button", "Disabled")
enabled: !(installManageButton.busy || updateManageButton.busy)
busy: packageData.enableManageButton == "busy"
confirmed: packageData.enableManageButton == "confirmed"
text: {
switch (packageData.stateManageEnableButton) {
case "primary":
return catalog.i18nc("@button", "Enable");
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:
{
@ -283,16 +302,34 @@ Rectangle
ManageButton
{
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
primaryText: catalog.i18nc("@button", "Install")
busyPrimaryText: catalog.i18nc("@button", "Installing...")
confirmedPrimaryText: catalog.i18nc("@button", "Installed")
secondaryText: catalog.i18nc("@button", "Uninstall")
busySecondaryText: catalog.i18nc("@button", "Uninstalling...")
confirmedSecondaryText: catalog.i18nc("@button", "Uninstalled")
confirmedTextChoice: packageData.installationStatus
enabled: !(enableManageButton.busy || updateManageButton.busy)
text: {
switch (packageData.stateManageInstallButton) {
case "primary":
return catalog.i18nc("@button", "Install");
case "secondary":
return catalog.i18nc("@button", "Uninstall");
case "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:
{
@ -310,12 +347,26 @@ Rectangle
ManageButton
{
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
primaryText: catalog.i18nc("@button", "Update")
busyPrimaryText: catalog.i18nc("@button", "Updating...")
confirmedPrimaryText: catalog.i18nc("@button", "Updated")
enabled: !(installManageButton.busy || enableManageButton.busy)
enabled: !installManageButton.busy && !enableManageButton.busy
text: {
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)
}

View file

@ -207,15 +207,34 @@ Rectangle
ManageButton
{
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
primaryText: catalog.i18nc("@button", "Enable")
busyPrimaryText: catalog.i18nc("@button", "Enabling...")
confirmedPrimaryText: catalog.i18nc("@button", "Enabled")
secondaryText: catalog.i18nc("@button", "Disable")
busySecondaryText: catalog.i18nc("@button", "Disabling...")
confirmedSecondaryText: catalog.i18nc("@button", "Disabled")
enabled: !(installManageButton.busy || updateManageButton.busy)
busy: packageData.enableManageButton == "busy"
confirmed: packageData.enableManageButton == "confirmed"
text: {
switch (packageData.stateManageEnableButton) {
case "primary":
return catalog.i18nc("@button", "Enable");
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:
{
@ -233,16 +252,34 @@ Rectangle
ManageButton
{
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
primaryText: catalog.i18nc("@button", "Install")
busyPrimaryText: catalog.i18nc("@button", "Installing...")
confirmedPrimaryText: catalog.i18nc("@button", "Installed")
secondaryText: catalog.i18nc("@button", "Uninstall")
busySecondaryText: catalog.i18nc("@button", "Uninstalling...")
confirmedSecondaryText: catalog.i18nc("@button", "Uninstalled")
confirmedTextChoice: packageData.isRecentlyInstalled
enabled: !(enableManageButton.busy || updateManageButton.busy)
text: {
switch (packageData.stateManageInstallButton) {
case "primary":
return catalog.i18nc("@button", "Install");
case "secondary":
return catalog.i18nc("@button", "Uninstall");
case "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:
{
@ -260,12 +297,26 @@ Rectangle
ManageButton
{
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
primaryText: catalog.i18nc("@button", "Update")
busyPrimaryText: catalog.i18nc("@button", "Updating...")
confirmedPrimaryText: catalog.i18nc("@button", "Updated")
enabled: !(installManageButton.busy || enableManageButton.busy)
enabled: !installManageButton.busy && !enableManageButton.busy
text: {
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)
}