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.
258 lines
11 KiB
258 lines
11 KiB
import QtQuick |
|
import QtQuick.Layouts |
|
import QtQuick.Controls |
|
import QtQuick.Controls.Material |
|
|
|
import org.electrum 1.0 |
|
|
|
import "controls" |
|
|
|
Pane { |
|
id: rootItem |
|
objectName: 'BalanceDetails' |
|
|
|
padding: 0 |
|
|
|
ColumnLayout { |
|
id: rootLayout |
|
anchors.fill: parent |
|
spacing: 0 |
|
|
|
Flickable { |
|
Layout.fillWidth: true |
|
Layout.fillHeight: true |
|
|
|
contentHeight: flickableRoot.height |
|
clip:true |
|
interactive: height < contentHeight |
|
|
|
Pane { |
|
id: flickableRoot |
|
width: parent.width |
|
padding: constants.paddingLarge |
|
|
|
ColumnLayout { |
|
width: parent.width |
|
spacing: constants.paddingLarge |
|
|
|
InfoTextArea { |
|
Layout.fillWidth: true |
|
Layout.bottomMargin: constants.paddingLarge |
|
visible: Daemon.currentWallet.synchronizing || !Network.isConnected |
|
text: Daemon.currentWallet.synchronizing |
|
? qsTr('Your wallet is not synchronized. The displayed balance may be inaccurate.') |
|
: qsTr('Your wallet is not connected to an Electrum server. The displayed balance may be outdated.') |
|
iconStyle: InfoTextArea.IconStyle.Warn |
|
} |
|
|
|
Heading { |
|
text: qsTr('Wallet balance') |
|
} |
|
|
|
Piechart { |
|
id: piechart |
|
|
|
property real total: 0 |
|
|
|
visible: total > 0 |
|
Layout.preferredWidth: parent.width |
|
implicitHeight: 220 // TODO: sane value dependent on screen |
|
innerOffset: 6 |
|
function updateSlices() { |
|
var p = Daemon.currentWallet.getBalancesForPiechart() |
|
total = p['total'] |
|
piechart.slices = [ |
|
{ v: p['lightning']/total, |
|
color: constants.colorPiechartLightning, text: qsTr('Lightning') }, |
|
{ v: p['confirmed']/total, |
|
color: constants.colorPiechartOnchain, text: qsTr('On-chain') }, |
|
{ v: p['frozen']/total, |
|
color: constants.colorPiechartFrozen, text: qsTr('On-chain (frozen)') }, |
|
{ v: p['unconfirmed']/total, |
|
color: constants.colorPiechartUnconfirmed, text: qsTr('Unconfirmed') }, |
|
{ v: p['unmatured']/total, |
|
color: constants.colorPiechartUnmatured, text: qsTr('Unmatured') }, |
|
{ v: p['f_lightning']/total, |
|
color: constants.colorPiechartLightningFrozen, text: qsTr('Frozen Lightning') }, |
|
] |
|
} |
|
} |
|
|
|
GridLayout { |
|
Layout.alignment: Qt.AlignHCenter |
|
visible: Daemon.currentWallet |
|
columns: 2 |
|
|
|
RowLayout { |
|
Rectangle { |
|
Layout.preferredWidth: constants.iconSizeXSmall |
|
Layout.preferredHeight: constants.iconSizeXSmall |
|
border.color: constants.colorPiechartTotal |
|
color: 'transparent' |
|
radius: constants.iconSizeXSmall/2 |
|
} |
|
Label { |
|
text: qsTr('Total') |
|
} |
|
} |
|
FormattedAmount { |
|
amount: Daemon.currentWallet.totalBalance |
|
} |
|
|
|
RowLayout { |
|
Rectangle { |
|
visible: Daemon.currentWallet.isLightning |
|
Layout.preferredWidth: constants.iconSizeXSmall |
|
Layout.preferredHeight: constants.iconSizeXSmall |
|
color: constants.colorPiechartLightning |
|
} |
|
Label { |
|
visible: Daemon.currentWallet.isLightning |
|
text: qsTr('Lightning') |
|
} |
|
} |
|
FormattedAmount { |
|
visible: Daemon.currentWallet.isLightning |
|
amount: Daemon.currentWallet.lightningBalance |
|
} |
|
|
|
RowLayout { |
|
visible: Daemon.currentWallet.isLightning && !Daemon.currentWallet.lightningBalanceFrozen.isEmpty |
|
Rectangle { |
|
Layout.leftMargin: constants.paddingLarge |
|
Layout.preferredWidth: constants.iconSizeXSmall |
|
Layout.preferredHeight: constants.iconSizeXSmall |
|
color: constants.colorPiechartLightningFrozen |
|
} |
|
Label { |
|
text: qsTr('Frozen') |
|
} |
|
} |
|
FormattedAmount { |
|
visible: Daemon.currentWallet.isLightning && !Daemon.currentWallet.lightningBalanceFrozen.isEmpty |
|
amount: Daemon.currentWallet.lightningBalanceFrozen |
|
} |
|
|
|
RowLayout { |
|
visible: Daemon.currentWallet.isLightning || !Daemon.currentWallet.frozenBalance.isEmpty |
|
Rectangle { |
|
Layout.preferredWidth: constants.iconSizeXSmall |
|
Layout.preferredHeight: constants.iconSizeXSmall |
|
color: constants.colorPiechartOnchain |
|
} |
|
Label { |
|
text: qsTr('On-chain') |
|
} |
|
} |
|
FormattedAmount { |
|
visible: Daemon.currentWallet.isLightning || !Daemon.currentWallet.frozenBalance.isEmpty |
|
amount: Daemon.currentWallet.confirmedBalance |
|
} |
|
|
|
RowLayout { |
|
visible: !Daemon.currentWallet.frozenBalance.isEmpty |
|
Rectangle { |
|
Layout.leftMargin: constants.paddingLarge |
|
Layout.preferredWidth: constants.iconSizeXSmall |
|
Layout.preferredHeight: constants.iconSizeXSmall |
|
color: constants.colorPiechartFrozen |
|
} |
|
Label { |
|
text: qsTr('Frozen') |
|
} |
|
} |
|
FormattedAmount { |
|
amount: Daemon.currentWallet.frozenBalance |
|
visible: !Daemon.currentWallet.frozenBalance.isEmpty |
|
} |
|
|
|
RowLayout { |
|
visible: !Daemon.currentWallet.unconfirmedBalance.isEmpty |
|
Rectangle { |
|
Layout.preferredWidth: constants.iconSizeXSmall |
|
Layout.preferredHeight: constants.iconSizeXSmall |
|
color: constants.colorPiechartUnconfirmed |
|
} |
|
Label { |
|
text: qsTr('Unconfirmed') |
|
} |
|
} |
|
FormattedAmount { |
|
amount: Daemon.currentWallet.unconfirmedBalance |
|
visible: !Daemon.currentWallet.unconfirmedBalance.isEmpty |
|
} |
|
} |
|
|
|
Heading { |
|
text: qsTr('Lightning Liquidity') |
|
visible: Daemon.currentWallet.isLightning |
|
} |
|
GridLayout { |
|
Layout.alignment: Qt.AlignHCenter |
|
visible: Daemon.currentWallet && Daemon.currentWallet.isLightning |
|
columns: 2 |
|
Label { |
|
text: qsTr('Can send') |
|
} |
|
FormattedAmount { |
|
amount: Daemon.currentWallet.lightningCanSend |
|
} |
|
Label { |
|
text: qsTr('Can receive') |
|
} |
|
FormattedAmount { |
|
amount: Daemon.currentWallet.lightningCanReceive |
|
} |
|
} |
|
} |
|
} |
|
} |
|
|
|
ButtonContainer { |
|
Layout.fillWidth: true |
|
FlatButton { |
|
Layout.fillWidth: true |
|
Layout.preferredWidth: 1 |
|
text: qsTr('Lightning swap'); |
|
visible: Daemon.currentWallet.isLightning |
|
enabled: Daemon.currentWallet.lightningCanSend.satsInt > 0 || Daemon.currentWallet.lightningCanReceive.satInt > 0 |
|
icon.source: Qt.resolvedUrl('../../icons/update.png') |
|
onClicked: app.startSwap() |
|
} |
|
|
|
FlatButton { |
|
Layout.fillWidth: true |
|
Layout.preferredWidth: 1 |
|
text: qsTr('Open Channel') |
|
visible: Daemon.currentWallet.isLightning |
|
enabled: Daemon.currentWallet.confirmedBalance.satsInt > 0 |
|
onClicked: { |
|
var dialog = openChannelDialog.createObject(rootItem) |
|
dialog.open() |
|
} |
|
icon.source: '../../icons/lightning.png' |
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
Component { |
|
id: openChannelDialog |
|
OpenChannelDialog { |
|
onClosed: destroy() |
|
} |
|
} |
|
|
|
Connections { |
|
target: Daemon.currentWallet |
|
function onBalanceChanged() { |
|
piechart.updateSlices() |
|
} |
|
} |
|
|
|
Component.onCompleted: { |
|
piechart.updateSlices() |
|
} |
|
|
|
}
|
|
|