You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

145 lines
5.7 KiB

import QtQuick 2.6
import QtQuick.Layouts 1.0
import QtQuick.Controls 2.0
import QtQuick.Controls.Material 2.0
import org.electrum 1.0
Item {
id: delegate
width: ListView.view.width
height: delegateLayout.height
// expose delegate model for scroll indicator
property var delegateModel: model
ColumnLayout {
id: delegateLayout
width: parent.width
spacing: 0
ItemDelegate {
Layout.fillWidth: true
Layout.preferredHeight: txinfo.height
onClicked: {
if (model.lightning) {
var page = app.stack.push(Qt.resolvedUrl('../LightningPaymentDetails.qml'), {'key': model.key})
page.detailsChanged.connect(function() {
// update listmodel when details change
visualModel.model.updateTxLabel(model.key, page.label)
})
} else {
var page = app.stack.push(Qt.resolvedUrl('../TxDetails.qml'), {'txid': model.key})
page.detailsChanged.connect(function() {
// update listmodel when details change
visualModel.model.updateTxLabel(model.key, page.label)
})
}
}
GridLayout {
id: txinfo
columns: 3
x: constants.paddingSmall
width: delegate.width - 2*constants.paddingSmall
Item { Layout.columnSpan: 3; Layout.preferredWidth: 1; Layout.preferredHeight: constants.paddingSmall }
Image {
readonly property variant tx_icons : [
'../../../icons/unconfirmed.png',
'../../../icons/clock1.png',
'../../../icons/clock2.png',
'../../../icons/clock3.png',
'../../../icons/clock4.png',
'../../../icons/clock5.png',
'../../../icons/confirmed_bw.png'
]
Layout.preferredWidth: constants.iconSizeLarge
Layout.preferredHeight: constants.iconSizeLarge
Layout.alignment: Qt.AlignVCenter
Layout.rowSpan: 2
source: model.lightning
? '../../../icons/lightning.png'
: model.complete && model.section != 'local'
? tx_icons[Math.min(6,model.confirmations)]
: '../../../icons/offline_tx.png'
}
Label {
Layout.fillWidth: true
font.pixelSize: model.label !== '' ? constants.fontSizeLarge : constants.fontSizeMedium
text: model.label !== '' ? model.label : qsTr('<no label>')
color: model.label !== '' ? Material.foreground : constants.mutedForeground
wrapMode: Text.Wrap
maximumLineCount: 2
elide: Text.ElideRight
}
Label {
id: valueLabel
font.family: FixedFont
font.pixelSize: constants.fontSizeMedium
Layout.alignment: Qt.AlignRight
font.bold: true
color: model.value.satsInt >= 0 ? constants.colorCredit : constants.colorDebit
function updateText() {
text = Config.formatSats(model.value)
}
Component.onCompleted: updateText()
}
Label {
font.pixelSize: constants.fontSizeSmall
text: model.date ? model.date : ''
color: constants.mutedForeground
}
Label {
id: fiatLabel
font.pixelSize: constants.fontSizeSmall
Layout.alignment: Qt.AlignRight
color: constants.mutedForeground
function updateText() {
if (!Daemon.fx.enabled) {
text = ''
} else if (Daemon.fx.historicRates) {
text = Daemon.fx.fiatValueHistoric(model.value, model.timestamp) + ' ' + Daemon.fx.fiatCurrency
} else {
text = Daemon.fx.fiatValue(model.value, false) + ' ' + Daemon.fx.fiatCurrency
}
}
Component.onCompleted: updateText()
}
Item { Layout.columnSpan: 3; Layout.preferredWidth: 1; Layout.preferredHeight: constants.paddingSmall }
}
}
Rectangle {
visible: delegate.ListView.section == delegate.ListView.nextSection
Layout.preferredWidth: parent.width * 2/3
Layout.alignment: Qt.AlignHCenter
Layout.preferredHeight: constants.paddingTiny
color: Material.background
}
}
// as the items in the model are not bindings to QObjects,
// hook up events that might change the appearance
Connections {
target: Config
function onBaseUnitChanged() { valueLabel.updateText() }
function onThousandsSeparatorChanged() { valueLabel.updateText() }
}
Connections {
target: Daemon.fx
function onHistoricRatesChanged() { fiatLabel.updateText() }
function onQuotesUpdated() { fiatLabel.updateText() }
function onHistoryUpdated() { fiatLabel.updateText() }
function onEnabledUpdated() { fiatLabel.updateText() }
}
}