Display different types of manage buttons through Loader.sourceComponent

cura 8734
This commit is contained in:
casper 2021-12-08 14:46:29 +01:00
parent fb92f1f49a
commit 4a436b5598
3 changed files with 109 additions and 211 deletions

View file

@ -11,48 +11,54 @@ import Cura 1.6 as Cura
RowLayout
{
id: manageButton
property alias primaryText: primaryButton.text
property alias secondaryText: secondaryButton.text
property string busyPrimaryText: busyMessageText.text
property string busySecondaryText: busyMessageText.text
property string confirmedPrimaryText: confirmedMessageText.text
property string confirmedSecondaryText: confirmedMessageText.text
property bool busy
property bool confirmed
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
signal clicked(bool primary_action)
property Component primaryButton: Component
{
Cura.PrimaryButton
{
id: primaryButton
enabled: manageButton.enabled
text: manageButton.primaryText
onClicked:
{
busyMessage.text = manageButton.busyPrimaryText
confirmedMessage.text = manageButton.confirmedPrimaryText
manageButton.confirmedTextChoice = true
manageButton.clicked(true)
}
}
}
property Component secondaryButton: Component
{
Cura.SecondaryButton
{
id: secondaryButton
enabled: manageButton.enabled
text: manageButton.secondaryText
onClicked:
{
busyMessage.text = manageButton.busySecondaryText
confirmedMessage.text = manageButton.confirmedSecondaryText
manageButton.confirmedTextChoice = false
manageButton.clicked(false)
}
}
}
property Component busyButton: Component
{
Item
{
id: busyMessage
property alias text: busyMessageText.text
height: UM.Theme.getSize("action_button").height
width: childrenRect.width
@ -85,16 +91,18 @@ RowLayout
anchors.left: busyIndicator.right
anchors.leftMargin: UM.Theme.getSize("narrow_margin").width
anchors.verticalCenter: parent.verticalCenter
text: manageButton.busyMessageText
font: UM.Theme.getFont("medium_bold")
color: UM.Theme.getColor("primary")
}
}
}
property Component confirmButton: Component
{
Item
{
id: confirmedMessage
property alias text: confirmedMessageText.text
height: UM.Theme.getSize("action_button").height
width: childrenRect.width
@ -103,134 +111,31 @@ RowLayout
{
id: confirmedMessageText
anchors.verticalCenter: parent.verticalCenter
text: manageButton.confirmedTextChoice ? manageButton.confirmedPrimaryText : manageButton.confirmedSecondaryText
font: UM.Theme.getFont("medium_bold")
color: UM.Theme.getColor("primary")
}
}
}
states:
[
State
Loader
{
name: "primary"
PropertyChanges
sourceComponent:
{
target: primaryButton
visible: true
}
PropertyChanges
switch (manageButton.button_style)
{
target: secondaryButton
visible: false
}
PropertyChanges
{
target: busyMessage
visible: false
}
PropertyChanges
{
target: confirmedMessage
visible: false
}
},
State
{
name: "secondary"
PropertyChanges
{
target: primaryButton
visible: false
}
PropertyChanges
{
target: secondaryButton
visible: true
}
PropertyChanges
{
target: busyMessage
visible: false
}
PropertyChanges
{
target: confirmedMessage
visible: false
}
},
State
{
name: "hidden"
PropertyChanges
{
target: primaryButton
visible: false
}
PropertyChanges
{
target: secondaryButton
visible: false
}
PropertyChanges
{
target: busyMessage
visible: false
}
PropertyChanges
{
target: confirmedMessage
visible: false
}
},
State
{
name: "busy"
PropertyChanges
{
target: primaryButton
visible: false
}
PropertyChanges
{
target: secondaryButton
visible: false
}
PropertyChanges
{
target: busyMessage
visible: true
}
PropertyChanges
{
target: confirmedMessage
visible: false
}
},
State
{
name: "confirmed"
PropertyChanges
{
target: primaryButton
visible: false
}
PropertyChanges
{
target: secondaryButton
visible: false
}
PropertyChanges
{
target: busyMessage
visible: false
}
PropertyChanges
{
target: confirmedMessage
visible: true
text: manageButton.confirmedTextChoice ? manageButton.confirmedPrimaryText : manageButton.confirmedSecondaryText
case "primary":
return manageButton.primaryButton;
case "secondary":
return manageButton.secondaryButton;
case "busy":
return manageButton.busyButton;
case "confirmed":
return manageButton.confirmButton;
default:
return;
}
}
}
]
}

View file

