status-desktop/ui/app/AppLayouts/Profile/controls/WalletKeyPairDelegate.qml

127 lines
5.1 KiB
QML
Raw Normal View History

import QtQuick 2.14
import QtQuick.Layouts 1.14
import StatusQ.Controls 0.1
import StatusQ.Components 0.1
import StatusQ.Core 0.1
import StatusQ.Core.Theme 0.1
import StatusQ.Popups 0.1
import utils 1.0
import AppLayouts.Profile.popups 1.0
Rectangle {
id: root
property var keyPair
property bool hasPairedDevices
property var getNetworkShortNames: function(chainIds){}
property string userProfilePublicKey
property bool includeWatchOnlyAccount
signal goToAccountView(var account)
signal toggleIncludeWatchOnlyAccount()
signal runExportQrFlow()
signal runImportViaQrFlow()
signal runImportViaSeedPhraseFlow()
signal runImportViaPrivateKeyFlow()
signal runRenameKeypairFlow()
signal runRemoveKeypairFlow()
QtObject {
id: d
readonly property var relatedAccounts: !!root.keyPair? root.keyPair.accounts : {}
readonly property bool isWatchOnly: !!root.keyPair && root.keyPair.pairType === Constants.keypair.type.watchOnly
readonly property bool isProfileKeypair: !!root.keyPair && root.keyPair.pairType === Constants.keypair.type.profile
}
implicitHeight: layout.height
color: Theme.palette.baseColor4
radius: 8
ColumnLayout {
id: layout
anchors.horizontalCenter: parent.horizontalCenter
width: parent.width
StatusListItem {
Layout.fillWidth: true
title: !!root.keyPair? d.isWatchOnly ? qsTr("Watched addresses") : root.keyPair.name : ""
statusListItemSubTitle.textFormat: Qt.RichText
titleTextIcon: !!root.keyPair && keyPair.migratedToKeycard ? "keycard": ""
subTitle: Utils.getKeypairLocation(root.keyPair)
statusListItemSubTitle.color: Utils.getKeypairLocationColor(root.keyPair)
color: Theme.palette.transparent
ringSettings {
ringSpecModel: d.isProfileKeypair ? Utils.getColorHashAsJson(root.userProfilePublicKey) : []
ringPxSize: Math.max(asset.width / 24.0)
}
asset {
width: !!root.keyPair && keyPair.icon? Style.current.bigPadding : 40
height: !!root.keyPair && keyPair.icon? Style.current.bigPadding : 40
name: !!root.keyPair? !!root.keyPair.image? root.keyPair.image : root.keyPair.icon : ""
isImage: !!root.keyPair && !!keyPair.image
color: d.isProfileKeypair ? Utils.colorForPubkey(root.userProfilePublicKey) : Theme.palette.primaryColor1
letterSize: Math.max(4, asset.width / 2.4)
charactersLen: 2
isLetterIdenticon: !!root.keyPair && !keyPair.icon && !asset.name.toString()
}
components: [
StatusFlatRoundButton {
icon.name: "more"
icon.color: Theme.palette.directColor1
visible: !d.isWatchOnly
highlighted: menuLoader.item && menuLoader.item.opened
onClicked: {
menuLoader.active = true
menuLoader.item.popup(0, height)
}
Loader {
id: menuLoader
active: false
sourceComponent: WalletKeypairAccountMenu {
onClosed: {
menuLoader.active = false
}
keyPair: root.keyPair
hasPairedDevices: root.hasPairedDevices
onRunExportQrFlow: root.runExportQrFlow()
onRunImportViaQrFlow: root.runImportViaQrFlow()
onRunImportViaSeedPhraseFlow: root.runImportViaSeedPhraseFlow()
onRunImportViaPrivateKeyFlow: root.runImportViaPrivateKeyFlow()
onRunRenameKeypairFlow: root.runRenameKeypairFlow()
onRunRemoveKeypairFlow: root.runRemoveKeypairFlow()
}
}
},
StatusBaseText {
anchors.verticalCenter: parent.verticalCenter
text: qsTr("Include in total balance")
visible: d.isWatchOnly
},
StatusSwitch {
visible: d.isWatchOnly
checked: root.includeWatchOnlyAccount
onClicked: root.toggleIncludeWatchOnlyAccount()
}
]
}
StatusListView {
Layout.fillWidth: true
Layout.preferredHeight: childrenRect.height
Layout.leftMargin: 16
Layout.rightMargin: 16
spacing: 1
model: d.relatedAccounts
delegate: WalletAccountDelegate {
width: ListView.view.width
account: model.account
totalCount: ListView.view.count
getNetworkShortNames: root.getNetworkShortNames
onGoToAccountView: root.goToAccountView(model.account)
}
}
}
}