From 532d19979d71e4655d1999519345f4fe670796f2 Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Tue, 10 May 2022 19:31:25 +0200 Subject: [PATCH] expose additional wallet properties (lightning enabled, balance, masterpubkey) and a few smaller improvements --- .../gui/qml/components/AddressDetails.qml | 1 + electrum/gui/qml/components/TxDetails.qml | 1 + electrum/gui/qml/components/Wallets.qml | 168 ++++++++++++------ .../components/controls/TextHighlightPane.qml | 1 + electrum/gui/qml/qewallet.py | 20 +++ 5 files changed, 137 insertions(+), 54 deletions(-) diff --git a/electrum/gui/qml/components/AddressDetails.qml b/electrum/gui/qml/components/AddressDetails.qml index 8bb606452..79930fe41 100644 --- a/electrum/gui/qml/components/AddressDetails.qml +++ b/electrum/gui/qml/components/AddressDetails.qml @@ -122,6 +122,7 @@ Pane { onClicked: { labelEdit.text = addressdetails.label labelContent.editmode = true + labelEdit.focus = true } } TextField { diff --git a/electrum/gui/qml/components/TxDetails.qml b/electrum/gui/qml/components/TxDetails.qml index bef89c949..e1820a3a6 100644 --- a/electrum/gui/qml/components/TxDetails.qml +++ b/electrum/gui/qml/components/TxDetails.qml @@ -175,6 +175,7 @@ Pane { onClicked: { labelEdit.text = txdetails.label labelContent.editmode = true + labelEdit.focus = true } } TextField { diff --git a/electrum/gui/qml/components/Wallets.qml b/electrum/gui/qml/components/Wallets.qml index 1e6156a32..179a23df9 100644 --- a/electrum/gui/qml/components/Wallets.qml +++ b/electrum/gui/qml/components/Wallets.qml @@ -17,39 +17,71 @@ Pane { width: parent.width height: parent.height - Item { - width: parent.width - height: detailsLayout.height + GridLayout { + id: detailsLayout + Layout.preferredWidth: parent.width + columns: 4 - GridLayout { - id: detailsLayout - width: parent.width - columns: 4 + Label { text: 'Wallet'; Layout.columnSpan: 2; color: Material.accentColor } + Label { text: Daemon.currentWallet.name; Layout.columnSpan: 2 } + + Label { text: 'derivation prefix (BIP32)'; visible: Daemon.currentWallet.isDeterministic; color: Material.accentColor; Layout.columnSpan: 2 } + Label { text: Daemon.currentWallet.derivationPrefix; visible: Daemon.currentWallet.isDeterministic; Layout.columnSpan: 2 } + + Label { text: 'txinType'; color: Material.accentColor } + Label { text: Daemon.currentWallet.txinType } - Label { text: 'Wallet'; Layout.columnSpan: 2 } - Label { text: Daemon.currentWallet.name; Layout.columnSpan: 2; color: Material.accentColor } + Label { text: 'is deterministic'; color: Material.accentColor } + Label { text: Daemon.currentWallet.isDeterministic } - Label { text: 'derivation prefix (BIP32)'; visible: Daemon.currentWallet.isDeterministic; Layout.columnSpan: 2 } - Label { text: Daemon.currentWallet.derivationPrefix; visible: Daemon.currentWallet.isDeterministic; color: Material.accentColor; Layout.columnSpan: 2 } + Label { text: 'is watch only'; color: Material.accentColor } + Label { text: Daemon.currentWallet.isWatchOnly } - Label { text: 'txinType' } - Label { text: Daemon.currentWallet.txinType; color: Material.accentColor } + Label { text: 'is Encrypted'; color: Material.accentColor } + Label { text: Daemon.currentWallet.isEncrypted } - Label { text: 'is deterministic' } - Label { text: Daemon.currentWallet.isDeterministic; color: Material.accentColor } + Label { text: 'is Hardware'; color: Material.accentColor } + Label { text: Daemon.currentWallet.isHardware } - Label { text: 'is watch only' } - Label { text: Daemon.currentWallet.isWatchOnly; color: Material.accentColor } + Label { text: 'is Lightning'; color: Material.accentColor } + Label { text: Daemon.currentWallet.isLightning } - Label { text: 'is Encrypted' } - Label { text: Daemon.currentWallet.isEncrypted; color: Material.accentColor } + Label { text: 'has Seed'; color: Material.accentColor } + Label { text: Daemon.currentWallet.hasSeed; Layout.columnSpan: 3 } - Label { text: 'is Hardware' } - Label { text: Daemon.currentWallet.isHardware; color: Material.accentColor } + Label { Layout.columnSpan:4; text: qsTr('Master Public Key'); color: Material.accentColor } + + TextHighlightPane { + Layout.columnSpan: 4 + Layout.fillWidth: true + padding: 0 + leftPadding: constants.paddingSmall + + RowLayout { + width: parent.width + Label { + text: Daemon.currentWallet.masterPubkey + wrapMode: Text.Wrap + Layout.fillWidth: true + font.pixelSize: constants.fontSizeMedium + } + ToolButton { + icon.source: '../../icons/share.png' + icon.color: 'transparent' + onClicked: { + var dialog = share.createObject(rootItem, { + 'title': qsTr('Master Public Key'), + 'text': Daemon.currentWallet.masterPubkey + }) + dialog.open() + } + } } } -// } + } + + Item { width: 1; height: 1 } Frame { id: detailsFrame @@ -59,49 +91,71 @@ Pane { horizontalPadding: 0 background: PaneInsetBackground {} - ListView { - id: listview - width: parent.width - height: parent.height - clip: true - model: Daemon.availableWallets - - delegate: AbstractButton { - width: ListView.view.width - height: row.height + ColumnLayout { + spacing: 0 + anchors.fill: parent + Item { + Layout.preferredHeight: hitem.height + Layout.preferredWidth: parent.width + Rectangle { + anchors.fill: parent + color: Qt.lighter(Material.background, 1.25) + } RowLayout { - id: row - spacing: 10 - x: constants.paddingSmall - width: parent.width - 2 * constants.paddingSmall - - Image { - id: walleticon - source: "../../icons/wallet.png" - fillMode: Image.PreserveAspectFit - Layout.preferredWidth: constants.iconSizeLarge - Layout.preferredHeight: constants.iconSizeLarge - } - + id: hitem + width: parent.width Label { + text: qsTr('Available wallets') font.pixelSize: constants.fontSizeLarge - text: model.name - Layout.fillWidth: true + color: Material.accentColor } + } + } - Button { - text: 'Open' - onClicked: { - Daemon.load_wallet(model.path) + ListView { + id: listview + Layout.preferredWidth: parent.width + Layout.fillHeight: true + clip: true + model: Daemon.availableWallets + + delegate: AbstractButton { + width: ListView.view.width + height: row.height + + RowLayout { + id: row + spacing: 10 + x: constants.paddingSmall + width: parent.width - 2 * constants.paddingSmall + + Image { + id: walleticon + source: "../../icons/wallet.png" + fillMode: Image.PreserveAspectFit + Layout.preferredWidth: constants.iconSizeLarge + Layout.preferredHeight: constants.iconSizeLarge + } + + Label { + font.pixelSize: constants.fontSizeLarge + text: model.name + Layout.fillWidth: true + } + + Button { + text: 'Open' + onClicked: { + Daemon.load_wallet(model.path) + } } } } - } - ScrollIndicator.vertical: ScrollIndicator { } + ScrollIndicator.vertical: ScrollIndicator { } + } } - } Button { @@ -126,4 +180,10 @@ Pane { } } + Component { + id: share + GenericShareDialog { + onClosed: destroy() + } + } } diff --git a/electrum/gui/qml/components/controls/TextHighlightPane.qml b/electrum/gui/qml/components/controls/TextHighlightPane.qml index 9920d28c7..5ac2e5331 100644 --- a/electrum/gui/qml/components/controls/TextHighlightPane.qml +++ b/electrum/gui/qml/components/controls/TextHighlightPane.qml @@ -6,5 +6,6 @@ import QtQuick.Controls.Material 2.0 Pane { background: Rectangle { color: Qt.lighter(Material.background, 1.15) + radius: constants.paddingSmall } } diff --git a/electrum/gui/qml/qewallet.py b/electrum/gui/qml/qewallet.py index a1f2cf3a9..2b398085f 100644 --- a/electrum/gui/qml/qewallet.py +++ b/electrum/gui/qml/qewallet.py @@ -197,6 +197,15 @@ class QEWallet(QObject): def name(self): return self.wallet.basename() + isLightningChanged = pyqtSignal() + @pyqtProperty(bool, notify=isLightningChanged) + def isLightning(self): + return bool(self.wallet.lnworker) + + @pyqtProperty(bool, notify=dataChanged) + def hasSeed(self): + return self.wallet.has_seed() + @pyqtProperty('QString', notify=dataChanged) def txinType(self): return self.wallet.get_txin_type(self.wallet.dummy_address()) @@ -224,6 +233,10 @@ class QEWallet(QObject): self._logger.debug('multiple keystores not supported yet') return keystores[0].get_derivation_prefix() + @pyqtProperty(str, notify=dataChanged) + def masterPubkey(self): + return self.wallet.get_master_public_key() + balanceChanged = pyqtSignal() @pyqtProperty(QEAmount, notify=balanceChanged) @@ -243,6 +256,13 @@ class QEWallet(QObject): self._confirmedbalance = QEAmount(amount_sat=c+x) return self._confirmedbalance + @pyqtProperty(QEAmount, notify=balanceChanged) + def lightningBalance(self): + if not self.isLightning: + return QEAmount() + self._lightningbalance = QEAmount(amount_sat=self.wallet.lnworker.get_balance()) + return self._lightningbalance + @pyqtSlot('QString', int, int, bool) def send_onchain(self, address, amount, fee=None, rbf=False): self._logger.info('send_onchain: %s %d' % (address,amount))