Browse Source

qml: fix lifecycle issues with swap helper.

previously tied to Channels view, now dynamically created and parented to app
master
Sander van Grieken 3 years ago
parent
commit
15d73daf8d
  1. 27
      electrum/gui/qml/components/Channels.qml
  2. 33
      electrum/gui/qml/components/SwapDialog.qml
  3. 1
      electrum/gui/qml/components/SwapProgressDialog.qml
  4. 26
      electrum/gui/qml/components/main.qml
  5. 1
      electrum/gui/qml/qeswaphelper.py

27
electrum/gui/qml/components/Channels.qml

@ -110,8 +110,13 @@ Pane {
Layout.preferredWidth: 1 Layout.preferredWidth: 1
text: qsTr('Swap'); text: qsTr('Swap');
visible: Daemon.currentWallet.lightningCanSend.satsInt > 0 || Daemon.currentWallet.lightningCanReceive.satInt > 0 visible: Daemon.currentWallet.lightningCanSend.satsInt > 0 || Daemon.currentWallet.lightningCanReceive.satInt > 0
icon.source: '../../icons/status_waiting.png' icon.source: Qt.resolvedUrl('../../icons/update.png')
onClicked: { onClicked: {
var swaphelper = app.swaphelper.createObject(app)
swaphelper.swapStarted.connect(function() {
var dialog = swapProgressDialog.createObject(app, { swaphelper: swaphelper })
dialog.open()
})
var dialog = swapDialog.createObject(root, { swaphelper: swaphelper }) var dialog = swapDialog.createObject(root, { swaphelper: swaphelper })
dialog.open() dialog.open()
} }
@ -141,26 +146,6 @@ Pane {
} }
SwapHelper {
id: swaphelper
wallet: Daemon.currentWallet
onConfirm: {
var dialog = app.messageDialog.createObject(app, {text: message, yesno: true})
dialog.yesClicked.connect(function() {
dialog.close()
swaphelper.executeSwap(true)
})
dialog.open()
}
onAuthRequired: {
app.handleAuthRequired(swaphelper, method)
}
onSwapStarted: {
var dialog = swapProgressDialog.createObject(app, { swaphelper: swaphelper })
dialog.open()
}
}
Component { Component {
id: swapDialog id: swapDialog
SwapDialog { SwapDialog {

33
electrum/gui/qml/components/SwapDialog.qml

@ -50,7 +50,9 @@ ElDialog {
Image { Image {
Layout.preferredWidth: constants.iconSizeSmall Layout.preferredWidth: constants.iconSizeSmall
Layout.preferredHeight: constants.iconSizeSmall Layout.preferredHeight: constants.iconSizeSmall
source: swaphelper.isReverse ? '../../icons/lightning.png' : '../../icons/bitcoin.png' source: swaphelper.isReverse
? '../../icons/lightning.png'
: '../../icons/bitcoin.png'
visible: swaphelper.valid visible: swaphelper.valid
} }
} }
@ -83,7 +85,9 @@ ElDialog {
Image { Image {
Layout.preferredWidth: constants.iconSizeSmall Layout.preferredWidth: constants.iconSizeSmall
Layout.preferredHeight: constants.iconSizeSmall Layout.preferredHeight: constants.iconSizeSmall
source: swaphelper.isReverse ? '../../icons/bitcoin.png' : '../../icons/lightning.png' source: swaphelper.isReverse
? '../../icons/bitcoin.png'
: '../../icons/lightning.png'
visible: swaphelper.valid visible: swaphelper.valid
} }
} }
@ -123,7 +127,9 @@ ElDialog {
color: Material.accentColor color: Material.accentColor
} }
Label { Label {
text: '(' + swaphelper.serverfeeperc + ')' text: swaphelper.serverfeeperc
? '(' + swaphelper.serverfeeperc + ')'
: ''
} }
} }
@ -164,15 +170,6 @@ ElDialog {
if (activeFocus) if (activeFocus)
swaphelper.sliderPos = value swaphelper.sliderPos = value
} }
Component.onCompleted: {
value = swaphelper.sliderPos
}
Connections {
target: swaphelper
function onSliderPosChanged() {
swapslider.value = swaphelper.sliderPos
}
}
} }
InfoTextArea { InfoTextArea {
@ -190,7 +187,7 @@ ElDialog {
Layout.columnSpan: 2 Layout.columnSpan: 2
Layout.fillWidth: true Layout.fillWidth: true
text: qsTr('Swap') text: qsTr('Swap')
icon.source: '../../icons/status_waiting.png' icon.source: Qt.resolvedUrl('../../icons/update.png')
enabled: swaphelper.valid enabled: swaphelper.valid
onClicked: swaphelper.executeSwap() onClicked: swaphelper.executeSwap()
} }
@ -198,8 +195,16 @@ ElDialog {
Connections { Connections {
target: swaphelper target: swaphelper
function onSwapStarted() { function onSliderPosChanged() {
swapslider.value = swaphelper.sliderPos
}
function onSwapSuccess() {
root.close() root.close()
} }
} }
Component.onCompleted: {
swapslider.value = swaphelper.sliderPos
}
} }

1
electrum/gui/qml/components/SwapProgressDialog.qml

@ -15,6 +15,7 @@ ElDialog {
width: parent.width width: parent.width
height: parent.height height: parent.height
iconSource: Qt.resolvedUrl('../../icons/update.png')
title: swaphelper.isReverse title: swaphelper.isReverse
? qsTr('Reverse swap...') ? qsTr('Reverse swap...')
: qsTr('Swap...') : qsTr('Swap...')

26
electrum/gui/qml/components/main.qml

@ -7,6 +7,8 @@ import QtQuick.Controls.Material.impl 2.12
import QtQml 2.6 import QtQml 2.6
import QtMultimedia 5.6 import QtMultimedia 5.6
import org.electrum 1.0
import "controls" import "controls"
ApplicationWindow ApplicationWindow
@ -274,6 +276,30 @@ ApplicationWindow
} }
} }
property alias swaphelper: _swaphelper
Component {
id: _swaphelper
SwapHelper {
id: __swaphelper
wallet: Daemon.currentWallet
onConfirm: {
var dialog = app.messageDialog.createObject(app, {text: message, yesno: true})
dialog.yesClicked.connect(function() {
dialog.close()
__swaphelper.executeSwap(true)
})
dialog.open()
}
onAuthRequired: {
app.handleAuthRequired(__swaphelper, method)
}
onError: {
var dialog = app.messageDialog.createObject(app, { text: message })
dialog.open()
}
}
}
Component.onCompleted: { Component.onCompleted: {
coverTimer.start() coverTimer.start()

1
electrum/gui/qml/qeswaphelper.py

@ -19,6 +19,7 @@ class QESwapHelper(AuthMixin, QObject):
_logger = get_logger(__name__) _logger = get_logger(__name__)
confirm = pyqtSignal([str], arguments=['message']) confirm = pyqtSignal([str], arguments=['message'])
error = pyqtSignal([str], arguments=['message'])
swapStarted = pyqtSignal() swapStarted = pyqtSignal()
swapSuccess = pyqtSignal() swapSuccess = pyqtSignal()
swapFailed = pyqtSignal([str], arguments=['message']) swapFailed = pyqtSignal([str], arguments=['message'])

Loading…
Cancel
Save