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,226 +11,131 @@ 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)
Cura.PrimaryButton
property Component primaryButton: Component
{
id: primaryButton
enabled: manageButton.enabled
onClicked:
Cura.PrimaryButton
{
busyMessage.text = manageButton.busyPrimaryText
confirmedMessage.text = manageButton.confirmedPrimaryText
manageButton.clicked(true)
id: primaryButton
enabled: manageButton.enabled
text: manageButton.primaryText
onClicked:
{
manageButton.confirmedTextChoice = true
manageButton.clicked(true)
}
}
}
Cura.SecondaryButton
property Component secondaryButton: Component
{
id: secondaryButton
enabled: manageButton.enabled
onClicked:
Cura.SecondaryButton
{
busyMessage.text = manageButton.busySecondaryText
confirmedMessage.text = manageButton.confirmedSecondaryText
manageButton.clicked(false)
id: secondaryButton
enabled: manageButton.enabled
text: manageButton.secondaryText
onClicked:
{
manageButton.confirmedTextChoice = false
manageButton.clicked(false)
}
}
}
Item
property Component busyButton: Component
{
id: busyMessage
property alias text: busyMessageText.text
height: UM.Theme.getSize("action_button").height
width: childrenRect.width
UM.RecolorImage
Item
{
id: busyIndicator
width: height
anchors.left: parent.left
anchors.top: parent.top
anchors.topMargin: UM.Theme.getSize("narrow_margin").height
anchors.bottom: parent.bottom
anchors.bottomMargin: anchors.topMargin
id: busyMessage
height: UM.Theme.getSize("action_button").height
width: childrenRect.width
source: UM.Theme.getIcon("Spinner")
color: UM.Theme.getColor("primary")
RotationAnimator
UM.RecolorImage
{
target: busyIndicator
running: busyMessage.visible
from: 0
to: 360
loops: Animation.Infinite
duration: 2500
}
}
Label
{
id: busyMessageText
anchors.left: busyIndicator.right
anchors.leftMargin: UM.Theme.getSize("narrow_margin").width
anchors.verticalCenter: parent.verticalCenter
id: busyIndicator
width: height
anchors.left: parent.left
anchors.top: parent.top
anchors.topMargin: UM.Theme.getSize("narrow_margin").height
anchors.bottom: parent.bottom
anchors.bottomMargin: anchors.topMargin
font: UM.Theme.getFont("medium_bold")
color: UM.Theme.getColor("primary")
source: UM.Theme.getIcon("Spinner")
color: UM.Theme.getColor("primary")
RotationAnimator
{
target: busyIndicator
running: busyMessage.visible
from: 0
to: 360
loops: Animation.Infinite
duration: 2500
}
}
Label
{
id: busyMessageText
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")
}
}
}
Item
property Component confirmButton: Component
{
id: confirmedMessage
property alias text: confirmedMessageText.text
Item
{
height: UM.Theme.getSize("action_button").height
width: childrenRect.width
height: UM.Theme.getSize("action_button").height
width: childrenRect.width
Label
{
id: confirmedMessageText
anchors.verticalCenter: parent.verticalCenter
font: UM.Theme.getFont("medium_bold")
color: UM.Theme.getColor("primary")
}
}
states:
[
State
{
name: "primary"
PropertyChanges
Label
{
target: primaryButton
visible: true
}
PropertyChanges
{
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
id: confirmedMessageText
anchors.verticalCenter: parent.verticalCenter
text: manageButton.confirmedTextChoice ? manageButton.confirmedPrimaryText : manageButton.confirmedSecondaryText
font: UM.Theme.getFont("medium_bold")
color: UM.Theme.getColor("primary")
}
}
]
}
Loader
{
sourceComponent:
{
switch (manageButton.button_style)
{
case "primary":
return manageButton.primaryButton;
case "secondary":
return manageButton.secondaryButton;
case "busy":
return manageButton.busyButton;
case "confirmed":
return manageButton.confirmButton;
default:
return;
}
}
}
}