Files
pay/guis/desktop/WalletTransactionDetails.qml
T
tomFlowee 4883de304b Export the cashToken bool to the UI
Make clear that we have a cashtoken output in the UI.
2023-06-05 09:58:06 +02:00

272 lines
10 KiB
QML

/*
* This file is part of the Flowee project
* Copyright (C) 2020-2021 Tom Zander <tom@flowee.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import "../Flowee" as Flowee
GridLayout {
id: root
property QtObject infoObject: null
property var minedDate: model.date
columns: 2
Flowee.LabelWithClipboard {
menuText: qsTr("Copy transaction-ID")
Layout.columnSpan: 2
text: model.txid
font.pixelSize: 12
}
Label {
text: qsTr("Status") + ":"
}
Flowee.LabelWithClipboard {
id: rightColumn
Layout.fillWidth: true
text: {
if (txRoot.isRejected)
return qsTr("rejected")
if (typeof root.minedDate === "undefined")
return qsTr("unconfirmed")
var confirmations = Pay.headerChainHeight - model.height + 1;
return qsTr("%1 confirmations (mined in block %2)", "", confirmations)
.arg(confirmations).arg(model.height);
}
clipboardText: model.height
menuText: qsTr("Copy block height")
}
Label {
id: paymentTypeLabel
visible: {
let diff = model.fundsOut - model.fundsIn;
if (diff < 0 && diff > -1000) // this is our heuristic to mark it as 'moved'
return false;
return true;
}
text: mainLabel.text + ":"
}
Flowee.BitcoinAmountLabel {
visible: paymentTypeLabel.visible
value: model.fundsOut - model.fundsIn + infoObject.fees
fiatTimestamp: root.minedDate
}
Label {
id: feesLabel
visible: infoObject.createdByUs
text: qsTr("Fees") + ":"
}
Flowee.BitcoinAmountLabel {
visible: feesLabel.visible
value: infoObject.fees;
fiatTimestamp: root.minedDate
colorize: false
}
Label {
text: qsTr("Size") + ":"
}
Label {
text: qsTr("%1 bytes", "", infoObject.size).arg(infoObject.size)
}
Label {
text: qsTr("Inputs") + ":"
Layout.alignment: Qt.AlignTop
visible: infoObject.inputs.length > 0
}
ColumnLayout {
Layout.fillWidth: true
Repeater {
model: infoObject.inputs
delegate:
Item {
width: rightColumn.width
height: modelData === null ? 6 : (5 + inAddress.height)
Flowee.ArrowPoint {
id: arrowPoint
anchors.bottom: parent.bottom
color: arrowLine.color
}
Rectangle {
id: arrowLine
color: modelData === null ? "grey" : "#c5c537"
anchors.left: arrowPoint.right
anchors.leftMargin: -2 // overlap the line and the arrow
anchors.bottom: arrowPoint.bottom
anchors.bottomMargin: 6
anchors.right: parent.horizontalCenter
height: 1.6
}
Label {
id: inIndex
text: index
visible: modelData !== null
anchors.left: arrowPoint.right
anchors.leftMargin: 6
anchors.bottom: arrowLine.top
}
Rectangle {
color: Pay.useDarkSkin ? "#4fb2e7" : "yellow"
visible: inAddress.visible
x: inAddress.x - 3
y: inAddress.y -3
height: inAddress.height + 6
width: Math.min(inAddress.width, inAddress.contentWidth) + 6
radius: height / 3
opacity: 0.2
}
Flowee.LabelWithClipboard {
id: inAddress
menuText: qsTr("Copy Address")
text: {
if (modelData === null)
return "";
var cloaked = modelData.cloakedAddress
if (cloaked !== "")
return cloaked;
return modelData.address;
}
clipboardText: modelData === null ? "" : modelData.address
visible: modelData !== null
anchors.bottom: arrowLine.top
anchors.left: inIndex.right
anchors.leftMargin: 6
anchors.right: amount.left
anchors.rightMargin: 10
}
Flowee.BitcoinAmountLabel {
id: amount
visible: modelData !== null
value: modelData === null ? 0 : (-1 * modelData.value)
fiatTimestamp: root.minedDate
anchors.right: parent.right
anchors.bottom: arrowLine.top
}
}
}
}
Label {
text: qsTr("Outputs") + ":"
Layout.alignment: Qt.AlignTop
visible: infoObject.outputs.length > 0
}
ColumnLayout {
Layout.fillWidth: true
Repeater {
model: infoObject.outputs
delegate:
Item {
width: rightColumn.width
height: {
if (modelData === null)
return 6;
var h = 5 + outAddress.height;
if (modelData.hasCashToken)
h += 25;
return h;
}
Image {
width: 20
height: 20
smooth: true
visible: modelData !== null && modelData.hasCashToken
source: visible ? "qrc:/CashTokens.svg" : ""
Label {
x: 30
text: "A CashToken!"
anchors.verticalCenter: parent.verticalCenter
}
}
Rectangle {
id: outArrowLine
/*
* There can be a nullptr, which means there is no info about this output.
* Then we have a bool 'forMe' which indicates the money goes to me or to
* someone else. Lets make the 'me' one the most visible one.
*/
color: modelData === null ? "grey" : (modelData.forMe ? "#c5c537" : "#67671d")
anchors.left: parent.horizontalCenter
anchors.bottom: outArrowPoint.bottom
anchors.bottomMargin: 6
anchors.right: outArrowPoint.right
anchors.rightMargin: -1 // overlap the line and the arrow
height: 1.6
}
Flowee.ArrowPoint {
id: outArrowPoint
anchors.bottom: parent.bottom
anchors.right: parent.right
color: outArrowLine.color
}
Label {
id: outIndex
visible: modelData !== null
text: index
anchors.left: parent.left
anchors.leftMargin: 6
anchors.bottom: outArrowLine.top
}
Rectangle {
color: Pay.useDarkSkin ? "#4fb2e7" : "yellow"
visible: modelData !== null && modelData.forMe
x: outAddress.x - 3
y: outAddress.y -3
height: outAddress.height + 6
width: Math.min(outAddress.width, outAddress.contentWidth) + 6
radius: height / 3
opacity: 0.2
}
Flowee.LabelWithClipboard {
id: outAddress
visible: modelData !== null
elide: Text.ElideMiddle
menuText: qsTr("Copy Address")
text: {
if (modelData === null)
return "";
var cloaked = modelData.cloakedAddress
if (cloaked !== "")
return cloaked;
return modelData.address;
}
clipboardText: modelData === null ? "" : modelData.address
anchors.left: outIndex.right
anchors.leftMargin: 6
anchors.rightMargin: 10
anchors.right: outAmount.left
anchors.bottom: outArrowLine.top
}
Flowee.BitcoinAmountLabel {
id: outAmount
visible: modelData !== null
value: modelData === null ? 0 : modelData.value
fiatTimestamp: root.minedDate
colorize: modelData !== null && modelData.forMe
anchors.right: outArrowPoint.left
anchors.rightMargin: 2
anchors.bottom: outArrowLine.top
anchors.bottomMargin: 6
}
}
}
}
}