146 lines
4.7 KiB
QML
146 lines
4.7 KiB
QML
import QtQuick 2.13
|
|
import QtQuick.Controls 2.13
|
|
import QtQuick.Layouts 1.13
|
|
|
|
import utils 1.0
|
|
|
|
import StatusQ.Core 0.1
|
|
import StatusQ.Controls 0.1
|
|
import StatusQ.Components 0.1
|
|
import StatusQ.Popups 0.1
|
|
|
|
import shared.panels 1.0
|
|
import shared.controls 1.0
|
|
|
|
Item {
|
|
id: modalBody
|
|
|
|
property var defaultTokenList
|
|
property var customTokenList
|
|
signal toggleVisibleClicked(int chainId, string address)
|
|
signal removeCustomTokenTriggered(int chainId, string address)
|
|
signal showTokenDetailsTriggered(int chainId, string address, string name, string symbol, string decimals)
|
|
|
|
Component {
|
|
id: tokenComponent
|
|
|
|
StatusListItem {
|
|
id: assetSymbol
|
|
title: symbol
|
|
subTitle: name || ""
|
|
asset.name: Style.png("tokens/" + (hasIcon ? symbol : "DEFAULT-TOKEN@3x"))
|
|
asset.isImage: true
|
|
asset.height: 36
|
|
components: [StatusCheckBox {
|
|
id: assetCheck
|
|
checked: model.isVisible
|
|
onClicked: toggleVisibleClicked(chainId, address)
|
|
}]
|
|
visible: symbol && (searchBox.text == "" || name.toLowerCase().includes(searchBox.text.toLowerCase()) || symbol.toLowerCase().includes(searchBox.text.toLowerCase()))
|
|
MouseArea {
|
|
acceptedButtons: Qt.LeftButton | Qt.RightButton
|
|
cursorShape: Qt.PointingHandCursor
|
|
anchors.fill: parent
|
|
onClicked: function (event) {
|
|
if (event.button === Qt.RightButton) {
|
|
return contextMenu.popup(mouseX, mouseY)
|
|
}
|
|
assetCheck.checked = !assetCheck.checked
|
|
toggleVisibleClicked(chainId, address)
|
|
}
|
|
|
|
StatusMenu {
|
|
id: contextMenu
|
|
Action {
|
|
icon.name: "admin"
|
|
text: qsTr("Token details")
|
|
onTriggered: {
|
|
modalBody.showTokenDetailsTriggered(chainId, address, name, symbol, decimals);
|
|
}
|
|
}
|
|
Action {
|
|
icon.name: "remove"
|
|
icon.color: Style.current.red
|
|
enabled: isCustom
|
|
text: qsTr("Remove token")
|
|
onTriggered: removeCustomTokenTriggered(chainId, address)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
SearchBox {
|
|
id: searchBox
|
|
input.font.pixelSize: 12
|
|
anchors.top: modalBody.top
|
|
anchors.topMargin: Style.current.padding
|
|
anchors.right: parent.right
|
|
anchors.left: parent.left
|
|
}
|
|
|
|
StatusScrollView {
|
|
id: sview
|
|
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
|
|
ScrollBar.vertical.policy: ScrollBar.AlwaysOn
|
|
|
|
anchors.top: searchBox.bottom
|
|
anchors.topMargin: Style.current.smallPadding
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
anchors.bottom: parent.bottom
|
|
|
|
|
|
Item {
|
|
id: tokenList
|
|
height: childrenRect.height
|
|
|
|
Column {
|
|
id: customTokens
|
|
spacing: Style.current.halfPadding
|
|
visible: { modalBody.customTokenList.count > 0 }
|
|
|
|
StyledText {
|
|
id: customLbl
|
|
text: qsTr("Custom")
|
|
font.pixelSize: 13
|
|
color: Style.current.secondaryText
|
|
height: 20
|
|
}
|
|
|
|
Repeater {
|
|
id: customTokensRepeater
|
|
model: modalBody.customTokenList
|
|
delegate: tokenComponent
|
|
anchors.top: customLbl.bottom
|
|
anchors.topMargin: Style.current.smallPadding
|
|
}
|
|
}
|
|
|
|
Column {
|
|
anchors.top: customTokens.bottom
|
|
anchors.topMargin: Style.current.smallPadding
|
|
id: defaultTokens
|
|
spacing: Style.current.halfPadding
|
|
|
|
StyledText {
|
|
id: defaultLbl
|
|
text: qsTr("Default")
|
|
font.pixelSize: 13
|
|
color: Style.current.secondaryText
|
|
height: 20
|
|
}
|
|
|
|
Repeater {
|
|
model: modalBody.defaultTokenList
|
|
delegate: tokenComponent
|
|
anchors.top: defaultLbl.bottom
|
|
anchors.topMargin: Style.current.smallPadding
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|