Files
pay/guis/mobile/TransactionDelegate.qml
T

135 lines
3.9 KiB
QML
Raw Permalink Normal View History

import QtQuick
import QtQuick.Layouts
import "../Flowee" as Flowee
import "../Utils.js" as Utils
import Flowee.org.pay;
Rectangle {
id: transactionDelegate
property var placementInGroup: model.placementInGroup
// Is this transaction a 'move between addresses' tx.
// This is a heuristic and not available in the model, which is why its in the view.
property bool isMoved: Utils.isMoved(model);
color: palette.base
width: root.width
height: model.isTransaction ? 80 : 20
clip: true
Rectangle {
width: parent.width - 16
x: 8
2026-01-29 16:28:50 +01:00
// we always have the rounded circles and borders, but if we should not see them, we move them out of the clipped area.
height: {
var h = 80
var placement = transactionDelegate.placementInGroup;
if (placement !== Wallet.GroupStart && placement !== Wallet.Ungrouped)
h += 20;
if (placement !== Wallet.GroupEnd && placement !== Wallet.Ungrouped)
h += 20;
return h;
}
y: {
var placement = transactionDelegate.placementInGroup;
if (placement === Wallet.GroupStart || placement === Wallet.Ungrouped)
return 0;
return -20;
}
radius: 10
color: palette.light
border.width: 1
border.color: palette.midlight
}
Item {
id: checks // confirmations
width: Math.max(row.width, 14)
height: 12
anchors.right: parent.right
anchors.rightMargin: 25
anchors.top: txListItem.baseline
anchors.topMargin: 4
property int txHeight: model.height
property int confirmations: Pay.chainHeight - txHeight + 1
visible: txHeight === -1 || confirmations < 5
Rectangle {
color: "#00000000"
border.width: 1.3
border.color: Pay.useDarkSkin ? palette.dark : mainWindow.floweeBlue
opacity: 0.6
width: 14
height: 13
radius: 4
visible: checks.confirmations < 2 || checks.txHeight == -1
}
Row {
id: row
height: parent.height
Repeater {
model: {
if (checks.txHeight < 0)
return 0;
var c = checks.confirmations;
return c < 5 ? c : 0;
}
Flowee.CheckShape {
color: "#57a56c"
height: 10
}
}
}
}
TransactionListItem {
id: txListItem
anchors.fill: parent
anchors.leftMargin: 10
anchors.rightMargin: 10
}
// horizontal separator
Rectangle {
visible: transactionDelegate.placementInGroup !== Wallet.GroupEnd
&& transactionDelegate.placementInGroup !== Wallet.Ungrouped;
anchors.bottom: parent.bottom
height: 1
width: parent.width - 16
x: 8
color: palette.midlight
}
MouseArea {
anchors.fill: parent
onClicked: {
root.currentIndex = index;
var newItem = popupOverlay.open(selectedItem, transactionDelegate, overlayTxListItem);
newItem.infoObject = portfolio.current.txInfo(model.walletIndex, newItem);
root.model.freezeModel = true;
}
Connections {
target: popupOverlay
// unfreeze the model on closing of the popup
function onIsOpenChanged() {
if (!popupOverlay.isOpen)
root.model.freezeModel = false;
}
}
}
Component {
id: selectedItem
TransactionInfoSmall { }
}
Component {
id: overlayTxListItem
TransactionListItem {
width: parent.width
implicitHeight: 80
commentEditable: true
}
}
}