289 lines
9.4 KiB
QML
289 lines
9.4 KiB
QML
|
import QtQuick 2.13
|
||
|
import QtQuick.Layouts 1.12
|
||
|
import QtQuick.Controls 2.13
|
||
|
|
||
|
import StatusQ.Core 0.1
|
||
|
import StatusQ.Core.Theme 0.1
|
||
|
import StatusQ.Controls 0.1
|
||
|
|
||
|
import utils 1.0
|
||
|
|
||
|
import "../stores"
|
||
|
|
||
|
Item {
|
||
|
id: root
|
||
|
|
||
|
property StartupStore startupStore
|
||
|
|
||
|
Item {
|
||
|
anchors.top: parent.top
|
||
|
anchors.bottom: footerWrapper.top
|
||
|
anchors.left: parent.left
|
||
|
anchors.right: parent.right
|
||
|
|
||
|
ColumnLayout {
|
||
|
anchors.centerIn: parent
|
||
|
spacing: Style.current.padding
|
||
|
|
||
|
Image {
|
||
|
id: image
|
||
|
Layout.alignment: Qt.AlignHCenter
|
||
|
Layout.preferredHeight: sourceSize.height
|
||
|
Layout.preferredWidth: sourceSize.width
|
||
|
fillMode: Image.PreserveAspectFit
|
||
|
antialiasing: true
|
||
|
mipmap: true
|
||
|
}
|
||
|
|
||
|
StatusBaseText {
|
||
|
id: title
|
||
|
Layout.alignment: Qt.AlignHCenter
|
||
|
font.pixelSize: Constants.keycard.general.fontSize1
|
||
|
font.weight: Font.Bold
|
||
|
}
|
||
|
|
||
|
StatusBaseText {
|
||
|
id: info
|
||
|
Layout.alignment: Qt.AlignHCenter
|
||
|
font.pixelSize: Constants.keycard.general.fontSize3
|
||
|
wrapMode: Text.WordWrap
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
Item {
|
||
|
id: footerWrapper
|
||
|
anchors.bottom: parent.bottom
|
||
|
anchors.left: parent.left
|
||
|
anchors.right: parent.right
|
||
|
height: Constants.keycard.general.footerWrapperHeight
|
||
|
|
||
|
ColumnLayout {
|
||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||
|
spacing: Style.current.bigPadding
|
||
|
|
||
|
StatusButton {
|
||
|
id: button
|
||
|
visible: text.length > 0
|
||
|
Layout.alignment: Qt.AlignHCenter
|
||
|
focus: true
|
||
|
onClicked: {
|
||
|
root.startupStore.doPrimaryAction()
|
||
|
}
|
||
|
}
|
||
|
|
||
|
StatusBaseText {
|
||
|
id: link
|
||
|
visible: text.length > 0
|
||
|
Layout.alignment: Qt.AlignHCenter
|
||
|
font.pixelSize: Constants.keycard.general.buttonFontSize
|
||
|
MouseArea {
|
||
|
anchors.fill: parent
|
||
|
cursorShape: Qt.PointingHandCursor
|
||
|
hoverEnabled: true
|
||
|
onEntered: {
|
||
|
parent.font.underline = true
|
||
|
}
|
||
|
onExited: {
|
||
|
parent.font.underline = false
|
||
|
}
|
||
|
onClicked: {
|
||
|
root.startupStore.doSecondaryAction()
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
states: [
|
||
|
State {
|
||
|
name: Constants.startupState.keycardNotEmpty
|
||
|
when: root.startupStore.currentStartupState.stateType === Constants.startupState.keycardNotEmpty
|
||
|
PropertyChanges {
|
||
|
target: image
|
||
|
source: Style.svg("keycard/card3@2x")
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: title
|
||
|
text: qsTr("This Keycard already stores keys")
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: info
|
||
|
text: qsTr("To generate new keys, you will need to perform a factory reset first")
|
||
|
color: Theme.palette.directColor1
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: button
|
||
|
text: qsTr("Factory reset")
|
||
|
type: StatusBaseButton.Type.Normal
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: link
|
||
|
text: qsTr("Insert another Keycard")
|
||
|
color: Theme.palette.primaryColor1
|
||
|
}
|
||
|
},
|
||
|
State {
|
||
|
name: Constants.startupState.keycardEmpty
|
||
|
when: root.startupStore.currentStartupState.stateType === Constants.startupState.keycardEmpty
|
||
|
PropertyChanges {
|
||
|
target: image
|
||
|
source: Style.svg("keycard/card-error3@2x")
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: title
|
||
|
text: ""
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: info
|
||
|
text: qsTr("The keycard is empty")
|
||
|
color: Theme.palette.dangerColor1
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: button
|
||
|
text: qsTr("Generate new keys for this Keycard")
|
||
|
type: StatusBaseButton.Type.Normal
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: link
|
||
|
text: ""
|
||
|
}
|
||
|
},
|
||
|
State {
|
||
|
name: Constants.startupState.keycardLocked
|
||
|
when: root.startupStore.currentStartupState.stateType === Constants.startupState.keycardLocked
|
||
|
PropertyChanges {
|
||
|
target: image
|
||
|
source: Style.svg("keycard/card-error3@2x")
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: title
|
||
|
text: qsTr("Keycard locked and already stores keys")
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: info
|
||
|
text: qsTr("The Keycard you have inserted is locked, you will need to factory reset it before proceeding")
|
||
|
color: Theme.palette.directColor1
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: button
|
||
|
text: qsTr("Factory reset")
|
||
|
type: StatusBaseButton.Type.Normal
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: link
|
||
|
text: qsTr("Insert another Keycard")
|
||
|
color: Theme.palette.primaryColor1
|
||
|
}
|
||
|
},
|
||
|
State {
|
||
|
name: Constants.startupState.keycardMaxPairingSlotsReached
|
||
|
when: root.startupStore.currentStartupState.stateType === Constants.startupState.keycardMaxPairingSlotsReached
|
||
|
PropertyChanges {
|
||
|
target: image
|
||
|
source: Style.svg("keycard/card-error3@2x")
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: title
|
||
|
text: qsTr("Keycard locked")
|
||
|
color: Theme.palette.dangerColor1
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: info
|
||
|
text: qsTr("Max pairing slots reached for this keycard")
|
||
|
color: Theme.palette.dangerColor1
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: button
|
||
|
text: qsTr("Factory reset")
|
||
|
type: StatusBaseButton.Type.Normal
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: link
|
||
|
text: qsTr("Insert another Keycard")
|
||
|
color: Theme.palette.primaryColor1
|
||
|
}
|
||
|
},
|
||
|
State {
|
||
|
name: Constants.startupState.keycardMaxPukRetriesReached
|
||
|
when: root.startupStore.currentStartupState.stateType === Constants.startupState.keycardMaxPukRetriesReached
|
||
|
PropertyChanges {
|
||
|
target: image
|
||
|
source: Style.svg("keycard/card-error3@2x")
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: title
|
||
|
text: qsTr("Keycard locked")
|
||
|
color: Theme.palette.dangerColor1
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: info
|
||
|
text: qsTr("Max PUK retries reached for this keycard")
|
||
|
color: Theme.palette.dangerColor1
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: button
|
||
|
text: qsTr("Factory reset")
|
||
|
type: StatusBaseButton.Type.Normal
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: link
|
||
|
text: qsTr("Insert another Keycard")
|
||
|
color: Theme.palette.primaryColor1
|
||
|
}
|
||
|
},
|
||
|
State {
|
||
|
name: Constants.startupState.keycardMaxPinRetriesReached
|
||
|
when: root.startupStore.currentStartupState.stateType === Constants.startupState.keycardMaxPinRetriesReached
|
||
|
PropertyChanges {
|
||
|
target: image
|
||
|
source: Style.svg("keycard/card-error3@2x")
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: title
|
||
|
text: ""
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: info
|
||
|
text: qsTr("Keycard locked")
|
||
|
color: Theme.palette.dangerColor1
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: button
|
||
|
text: qsTr("Recover your Keycard")
|
||
|
type: StatusBaseButton.Type.Danger
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: link
|
||
|
text: ""
|
||
|
}
|
||
|
},
|
||
|
State {
|
||
|
name: Constants.startupState.keycardRecover
|
||
|
when: root.startupStore.currentStartupState.stateType === Constants.startupState.keycardRecover
|
||
|
PropertyChanges {
|
||
|
target: image
|
||
|
source: Style.svg("keycard/card-error3@2x")
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: title
|
||
|
text: qsTr("Recover your Keycard")
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: info
|
||
|
text: ""
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: button
|
||
|
text: qsTr("Recover with seed phrase")
|
||
|
type: StatusBaseButton.Type.Danger
|
||
|
}
|
||
|
PropertyChanges {
|
||
|
target: link
|
||
|
text: qsTr("Recover with PUK")
|
||
|
color: Theme.palette.dangerColor1
|
||
|
}
|
||
|
}
|
||
|
]
|
||
|
}
|