2023-02-28 15:00:10 +00:00
|
|
|
|
import QtQuick 2.15
|
|
|
|
|
import QtQuick.Controls 2.15
|
|
|
|
|
import QtQuick.Layouts 1.15
|
|
|
|
|
|
2024-03-14 17:31:38 +00:00
|
|
|
|
import StatusQ 0.1
|
2023-02-28 15:00:10 +00:00
|
|
|
|
import StatusQ.Core 0.1
|
|
|
|
|
import StatusQ.Core.Theme 0.1
|
|
|
|
|
import StatusQ.Controls 0.1
|
|
|
|
|
import StatusQ.Components 0.1
|
|
|
|
|
import StatusQ.Popups.Dialog 0.1
|
|
|
|
|
import StatusQ.Core.Utils 0.1 as StatusQUtils
|
|
|
|
|
|
2024-02-15 09:25:40 +00:00
|
|
|
|
import SortFilterProxyModel 0.2
|
|
|
|
|
|
2023-02-28 15:00:10 +00:00
|
|
|
|
import utils 1.0
|
|
|
|
|
import shared.controls 1.0 // Timer
|
2024-02-15 09:25:40 +00:00
|
|
|
|
import shared.controls.delegates 1.0
|
|
|
|
|
import AppLayouts.Communities.controls 1.0
|
2023-02-28 15:00:10 +00:00
|
|
|
|
|
|
|
|
|
Control {
|
|
|
|
|
id: root
|
|
|
|
|
|
|
|
|
|
property alias currentTabIndex: stackLayout.currentIndex
|
2024-03-25 13:29:31 +00:00
|
|
|
|
|
|
|
|
|
property int maxVisibility: Constants.ShowcaseVisibility.Everyone
|
2024-03-29 11:43:49 +00:00
|
|
|
|
|
|
|
|
|
property alias communitiesModel: communitiesProxyModel.sourceModel
|
|
|
|
|
property alias accountsModel: accountsProxyModel.sourceModel
|
|
|
|
|
property alias collectiblesModel: collectiblesProxyModel.sourceModel
|
|
|
|
|
property alias assetsModel: assetsProxyModel.sourceModel
|
|
|
|
|
property alias socialLinksModel: socialLinksProxyModel.sourceModel
|
|
|
|
|
|
2024-02-15 09:25:40 +00:00
|
|
|
|
property var globalAssetsModel
|
|
|
|
|
property var globalCollectiblesModel
|
|
|
|
|
|
2024-03-29 11:43:49 +00:00
|
|
|
|
required property string mainDisplayName
|
|
|
|
|
required property bool readOnly
|
|
|
|
|
required property bool sendToAccountEnabled
|
2024-02-15 09:25:40 +00:00
|
|
|
|
property var enabledNetworks
|
|
|
|
|
|
2023-02-28 15:00:10 +00:00
|
|
|
|
signal closeRequested()
|
2024-03-29 11:43:49 +00:00
|
|
|
|
signal copyToClipboard(string text)
|
2023-10-31 15:26:15 +00:00
|
|
|
|
|
2023-02-28 15:00:10 +00:00
|
|
|
|
horizontalPadding: readOnly ? 20 : 40 // smaller in settings/preview
|
|
|
|
|
topPadding: Style.current.bigPadding
|
|
|
|
|
|
2024-03-14 17:31:38 +00:00
|
|
|
|
StatusQUtils.QObject {
|
2023-02-28 15:00:10 +00:00
|
|
|
|
id: d
|
|
|
|
|
|
2024-02-15 09:25:40 +00:00
|
|
|
|
property int delegateWidthS: 152
|
|
|
|
|
property int delegateHeightS: 152
|
|
|
|
|
property int delegateWidthM: 202
|
|
|
|
|
property int delegateHeightM: 160
|
|
|
|
|
|
2023-02-28 15:00:10 +00:00
|
|
|
|
readonly property string copyLiteral: qsTr("Copy")
|
2024-03-29 11:43:49 +00:00
|
|
|
|
}
|
2023-02-28 15:00:10 +00:00
|
|
|
|
|
2024-03-29 11:43:49 +00:00
|
|
|
|
component PositionSFPM: SortFilterProxyModel {
|
|
|
|
|
sorters: [
|
|
|
|
|
RoleSorter {
|
|
|
|
|
roleName: "showcasePosition"
|
|
|
|
|
}
|
|
|
|
|
]
|
2024-03-25 13:29:31 +00:00
|
|
|
|
filters: [
|
|
|
|
|
AnyOf {
|
|
|
|
|
inverted: true
|
|
|
|
|
UndefinedFilter {
|
|
|
|
|
roleName: "showcaseVisibility"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ValueFilter {
|
|
|
|
|
roleName: "showcaseVisibility"
|
|
|
|
|
value: Constants.ShowcaseVisibility.NoOne
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
FastExpressionFilter {
|
|
|
|
|
expression: model.showcaseVisibility >= root.maxVisibility
|
|
|
|
|
expectedRoles: ["showcaseVisibility"]
|
2024-03-14 17:31:38 +00:00
|
|
|
|
}
|
2024-03-25 13:29:31 +00:00
|
|
|
|
]
|
|
|
|
|
}
|
2024-03-29 11:43:49 +00:00
|
|
|
|
|
|
|
|
|
PositionSFPM {
|
|
|
|
|
id: communitiesProxyModel
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PositionSFPM {
|
|
|
|
|
id: accountsProxyModel
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PositionSFPM {
|
|
|
|
|
id: collectiblesProxyModel
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PositionSFPM {
|
|
|
|
|
id: assetsProxyModel
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PositionSFPM {
|
|
|
|
|
id: socialLinksProxyModel
|
2023-02-28 15:00:10 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
background: StatusDialogBackground {
|
|
|
|
|
color: Theme.palette.baseColor4
|
|
|
|
|
Rectangle {
|
|
|
|
|
anchors.left: parent.left
|
|
|
|
|
anchors.right: parent.right
|
|
|
|
|
anchors.top: parent.top
|
|
|
|
|
height: parent.radius
|
|
|
|
|
color: parent.color
|
|
|
|
|
}
|
2024-02-15 09:25:40 +00:00
|
|
|
|
Rectangle {
|
|
|
|
|
anchors.left: parent.left
|
|
|
|
|
anchors.right: parent.right
|
|
|
|
|
anchors.top: parent.top
|
|
|
|
|
height: 1
|
|
|
|
|
color: Theme.palette.baseColor2
|
|
|
|
|
visible: ((communitiesView.contentY + accountsView.contentY + collectiblesView.contentY
|
|
|
|
|
/*+ assetsView.contentY*/ + webView.contentY) > Style.current.xlPadding)
|
|
|
|
|
}
|
2023-02-28 15:00:10 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
contentItem: StackLayout {
|
|
|
|
|
id: stackLayout
|
|
|
|
|
// communities
|
2024-02-15 09:25:40 +00:00
|
|
|
|
anchors.fill:parent
|
2023-02-28 15:00:10 +00:00
|
|
|
|
ColumnLayout {
|
2024-02-15 09:25:40 +00:00
|
|
|
|
width: parent.width
|
|
|
|
|
height: parent.height
|
2023-02-28 15:00:10 +00:00
|
|
|
|
StatusBaseText {
|
|
|
|
|
Layout.fillWidth: true
|
|
|
|
|
Layout.fillHeight: true
|
|
|
|
|
Layout.alignment: Qt.AlignCenter
|
|
|
|
|
visible: communitiesView.count == 0
|
|
|
|
|
horizontalAlignment: Text.AlignHCenter
|
|
|
|
|
verticalAlignment: Text.AlignVCenter
|
|
|
|
|
color: Theme.palette.directColor1
|
2024-02-15 09:25:40 +00:00
|
|
|
|
text: qsTr("%1 has not shared any communities").arg(root.mainDisplayName)
|
2023-02-28 15:00:10 +00:00
|
|
|
|
}
|
2024-02-15 09:25:40 +00:00
|
|
|
|
Item {
|
2023-02-28 15:00:10 +00:00
|
|
|
|
Layout.fillWidth: true
|
|
|
|
|
Layout.fillHeight: true
|
2024-02-15 09:25:40 +00:00
|
|
|
|
Layout.topMargin: (communitiesView.contentY > Style.current.padding) ? 1 : Style.current.padding
|
|
|
|
|
Behavior on Layout.topMargin { NumberAnimation { duration: 50 } }
|
|
|
|
|
clip: true
|
|
|
|
|
StatusGridView {
|
|
|
|
|
id: communitiesView
|
|
|
|
|
width: 606
|
|
|
|
|
height: parent.height
|
|
|
|
|
anchors.top: parent.top
|
|
|
|
|
anchors.topMargin: Style.current.halfPadding
|
|
|
|
|
anchors.bottom: parent.bottom
|
|
|
|
|
anchors.bottomMargin: Style.current.halfPadding
|
|
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
|
anchors.horizontalCenterOffset: Style.current.halfPadding
|
|
|
|
|
clip: false
|
|
|
|
|
cellWidth: d.delegateWidthM
|
|
|
|
|
cellHeight: d.delegateHeightM
|
|
|
|
|
visible: count
|
|
|
|
|
model: communitiesProxyModel
|
|
|
|
|
ScrollBar.vertical: StatusScrollBar { }
|
|
|
|
|
delegate: StatusCommunityCard {
|
|
|
|
|
id: profileDialogCommunityCard
|
|
|
|
|
readonly property var permissionsList: model.permissionsModel //TODO: Add permissions model in the community model
|
|
|
|
|
readonly property bool requirementsMet: !!model.allTokenRequirementsMet ? model.allTokenRequirementsMet : false
|
|
|
|
|
cardSize: StatusCommunityCard.Size.Small
|
|
|
|
|
width: GridView.view.cellWidth - Style.current.padding
|
|
|
|
|
height: GridView.view.cellHeight - Style.current.padding
|
|
|
|
|
titleFontSize: 15
|
|
|
|
|
descriptionFontSize: 12
|
|
|
|
|
communityId: model.id ?? ""
|
|
|
|
|
loaded: !!model.id
|
|
|
|
|
asset.source: model.image ?? ""
|
|
|
|
|
asset.isImage: !!model.image
|
|
|
|
|
asset.width: 32
|
|
|
|
|
asset.height: 32
|
|
|
|
|
name: model.name ?? ""
|
|
|
|
|
memberCountVisible: false
|
|
|
|
|
layer.enabled: hovered
|
|
|
|
|
border.width: hovered ? 0 : 1
|
|
|
|
|
border.color: Theme.palette.baseColor2
|
|
|
|
|
descriptionFontColor: Theme.palette.baseColor1
|
|
|
|
|
description: {
|
|
|
|
|
switch (model.memberRole) {
|
|
|
|
|
case (Constants.memberRole.owner):
|
|
|
|
|
return qsTr("Owner");
|
|
|
|
|
case (Constants.memberRole.admin) :
|
|
|
|
|
return qsTr("Admin");
|
|
|
|
|
case (Constants.memberRole.tokenMaster):
|
|
|
|
|
return qsTr("Token Master");
|
|
|
|
|
default:
|
|
|
|
|
return qsTr("Member");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
communityColor: model.color ?? ""
|
|
|
|
|
// Community restrictions
|
|
|
|
|
bottomRowComponent: model.memberRole ?? -1 === Constants.memberRole.tokenMaster ?
|
|
|
|
|
communityMembershipComponent :
|
|
|
|
|
!!profileDialogCommunityCard.permissionsList && profileDialogCommunityCard.permissionsList.count > 0 ?
|
|
|
|
|
permissionsRowComponent : null
|
|
|
|
|
|
|
|
|
|
Component {
|
|
|
|
|
id: communityMembershipComponent
|
|
|
|
|
Item {
|
|
|
|
|
width: 125
|
|
|
|
|
height: 24
|
|
|
|
|
Rectangle {
|
|
|
|
|
anchors.fill: parent
|
|
|
|
|
radius: 20
|
|
|
|
|
color: Theme.palette.successColor1
|
|
|
|
|
opacity: .1
|
|
|
|
|
border.color: Theme.palette.successColor1
|
|
|
|
|
}
|
|
|
|
|
Row {
|
|
|
|
|
anchors.centerIn: parent
|
|
|
|
|
spacing: 2
|
|
|
|
|
StatusIcon {
|
|
|
|
|
width: 16
|
|
|
|
|
height: 16
|
|
|
|
|
color: Theme.palette.successColor1
|
|
|
|
|
icon: "tiny/checkmark"
|
|
|
|
|
}
|
|
|
|
|
StatusBaseText {
|
|
|
|
|
font.pixelSize: Theme.tertiaryTextFontSize
|
|
|
|
|
color: Theme.palette.successColor1
|
|
|
|
|
text: qsTr("You’re there too")
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Component {
|
|
|
|
|
id: permissionsRowComponent
|
|
|
|
|
PermissionsRow {
|
|
|
|
|
hoverEnabled: false
|
|
|
|
|
assetsModel: root.globalAssetsModel
|
|
|
|
|
collectiblesModel: root.globalCollectiblesModel
|
|
|
|
|
model: profileDialogCommunityCard.permissionsList
|
|
|
|
|
requirementsMet: profileDialogCommunityCard.requirementsMet
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
onClicked: {
|
|
|
|
|
if (root.readOnly)
|
|
|
|
|
return
|
|
|
|
|
root.closeRequested()
|
|
|
|
|
Global.switchToCommunity(model.id)
|
|
|
|
|
//TODO https://github.com/status-im/status-desktop/issues/13702
|
|
|
|
|
//on right click add menu
|
2023-02-28 15:00:10 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// wallets/accounts
|
|
|
|
|
ColumnLayout {
|
2024-02-15 09:25:40 +00:00
|
|
|
|
width: parent.width
|
|
|
|
|
height: parent.height
|
2023-02-28 15:00:10 +00:00
|
|
|
|
StatusBaseText {
|
|
|
|
|
Layout.fillWidth: true
|
|
|
|
|
Layout.fillHeight: true
|
|
|
|
|
Layout.alignment: Qt.AlignCenter
|
|
|
|
|
visible: accountsView.count == 0
|
|
|
|
|
horizontalAlignment: Text.AlignHCenter
|
|
|
|
|
verticalAlignment: Text.AlignVCenter
|
|
|
|
|
color: Theme.palette.directColor1
|
2024-02-15 09:25:40 +00:00
|
|
|
|
text: qsTr("%1 has not shared any accounts").arg(root.mainDisplayName)
|
2023-02-28 15:00:10 +00:00
|
|
|
|
}
|
2024-02-15 09:25:40 +00:00
|
|
|
|
Item {
|
2023-02-28 15:00:10 +00:00
|
|
|
|
Layout.fillWidth: true
|
|
|
|
|
Layout.fillHeight: true
|
2024-02-15 09:25:40 +00:00
|
|
|
|
Layout.topMargin: (accountsView.contentY > Style.current.padding) ? 1 : Style.current.padding
|
|
|
|
|
Behavior on Layout.topMargin { NumberAnimation { duration: 50 } }
|
|
|
|
|
clip: true
|
|
|
|
|
StatusGridView {
|
|
|
|
|
id: accountsView
|
|
|
|
|
width: 606
|
|
|
|
|
height: parent.height
|
|
|
|
|
anchors.top: parent.top
|
|
|
|
|
anchors.topMargin: Style.current.halfPadding
|
|
|
|
|
anchors.bottom: parent.bottom
|
|
|
|
|
anchors.bottomMargin: Style.current.halfPadding
|
|
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
|
cellWidth: d.delegateWidthM
|
|
|
|
|
cellHeight: d.delegateHeightM
|
|
|
|
|
visible: count
|
|
|
|
|
clip: false
|
|
|
|
|
ScrollBar.vertical: StatusScrollBar { }
|
|
|
|
|
model: accountsProxyModel
|
|
|
|
|
delegate: InfoCard {
|
|
|
|
|
implicitWidth: GridView.view.cellWidth - Style.current.padding
|
|
|
|
|
implicitHeight: GridView.view.cellHeight - Style.current.padding
|
|
|
|
|
title: model.name
|
|
|
|
|
subTitle: StatusQUtils.Utils.elideText(model.address, 6, 4).replace("0x", "0×")
|
|
|
|
|
asset.color: Utils.getColorForId(model.colorId)
|
|
|
|
|
asset.emoji: model.emoji ?? ""
|
|
|
|
|
asset.name: asset.emoji || "filled-account"
|
|
|
|
|
asset.isLetterIdenticon: asset.emoji
|
|
|
|
|
asset.letterSize: 14
|
|
|
|
|
asset.bgColor: Theme.palette.primaryColor3
|
|
|
|
|
asset.isImage: asset.emoji
|
|
|
|
|
enabledNetworks: root.enabledNetworks
|
|
|
|
|
rightSideButtons: RowLayout {
|
|
|
|
|
StatusFlatRoundButton {
|
|
|
|
|
Layout.preferredWidth: 32
|
|
|
|
|
Layout.preferredHeight: 32
|
|
|
|
|
type: StatusFlatRoundButton.Type.Secondary
|
|
|
|
|
icon.name: "send"
|
|
|
|
|
icon.color: Theme.palette.baseColor1
|
|
|
|
|
enabled: root.sendToAccountEnabled
|
|
|
|
|
onClicked: {
|
|
|
|
|
Global.openSendModal(model.address)
|
|
|
|
|
}
|
2023-02-28 15:00:10 +00:00
|
|
|
|
}
|
2024-02-15 09:25:40 +00:00
|
|
|
|
StatusFlatRoundButton {
|
|
|
|
|
Layout.preferredWidth: 32
|
|
|
|
|
Layout.preferredHeight: 32
|
|
|
|
|
type: StatusFlatRoundButton.Type.Secondary
|
|
|
|
|
icon.name: "more"
|
|
|
|
|
icon.color: Theme.palette.baseColor1
|
|
|
|
|
onClicked: {
|
|
|
|
|
//TODO https://github.com/status-im/status-desktop/issues/13702
|
|
|
|
|
//open menu
|
|
|
|
|
}
|
2023-02-28 15:00:10 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2024-02-15 09:25:40 +00:00
|
|
|
|
}
|
|
|
|
|
//TODO remove when https://github.com/status-im/status-desktop/issues/13702
|
|
|
|
|
// delegate: StatusListItem {
|
|
|
|
|
// id: accountDelegate
|
|
|
|
|
// property bool saved: {
|
|
|
|
|
// let savedAddress = root.walletStore.getSavedAddress(model.address)
|
|
|
|
|
// if (savedAddress.name !== "")
|
|
|
|
|
// return true
|
|
|
|
|
|
|
|
|
|
// if (!!root.walletStore.lastCreatedSavedAddress) {
|
|
|
|
|
// if (root.walletStore.lastCreatedSavedAddress.address.toLowerCase() === model.address.toLowerCase()) {
|
|
|
|
|
// return !!root.walletStore.lastCreatedSavedAddress.error
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// return false
|
|
|
|
|
// }
|
|
|
|
|
// border.width: 1
|
|
|
|
|
// border.color: Theme.palette.baseColor2
|
|
|
|
|
// width: ListView.view.width
|
|
|
|
|
// title: model.name
|
|
|
|
|
// subTitle: StatusQUtils.Utils.elideText(model.address, 6, 4).replace("0x", "0×")
|
|
|
|
|
// asset.color: Utils.getColorForId(model.colorId)
|
|
|
|
|
// asset.emoji: model.emoji ?? ""
|
|
|
|
|
// asset.name: asset.emoji || "filled-account"
|
|
|
|
|
// asset.isLetterIdenticon: asset.emoji
|
|
|
|
|
// asset.letterSize: 14
|
|
|
|
|
// asset.bgColor: Theme.palette.primaryColor3
|
|
|
|
|
// asset.isImage: asset.emoji
|
|
|
|
|
// components: [
|
|
|
|
|
// StatusIcon {
|
|
|
|
|
// anchors.verticalCenter: parent.verticalCenter
|
|
|
|
|
// icon: "show"
|
|
|
|
|
// color: Theme.palette.directColor1
|
|
|
|
|
// },
|
|
|
|
|
// StatusFlatButton {
|
|
|
|
|
// anchors.verticalCenter: parent.verticalCenter
|
|
|
|
|
// size: StatusBaseButton.Size.Small
|
|
|
|
|
// enabled: !accountDelegate.saved
|
|
|
|
|
// text: accountDelegate.saved ? qsTr("Address saved") : qsTr("Save Address")
|
|
|
|
|
// onClicked: {
|
|
|
|
|
// // From here, we should just run add saved address popup
|
|
|
|
|
// Global.openAddEditSavedAddressesPopup({
|
|
|
|
|
// addAddress: true,
|
|
|
|
|
// address: model.address
|
|
|
|
|
// })
|
|
|
|
|
// }
|
|
|
|
|
// },
|
|
|
|
|
// StatusFlatRoundButton {
|
|
|
|
|
// anchors.verticalCenter: parent.verticalCenter
|
|
|
|
|
// type: StatusFlatRoundButton.Type.Secondary
|
|
|
|
|
// icon.name: "send"
|
|
|
|
|
// tooltip.text: qsTr("Send")
|
|
|
|
|
// enabled: root.sendToAccountEnabled
|
|
|
|
|
// onClicked: {
|
|
|
|
|
// Global.openSendModal(model.address)
|
|
|
|
|
// }
|
|
|
|
|
// },
|
|
|
|
|
// StatusFlatRoundButton {
|
|
|
|
|
// anchors.verticalCenter: parent.verticalCenter
|
|
|
|
|
// type: StatusFlatRoundButton.Type.Secondary
|
|
|
|
|
// icon.name: "copy"
|
|
|
|
|
// tooltip.text: d.copyLiteral
|
|
|
|
|
// onClicked: {
|
|
|
|
|
// tooltip.text = qsTr("Copied")
|
|
|
|
|
// root.profileStore.copyToClipboard(model.address)
|
|
|
|
|
// d.timer.setTimeout(function() {
|
|
|
|
|
// tooltip.text = d.copyLiteral
|
|
|
|
|
// }, 2000);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// ]
|
|
|
|
|
// }
|
2023-02-28 15:00:10 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// collectibles/NFTs
|
|
|
|
|
ColumnLayout {
|
|
|
|
|
StatusBaseText {
|
|
|
|
|
Layout.fillWidth: true
|
|
|
|
|
Layout.fillHeight: true
|
|
|
|
|
Layout.alignment: Qt.AlignCenter
|
|
|
|
|
visible: collectiblesView.count == 0
|
|
|
|
|
horizontalAlignment: Text.AlignHCenter
|
|
|
|
|
verticalAlignment: Text.AlignVCenter
|
|
|
|
|
color: Theme.palette.directColor1
|
2024-02-15 09:25:40 +00:00
|
|
|
|
text: qsTr("%1 has not shared any collectibles").arg(root.mainDisplayName)
|
2023-02-28 15:00:10 +00:00
|
|
|
|
}
|
2024-02-15 09:25:40 +00:00
|
|
|
|
Item {
|
2023-02-28 15:00:10 +00:00
|
|
|
|
Layout.fillWidth: true
|
|
|
|
|
Layout.fillHeight: true
|
2024-02-15 09:25:40 +00:00
|
|
|
|
Layout.topMargin: (collectiblesView.contentY > Style.current.padding) ? 1 : Style.current.padding
|
|
|
|
|
Behavior on Layout.topMargin { NumberAnimation { duration: 50 } }
|
|
|
|
|
clip: true
|
|
|
|
|
StatusGridView {
|
|
|
|
|
id: collectiblesView
|
|
|
|
|
width: 608
|
|
|
|
|
height: parent.height
|
|
|
|
|
anchors.top: parent.top
|
|
|
|
|
anchors.topMargin: Style.current.halfPadding
|
|
|
|
|
anchors.bottom: parent.bottom
|
|
|
|
|
anchors.bottomMargin: Style.current.halfPadding
|
|
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
|
anchors.horizontalCenterOffset: Style.current.halfPadding
|
|
|
|
|
cellWidth: d.delegateWidthS
|
|
|
|
|
cellHeight: d.delegateHeightS
|
|
|
|
|
visible: count
|
|
|
|
|
clip: false
|
|
|
|
|
// TODO Issue #11637: Dedicated controller for user's list of collectibles (no watch-only entries)
|
|
|
|
|
model: collectiblesProxyModel
|
|
|
|
|
ScrollBar.vertical: StatusScrollBar { }
|
|
|
|
|
delegate: StatusRoundedImage {
|
|
|
|
|
width: GridView.view.cellWidth - Style.current.padding
|
|
|
|
|
height: GridView.view.cellHeight - Style.current.padding
|
|
|
|
|
border.width: 1
|
|
|
|
|
border.color: Theme.palette.directColor7
|
|
|
|
|
color: !!model.backgroundColor ? model.backgroundColor : "transparent"
|
|
|
|
|
radius: Style.current.radius
|
|
|
|
|
showLoadingIndicator: true
|
|
|
|
|
isLoading: image.isLoading || !model.imageUrl
|
|
|
|
|
image.fillMode: Image.PreserveAspectCrop
|
|
|
|
|
image.source: model.imageUrl ?? ""
|
2023-02-28 15:00:10 +00:00
|
|
|
|
|
|
|
|
|
Control {
|
2024-02-15 09:25:40 +00:00
|
|
|
|
width: (amountText.contentWidth + Style.current.padding)
|
|
|
|
|
height: 24
|
|
|
|
|
anchors.left: parent.left
|
|
|
|
|
anchors.leftMargin: 12
|
|
|
|
|
anchors.top: parent.top
|
|
|
|
|
anchors.topMargin: 12
|
|
|
|
|
//TODO TBD, we need to show the number if the user has more than 1 of each collectible
|
|
|
|
|
//not sure how to name the role
|
|
|
|
|
visible: (model.userHas > 1)
|
2023-02-28 15:00:10 +00:00
|
|
|
|
|
|
|
|
|
background: Rectangle {
|
2024-02-15 09:25:40 +00:00
|
|
|
|
radius: 30
|
2023-02-28 15:00:10 +00:00
|
|
|
|
color: Theme.palette.indirectColor2
|
|
|
|
|
}
|
2024-02-15 09:25:40 +00:00
|
|
|
|
|
2023-02-28 15:00:10 +00:00
|
|
|
|
contentItem: StatusBaseText {
|
2024-02-15 09:25:40 +00:00
|
|
|
|
id: amountText
|
|
|
|
|
horizontalAlignment: Text.AlignHCenter
|
|
|
|
|
verticalAlignment: Text.AlignVCenter
|
|
|
|
|
font.pixelSize: Style.current.asideTextFontSize
|
|
|
|
|
text: "x"+model.userHas
|
2023-02-28 15:00:10 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-15 09:25:40 +00:00
|
|
|
|
Control {
|
|
|
|
|
width: 24
|
|
|
|
|
height: 24
|
|
|
|
|
anchors.left: parent.left
|
|
|
|
|
anchors.leftMargin: 12
|
|
|
|
|
anchors.bottom: parent.bottom
|
|
|
|
|
anchors.bottomMargin: 12
|
|
|
|
|
visible: !!model.communityImage
|
2023-02-28 15:00:10 +00:00
|
|
|
|
|
2024-02-15 09:25:40 +00:00
|
|
|
|
background: Rectangle {
|
|
|
|
|
radius: parent.width/2
|
|
|
|
|
color: Theme.palette.indirectColor2
|
|
|
|
|
}
|
|
|
|
|
contentItem: StatusRoundedImage {
|
|
|
|
|
anchors.fill: parent
|
|
|
|
|
anchors.margins: 4
|
|
|
|
|
image.fillMode: Image.PreserveAspectFit
|
|
|
|
|
image.source: model.communityImage
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
HoverHandler {
|
|
|
|
|
id: hhandler
|
|
|
|
|
cursorShape: hovered ? Qt.PointingHandCursor : undefined
|
|
|
|
|
}
|
2023-02-28 15:00:10 +00:00
|
|
|
|
|
2024-02-15 09:25:40 +00:00
|
|
|
|
TapHandler {
|
|
|
|
|
onSingleTapped: {
|
|
|
|
|
//TODO https://github.com/status-im/status-desktop/issues/13702
|
|
|
|
|
Global.openLink(model.permalink)
|
|
|
|
|
}
|
2023-02-28 15:00:10 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// assets/tokens
|
2024-02-15 09:25:40 +00:00
|
|
|
|
// ColumnLayout {
|
|
|
|
|
// StatusBaseText {
|
|
|
|
|
// Layout.fillWidth: true
|
|
|
|
|
// Layout.fillHeight: true
|
|
|
|
|
// Layout.alignment: Qt.AlignCenter
|
|
|
|
|
// visible: assetsView.count == 0
|
|
|
|
|
// horizontalAlignment: Text.AlignHCenter
|
|
|
|
|
// verticalAlignment: Text.AlignVCenter
|
|
|
|
|
// color: Theme.palette.directColor1
|
|
|
|
|
// text: qsTr("%1 has not shared any assets").arg(root.mainDisplayName)
|
|
|
|
|
// }
|
|
|
|
|
// Item {
|
|
|
|
|
// Layout.fillWidth: true
|
|
|
|
|
// Layout.fillHeight: true
|
|
|
|
|
// Layout.topMargin: (assetsView.contentY > Style.current.padding) ? 1 : Style.current.padding
|
|
|
|
|
// Behavior on Layout.topMargin { NumberAnimation { duration: 50 } }
|
|
|
|
|
// clip: true
|
|
|
|
|
// StatusGridView {
|
|
|
|
|
// id: assetsView
|
|
|
|
|
// width: 608
|
|
|
|
|
// height: parent.height
|
|
|
|
|
// anchors.top: parent.top
|
|
|
|
|
// anchors.topMargin: Style.current.halfPadding
|
|
|
|
|
// anchors.bottom: parent.bottom
|
|
|
|
|
// anchors.bottomMargin: Style.current.halfPadding
|
|
|
|
|
// anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
|
// anchors.horizontalCenterOffset: Style.current.halfPadding
|
|
|
|
|
// cellWidth: d.delegateWidthS
|
|
|
|
|
// cellHeight: d.delegateHeightS
|
|
|
|
|
// visible: count
|
|
|
|
|
// clip: false
|
|
|
|
|
// model: assetsProxyModel
|
|
|
|
|
// ScrollBar.vertical: StatusScrollBar { }
|
|
|
|
|
// delegate: InfoCard {
|
|
|
|
|
// width: GridView.view.cellWidth - Style.current.padding
|
|
|
|
|
// height: GridView.view.cellHeight - Style.current.padding
|
|
|
|
|
// title: model.name
|
|
|
|
|
// subTitle: LocaleUtils.currencyAmountToLocaleString(model.enabledNetworkBalance)
|
|
|
|
|
// asset.name: Constants.tokenIcon(model.symbol)
|
|
|
|
|
// asset.isImage: true
|
|
|
|
|
// tagIcon: !!model.communityImage ? model.communityImage : ""
|
|
|
|
|
// rightSideButtons: RowLayout {
|
|
|
|
|
// StatusFlatRoundButton {
|
|
|
|
|
// implicitWidth: 24
|
|
|
|
|
// implicitHeight: 24
|
|
|
|
|
// type: StatusFlatRoundButton.Type.Secondary
|
|
|
|
|
// icon.name: "external"
|
|
|
|
|
// icon.width: 16
|
|
|
|
|
// icon.height: 16
|
|
|
|
|
// icon.color: Theme.palette.baseColor1
|
|
|
|
|
// enabled: root.sendToAccountEnabled
|
|
|
|
|
// onClicked: {
|
|
|
|
|
// //TODO https://github.com/status-im/status-desktop/issues/13702
|
|
|
|
|
// //Global.openSendModal(model.address)
|
|
|
|
|
// //on right click open menu
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// //TODO remove when https://github.com/status-im/status-desktop/issues/13702
|
|
|
|
|
// // delegate: StatusListItem {
|
|
|
|
|
// // readonly property double changePct24hour: model.changePct24hour ?? 0
|
|
|
|
|
// // readonly property string textColor: changePct24hour === 0
|
|
|
|
|
// // ? Theme.palette.baseColor1 : changePct24hour < 0
|
|
|
|
|
// // ? Theme.palette.dangerColor1 : Theme.palette.successColor1
|
|
|
|
|
// // readonly property string arrow: changePct24hour === 0 ? "" : changePct24hour < 0 ? "↓" : "↑"
|
|
|
|
|
|
|
|
|
|
// // width: GridView.view.cellWidth - Style.current.halfPadding
|
|
|
|
|
// // height: GridView.view.cellHeight - Style.current.halfPadding
|
|
|
|
|
// // title: model.name
|
|
|
|
|
// // //subTitle: LocaleUtils.currencyAmountToLocaleString(model.enabledNetworkBalance)
|
|
|
|
|
// // statusListItemTitle.font.weight: Font.Medium
|
|
|
|
|
// // tertiaryTitle: qsTr("%1% today %2")
|
|
|
|
|
// // .arg(LocaleUtils.numberToLocaleString(changePct24hour, changePct24hour === 0 ? 0 : 2)).arg(arrow)
|
|
|
|
|
// // statusListItemTertiaryTitle.color: textColor
|
|
|
|
|
// // statusListItemTertiaryTitle.font.pixelSize: Theme.asideTextFontSize
|
|
|
|
|
// // statusListItemTertiaryTitle.anchors.topMargin: 6
|
|
|
|
|
// // leftPadding: Style.current.halfPadding
|
|
|
|
|
// // rightPadding: Style.current.halfPadding
|
|
|
|
|
// // border.width: 1
|
|
|
|
|
// // border.color: Theme.palette.baseColor2
|
|
|
|
|
// // components: [
|
|
|
|
|
// // Image {
|
|
|
|
|
// // width: 40
|
|
|
|
|
// // height: 40
|
|
|
|
|
// // anchors.verticalCenter: parent.verticalCenter
|
|
|
|
|
// // source: Constants.tokenIcon(model.symbol)
|
|
|
|
|
// // }
|
|
|
|
|
// // ]
|
|
|
|
|
// // onClicked: {
|
|
|
|
|
// // if (root.readOnly)
|
|
|
|
|
// // return
|
|
|
|
|
// // // TODO what to do here?
|
|
|
|
|
// // }
|
|
|
|
|
// // }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// social links
|
2023-02-28 15:00:10 +00:00
|
|
|
|
ColumnLayout {
|
|
|
|
|
StatusBaseText {
|
|
|
|
|
Layout.fillWidth: true
|
|
|
|
|
Layout.fillHeight: true
|
|
|
|
|
Layout.alignment: Qt.AlignCenter
|
2024-02-15 09:25:40 +00:00
|
|
|
|
visible: webView.count == 0
|
2023-02-28 15:00:10 +00:00
|
|
|
|
horizontalAlignment: Text.AlignHCenter
|
|
|
|
|
verticalAlignment: Text.AlignVCenter
|
|
|
|
|
color: Theme.palette.directColor1
|
2024-02-15 09:25:40 +00:00
|
|
|
|
text: qsTr("%1 has not shared any links").arg(root.mainDisplayName)
|
2023-02-28 15:00:10 +00:00
|
|
|
|
}
|
|
|
|
|
|
2024-02-15 09:25:40 +00:00
|
|
|
|
Item {
|
2023-02-28 15:00:10 +00:00
|
|
|
|
Layout.fillWidth: true
|
|
|
|
|
Layout.fillHeight: true
|
2024-02-15 09:25:40 +00:00
|
|
|
|
Layout.topMargin: (webView.contentY > Style.current.padding) ? 1 : Style.current.padding
|
|
|
|
|
Behavior on Layout.topMargin { NumberAnimation { duration: 50 } }
|
|
|
|
|
clip: true
|
|
|
|
|
|
|
|
|
|
StatusGridView {
|
|
|
|
|
id: webView
|
|
|
|
|
width: 608
|
|
|
|
|
height: parent.height
|
|
|
|
|
anchors.top: parent.top
|
|
|
|
|
anchors.topMargin: Style.current.halfPadding
|
|
|
|
|
anchors.bottom: parent.bottom
|
|
|
|
|
anchors.bottomMargin: Style.current.halfPadding
|
|
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
|
anchors.horizontalCenterOffset: Style.current.halfPadding
|
|
|
|
|
cellWidth: d.delegateWidthS
|
|
|
|
|
cellHeight: d.delegateHeightS
|
|
|
|
|
visible: count
|
|
|
|
|
clip: false
|
|
|
|
|
model: socialLinksProxyModel
|
|
|
|
|
ScrollBar.vertical: StatusScrollBar { }
|
|
|
|
|
delegate: InfoCard {
|
|
|
|
|
readonly property int linkType: ProfileUtils.linkTextToType(model.text)
|
|
|
|
|
width: GridView.view.cellWidth - Style.current.padding
|
|
|
|
|
height: GridView.view.cellHeight - Style.current.padding
|
|
|
|
|
title: ProfileUtils.linkTypeToText(linkType)
|
|
|
|
|
asset.bgColor: Style.current.translucentBlue
|
|
|
|
|
asset.name: ProfileUtils.linkTypeToIcon(linkType)
|
|
|
|
|
asset.color: ProfileUtils.linkTypeColor(linkType)
|
|
|
|
|
asset.width: 20
|
|
|
|
|
asset.height: 20
|
|
|
|
|
asset.bgWidth: 32
|
|
|
|
|
asset.bgHeight: 32
|
|
|
|
|
asset.isImage: false
|
|
|
|
|
subTitle: ProfileUtils.stripSocialLinkPrefix(model.url, linkType)
|
|
|
|
|
rightSideButtons: RowLayout {
|
|
|
|
|
StatusFlatRoundButton {
|
|
|
|
|
implicitWidth: 24
|
|
|
|
|
implicitHeight: 24
|
|
|
|
|
type: StatusFlatRoundButton.Type.Secondary
|
|
|
|
|
icon.name: "external"
|
|
|
|
|
icon.width: 16
|
|
|
|
|
icon.height: 16
|
|
|
|
|
icon.color: Theme.palette.baseColor1
|
|
|
|
|
enabled: root.sendToAccountEnabled
|
|
|
|
|
onClicked: {
|
|
|
|
|
//TODO https://github.com/status-im/status-desktop/issues/13702
|
|
|
|
|
//on right click open menu
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
Item {
|
|
|
|
|
width: 279
|
|
|
|
|
height: 32
|
|
|
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
|
|
|
anchors.bottom: parent.bottom
|
|
|
|
|
anchors.bottomMargin: 20
|
|
|
|
|
Rectangle {
|
|
|
|
|
anchors.fill: parent
|
|
|
|
|
color: Style.current.background
|
|
|
|
|
radius: 30
|
|
|
|
|
border.color: Theme.palette.baseColor2
|
|
|
|
|
}
|
|
|
|
|
Row {
|
|
|
|
|
anchors.centerIn: parent
|
|
|
|
|
spacing: 4
|
|
|
|
|
StatusIcon {
|
|
|
|
|
width: 16
|
|
|
|
|
height: 16
|
|
|
|
|
icon: "info"
|
|
|
|
|
color: Theme.palette.directColor1
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StatusBaseText {
|
|
|
|
|
font.pixelSize: 13
|
|
|
|
|
text: qsTr("Social handles and links are unverified")
|
2023-02-28 15:00:10 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|