151 lines
5.1 KiB
QML
151 lines
5.1 KiB
QML
import QtQuick 2.15
|
||
import QtQuick.Controls 2.15
|
||
import QtQuick.Layouts 1.15
|
||
import QtQml.Models 2.14
|
||
|
||
import StatusQ.Controls 0.1
|
||
import StatusQ.Core 0.1
|
||
import StatusQ.Popups.Dialog 0.1
|
||
import StatusQ.Core.Theme 0.1
|
||
|
||
import utils 1.0
|
||
|
||
StatusDialog {
|
||
id: root
|
||
|
||
property string communityName: ""
|
||
property string privateKey: ""
|
||
|
||
signal deletePrivateKey
|
||
|
||
width: 640
|
||
title: qsTr("Move %1 community control node").arg(root.communityName)
|
||
|
||
closePolicy: Popup.NoAutoClose
|
||
|
||
component Paragraph: StatusBaseText {
|
||
Layout.fillWidth: true
|
||
Layout.minimumHeight: 40
|
||
font.pixelSize: Style.current.primaryTextFontSize
|
||
lineHeightMode: Text.FixedHeight
|
||
lineHeight: 22
|
||
wrapMode: Text.Wrap
|
||
verticalAlignment: Text.AlignVCenter
|
||
}
|
||
|
||
component CopyButton: StatusButton {
|
||
id: copyButton
|
||
borderColor: textColor
|
||
disabledTextColor: textColor
|
||
disabledColor: normalColor
|
||
text: qsTr("Copy")
|
||
size: StatusButton.Size.Tiny
|
||
states: [
|
||
State {
|
||
name: "success"
|
||
PropertyChanges {
|
||
target: copyButton
|
||
text: ""
|
||
icon.name: "checkmark"
|
||
normalColor: Theme.palette.successColor2
|
||
textColor: Theme.palette.successColor1
|
||
enabled: false
|
||
}
|
||
}
|
||
]
|
||
|
||
onClicked: {
|
||
width = width // break the biding to prevent the button from shrinking
|
||
copyButton.state = "success"
|
||
Backpressure.debounce(root, 2000, function () {
|
||
copyButton.state = ""
|
||
})()
|
||
}
|
||
}
|
||
|
||
StatusScrollView {
|
||
id: scroll
|
||
anchors.fill: parent
|
||
contentWidth: availableWidth
|
||
|
||
ColumnLayout {
|
||
id: layout
|
||
width: scroll.availableWidth
|
||
spacing: 20
|
||
Paragraph {
|
||
text: qsTr("For a Status Community to function, it needs to have a single control node running. This installation of Status Desktop is currently the %1 community control node. To move the %1 control node to another device: ").arg(root.communityName)
|
||
}
|
||
ColumnLayout {
|
||
Layout.fillWidth: true
|
||
spacing: 4
|
||
Paragraph {
|
||
text: qsTr("1. Copy your Community’s private key:")
|
||
}
|
||
StatusBaseInput {
|
||
id: privateKeyTextArea
|
||
Layout.fillWidth: true
|
||
multiline: true
|
||
edit.readOnly: true
|
||
text: root.privateKey
|
||
rightComponent: CopyButton {
|
||
onClicked: {
|
||
privateKeyTextArea.edit.selectAll()
|
||
privateKeyTextArea.edit.copy()
|
||
privateKeyTextArea.edit.deselect()
|
||
}
|
||
}
|
||
}
|
||
Paragraph {
|
||
text: qsTr("2. Stop using this computer as a control node")
|
||
}
|
||
Paragraph {
|
||
text: qsTr("3. Import this Community via private key on another installation of Status desktop")
|
||
}
|
||
}
|
||
ColumnLayout {
|
||
Layout.fillWidth: true
|
||
Layout.fillHeight: true
|
||
StatusDialogDivider { Layout.fillWidth: true }
|
||
Item { Layout.fillHeight: true }
|
||
Paragraph {
|
||
text: qsTr("I acknowledge that...")
|
||
}
|
||
|
||
StatusCheckBox {
|
||
id: agreeToStopControl
|
||
Layout.fillWidth: true
|
||
font.pixelSize: Style.current.primaryTextFontSize
|
||
text: qsTr("%1 will stop working without a control node").arg(root.communityName)
|
||
}
|
||
StatusCheckBox {
|
||
id: agreeToSavePrivateKey
|
||
Layout.fillWidth: true
|
||
Layout.minimumHeight: 40
|
||
font.pixelSize: Style.current.primaryTextFontSize
|
||
text: qsTr("I have saved the %1 private key").arg(root.communityName)
|
||
}
|
||
StatusCheckBox {
|
||
id: agreeToDeletePrivateKey
|
||
Layout.fillWidth: true
|
||
Layout.minimumHeight: 40
|
||
font.pixelSize: Style.current.primaryTextFontSize
|
||
text: qsTr("If I lose the private key, %1 will be unrecoverable").arg(root.communityName)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
footer: StatusDialogFooter {
|
||
rightButtons: ObjectModel {
|
||
StatusButton {
|
||
text: qsTr("Delete private key and stop control node")
|
||
enabled: agreeToStopControl.checked && agreeToSavePrivateKey.checked && agreeToDeletePrivateKey.checked
|
||
type: StatusBaseButton.Type.Danger
|
||
onClicked: {
|
||
root.deletePrivateKey()
|
||
root.close()
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|