@ -29,6 +29,7 @@ Rectangle
width: parent.width
height: UM.Theme.getSize("card").height
// card icon
Image
{
id: packageItem
@ -44,6 +45,7 @@ Rectangle
source: packageData.iconUrl != "" ? packageData.iconUrl : "../images/placeholder.svg"
}
//
ColumnLayout
{
anchors
@ -142,6 +144,7 @@ Rectangle
}
}
// description
Item
{
id: shortDescription
@ -222,6 +225,7 @@ Rectangle
spacing: UM.Theme.getSize("narrow_margin").width
// label "By"
Label
{
id: authorBy
@ -232,6 +236,7 @@ Rectangle
color: UM.Theme.getColor("text")
}
// clickable author name
Cura.TertiaryButton
{
Layout.fillWidth: true
@ -252,9 +257,7 @@ Rectangle
ManageButton
{
id: enableManageButton
state: !(installManageButton.confirmed || updateManageButton.confirmed) || enableManageButton.confirmed ? packageData.stateManageEnableButton : "hidden"
busy: packageData.enableManageButton == "busy"
confirmed: packageData.enableManageButton == "confirmed"
button_style: !(installManageButton.confirmed || updateManageButton.confirmed) || enableManageButton.confirmed ? packageData.stateManageEnableButton : "hidden"
Layout.alignment: Qt.AlignTop
primaryText: catalog.i18nc("@button", "Enable")
busyPrimaryText: catalog.i18nc("@button", "Enabling...")
@ -280,9 +283,7 @@ Rectangle
ManageButton
{
id: installManageButton
state: (root.manageableInListView || installManageButton.confirmed) && !(enableManageButton.confirmed || updateManageButton.confirmed) ? packageData.stateManageInstallButton : "hidden"
busy: packageData.stateManageInstallButton == "busy"
confirmed: packageData.stateManageInstallButton == "confirmed"
button_style: (root.manageableInListView || installManageButton.confirmed) && !(enableManageButton.confirmed || updateManageButton.confirmed) ? packageData.stateManageInstallButton : "hidden"
Layout.alignment: Qt.AlignTop
primaryText: catalog.i18nc("@button", "Install")
busyPrimaryText: catalog.i18nc("@button", "Installing...")
@ -309,9 +310,7 @@ Rectangle
ManageButton
{
id: updateManageButton
state: (root.manageableInListView) && (!installManageButton.confirmed || updateManageButton.confirmed) ? packageData.stateManageUpdateButton : "hidden"
busy: packageData.stateManageUpdateButton == "busy"
confirmed: packageData.stateManageUpdateButton == "confirmed"
button_style: (root.manageableInListView) && (!installManageButton.confirmed || updateManageButton.confirmed) ? packageData.stateManageUpdateButton : "hidden"
Layout.alignment: Qt.AlignTop
primaryText: catalog.i18nc("@button", "Update")
busyPrimaryText: catalog.i18nc("@button", "Updating...")

View file

@ -207,9 +207,7 @@ Rectangle
ManageButton
{
id: enableManageButton
state: !(installManageButton.confirmed || updateManageButton.confirmed) || enableManageButton.confirmed ? packageData.stateManageEnableButton : "hidden"
busy: packageData.enableManageButton == "busy"
confirmed: packageData.enableManageButton == "confirmed"
button_style: !(installManageButton.confirmed || updateManageButton.confirmed) || enableManageButton.confirmed ? packageData.stateManageEnableButton : "hidden"
Layout.alignment: Qt.AlignTop
primaryText: catalog.i18nc("@button", "Enable")
busyPrimaryText: catalog.i18nc("@button", "Enabling...")
@ -235,9 +233,7 @@ Rectangle
ManageButton
{
id: installManageButton
state: !(enableManageButton.confirmed || updateManageButton.confirmed) ? packageData.stateManageInstallButton : "hidden"
busy: packageData.stateManageInstallButton == "busy"
confirmed: packageData.stateManageInstallButton == "confirmed"
button_style: !(enableManageButton.confirmed || updateManageButton.confirmed) ? packageData.stateManageInstallButton : "hidden"
Layout.alignment: Qt.AlignTop
primaryText: catalog.i18nc("@button", "Install")
busyPrimaryText: catalog.i18nc("@button", "Installing...")
@ -264,9 +260,7 @@ Rectangle
ManageButton
{
id: updateManageButton
state: !installManageButton.confirmed || updateManageButton.confirmed ? packageData.stateManageUpdateButton : "hidden"
busy: packageData.stateManageUpdateButton == "busy"
confirmed: packageData.stateManageUpdateButton == "confirmed"
button_style: !installManageButton.confirmed || updateManageButton.confirmed ? packageData.stateManageUpdateButton : "hidden"
Layout.alignment: Qt.AlignTop
primaryText: catalog.i18nc("@button", "Update")
busyPrimaryText: catalog.i18nc("@button", "Updating...")