status-desktop/ui/app/AppLayouts/Wallet/panels/TokenSettingsModalContent.qml

194 lines
6.5 KiB
QML
Raw Normal View History

2020-06-17 19:18:31 +00:00
import QtQuick 2.13
import QtQuick.Controls 2.13
import QtQuick.Layouts 1.13
import utils 1.0
2020-06-03 16:49:18 +00:00
import "../../../../shared"
import "../../../../shared/popups"
import "../../../../shared/controls"
2020-11-27 19:32:49 +00:00
import "../../../../shared/status"
2020-06-03 16:49:18 +00:00
Item {
id: modalBody
2020-06-03 16:49:18 +00:00
property var defaultTokenList
property var customTokenList
property var hasAsset: function(symbol) {}
signal toggleAssetClicked(string symbol)
signal removeCustomTokenTriggered(string address)
SearchBox {
id: searchBox
customHeight: 36
fontPixelSize: 12
anchors.top: modalBody.top
2020-06-03 16:49:18 +00:00
}
Component {
id: tokenComponent
Rectangle {
id: tokenContainer
property bool hovered: false
width: modalBody.width
anchors.topMargin: Style.current.smallPadding
color: hovered ? Style.current.backgroundHover : "transparent"
property bool isVisible: symbol && (searchBox.text == "" || name.toLowerCase().includes(searchBox.text.toLowerCase()) || symbol.toLowerCase().includes(searchBox.text.toLowerCase()))
visible: isVisible
height: isVisible ? 40 + Style.current.smallPadding : 0
radius: Style.current.radius
Image {
id: assetInfoImage
width: 36
height: tokenContainer.isVisible !== "" ? 36 : 0
source: Style.png("tokens/" + (hasIcon ? symbol : "DEFAULT-TOKEN@3x"))
anchors.left: parent.left
anchors.leftMargin: Style.current.smallPadding
anchors.verticalCenter: parent.verticalCenter
}
StyledText {
id: assetSymbol
text: symbol
anchors.left: assetInfoImage.right
anchors.leftMargin: Style.current.smallPadding
anchors.top: assetInfoImage.top
anchors.topMargin: 0
font.pixelSize: 15
}
StyledText {
id: assetFullTokenName
text: name || ""
anchors.top: assetSymbol.bottom
anchors.topMargin: 0
anchors.left: assetInfoImage.right
anchors.leftMargin: Style.current.smallPadding
color: Style.current.secondaryText
font.pixelSize: 15
}
2020-11-27 19:32:49 +00:00
StatusCheckBox {
id: assetCheck
checked:modalBody.hasAsset(symbol)
anchors.right: parent.right
anchors.rightMargin: Style.current.smallPadding
onClicked: toggleAssetClicked(symbol)
anchors.verticalCenter: parent.verticalCenter
}
MouseArea {
acceptedButtons: Qt.LeftButton | Qt.RightButton
cursorShape: Qt.PointingHandCursor
anchors.fill: parent
hoverEnabled: true
onClicked: function (event) {
if (event.button === Qt.RightButton) {
return contextMenu.popup(assetSymbol.x - 100, assetSymbol.y + 25)
}
assetCheck.checked = !assetCheck.checked
toggleAssetClicked(symbol)
}
onEntered: {
tokenContainer.hovered = true
}
onExited: {
tokenContainer.hovered = false
}
// TODO: replace with StatusPopupMenu
PopupMenu {
id: contextMenu
Action {
icon.source: Style.svg("make-admin")
//% "Token details"
text: qsTrId("token-details")
2020-11-02 18:18:13 +00:00
onTriggered: addCustomTokenModal.openWithData(address, name, symbol, decimals)
}
Action {
icon.source: Style.svg("remove-from-group")
icon.color: Style.current.red
2020-10-30 19:22:54 +00:00
enabled: isCustom
//% "Remove token"
text: qsTrId("remove-token")
onTriggered: removeCustomTokenTriggered(address)
}
}
}
}
}
ScrollView {
id: sview
2020-07-15 19:38:03 +00:00
clip: true
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
ScrollBar.vertical.policy: ScrollBar.AlwaysOn
contentHeight: tokenList.height
anchors.top: searchBox.bottom
2020-07-15 19:38:03 +00:00
anchors.topMargin: Style.current.smallPadding
anchors.left: parent.left
2020-06-03 16:49:18 +00:00
anchors.right: parent.right
anchors.bottom: parent.bottom
Item {
id: tokenList
height: childrenRect.height
Column {
id: customTokens
spacing: Style.current.halfPadding
StyledText {
id: customLbl
//% "Custom"
text: qsTrId("custom")
font.pixelSize: 13
color: Style.current.secondaryText
height: 20
}
Repeater {
2020-09-08 16:40:09 +00:00
id: customTokensRepeater
model: modalBody.customTokenList
delegate: tokenComponent
anchors.top: customLbl.bottom
anchors.topMargin: Style.current.smallPadding
}
2020-09-08 16:40:09 +00:00
Connections {
target: modalBody.customTokenList
2020-09-08 16:40:09 +00:00
onTokensLoaded: {
customLbl.visible = cnt > 0
}
}
}
Column {
anchors.top: customTokens.bottom
anchors.topMargin: Style.current.smallPadding
id: defaultTokens
spacing: Style.current.halfPadding
StyledText {
id: defaultLbl
//% "Default"
text: qsTrId("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
2020-06-03 16:49:18 +00:00
}
}
}
}
}