import QtQuick 2.15 import QtQml.Models 2.15 import QtQuick.Controls 2.15 import StatusQ.Core 0.1 import StatusQ.Core.Theme 0.1 import StatusQ.Core.Utils 0.1 import StatusQ.Components 0.1 import StatusQ.Controls 0.1 import utils 1.0 StatusListItem { id: root property ButtonGroup buttonGroup property bool usedAsSelectOption: false property bool tagClickable: false property bool tagDisplayRemoveAccountButton: false property bool canBeSelected: true property bool displayRadioButtonForSelection: true property bool useTransparentItemBackgroundColor: false property int keyPairType: Constants.keycard.keyPairType.unknown property string keyPairKeyUid: "" property string keyPairName: "" property string keyPairIcon: "" property string keyPairImage: "" property string keyPairDerivedFrom: "" property bool keyPairCardLocked: false property var keyPairAccounts property bool displayAdditionalInfoForProfileKeypair: true property string additionalInfoForProfileKeypair: qsTr("Moving this key pair will require you to use your Keycard to login") signal keyPairSelected() signal removeAccount(int index, string name) signal accountClicked(int index) color: { if (!root.useTransparentItemBackgroundColor) { return root.keyPairCardLocked? Theme.palette.dangerColor3 : Theme.palette.baseColor2 } if (sensor.containsMouse) { return Theme.palette.baseColor2 } return Theme.palette.transparent } title: root.keyPairName statusListItemTitleAside.textFormat: Text.RichText statusListItemTitleAside.visible: !!statusListItemTitleAside.text statusListItemTitleAside.text: { let t = "" if (root.keyPairType === Constants.keycard.keyPairType.profile) { t = Utils.getElidedCompressedPk(d.myPublicKey) } if (root.keyPairCardLocked) { let label = qsTr("Keycard Locked") t += ` ${label}` } return t } beneathTagsTitle: root.keyPairType === Constants.keycard.keyPairType.profile && root.displayAdditionalInfoForProfileKeypair? root.additionalInfoForProfileKeypair : !root.canBeSelected? qsTranslate("", "Contains account(s) with Keycard incompatible derivation paths", root.keyPairAccounts.count.toString()) : "" beneathTagsIcon: !!beneathTagsTitle? "info" : "" asset { width: root.keyPairIcon? 24 : 40 height: root.keyPairIcon? 24 : 40 name: root.keyPairImage? root.keyPairImage : root.keyPairIcon isImage: !!root.keyPairImage color: root.keyPairType === Constants.keycard.keyPairType.profile? Utils.colorForPubkey(d.myPublicKey) : root.keyPairCardLocked? Theme.palette.dangerColor1 : Theme.palette.primaryColor1 letterSize: Math.max(4, asset.width / 2.4) charactersLen: 2 isLetterIdenticon: !root.keyPairIcon && !asset.name.toString() bgColor: root.keyPairCardLocked? Theme.palette.dangerColor3 : Theme.palette.primaryColor3 } ringSettings { ringSpecModel: root.keyPairType === Constants.keycard.keyPairType.profile? Utils.getColorHashAsJson(d.myPublicKey) : [] ringPxSize: Math.max(asset.width / 24.0) } tagsModel: root.keyPairAccounts tagsDelegate: StatusListItemTag { bgColor: Utils.getColorForId(model.account.colorId) height: Theme.bigPadding bgRadius: 6 tagClickable: root.tagClickable closeButtonVisible: root.tagDisplayRemoveAccountButton? index > 0 : false asset { emoji: model.account.emoji emojiSize: Emoji.size.verySmall isLetterIdenticon: !!model.account.emoji name: model.account.icon color: Theme.palette.indirectColor1 width: 16 height: 16 } title: Utils.appTranslation(model.account.name) titleText.font.pixelSize: 12 titleText.color: Theme.palette.indirectColor1 onClicked: { root.removeAccount(index, model.account.name) } onTagClicked: { root.accountClicked(index) } } components: root.canBeSelected? d.components : [] QtObject { id: d property string myPublicKey: userProfile.pubKey property list components: [ StatusRadioButton { id: radioButton visible: root.usedAsSelectOption && root.displayRadioButtonForSelection ButtonGroup.group: root.buttonGroup onCheckedChanged: { d.doAction(checked) } }, StatusIcon { visible: root.usedAsSelectOption && !root.displayRadioButtonForSelection icon: "next" color: Theme.palette.baseColor1 MouseArea { anchors.fill: parent cursorShape: Qt.PointingHandCursor onClicked: { d.doAction(true) } } } ] function doAction(checked){ if (!root.usedAsSelectOption || !root.canBeSelected) return if (checked) { root.keyPairSelected() } } } onClicked: { if (!root.usedAsSelectOption || !root.canBeSelected) return d.doAction(!root.displayRadioButtonForSelection || radioButton.checked) } }