electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit 7324817ff3915012b4f978d8b629657c382d7f70
parent 308517d473d18fdc5a377e7296e0e6ab3f6c92b8
Author: ThomasV <thomasv@electrum.org>
Date:   Thu, 12 Dec 2019 17:53:03 +0100

Merge pull request #5833 from SomberNight/201912_qt_blocking_waiting_dialog

Qt: introduce BlockingWaitingDialog
Diffstat:
Melectrum/gui/qt/confirm_tx_dialog.py | 4++--
Melectrum/gui/qt/util.py | 24++++++++++++++++++++++--
2 files changed, 24 insertions(+), 4 deletions(-)

diff --git a/electrum/gui/qt/confirm_tx_dialog.py b/electrum/gui/qt/confirm_tx_dialog.py @@ -34,7 +34,7 @@ from electrum.transaction import Transaction, PartialTransaction from electrum.simple_config import FEERATE_WARNING_HIGH_FEE from electrum.wallet import InternalAddressCorruption -from .util import WindowModalDialog, ColorScheme, HelpLabel, Buttons, CancelButton +from .util import WindowModalDialog, ColorScheme, HelpLabel, Buttons, CancelButton, BlockingWaitingDialog from .fee_slider import FeeSlider @@ -156,7 +156,7 @@ class ConfirmTxDialog(TxEditor, WindowModalDialog): self.send_button.clicked.connect(self.on_send) self.send_button.setDefault(True) vbox.addLayout(Buttons(CancelButton(self), self.send_button)) - self.update_tx() + BlockingWaitingDialog(window, _("Preparing transaction..."), self.update_tx) self.update() self.is_send = False diff --git a/electrum/gui/qt/util.py b/electrum/gui/qt/util.py @@ -9,7 +9,7 @@ import os import webbrowser from functools import partial, lru_cache -from typing import NamedTuple, Callable, Optional, TYPE_CHECKING, Union, List, Dict +from typing import NamedTuple, Callable, Optional, TYPE_CHECKING, Union, List, Dict, Any from PyQt5.QtGui import (QFont, QColor, QCursor, QPixmap, QStandardItem, QPalette, QIcon, QFontMetrics) @@ -280,7 +280,7 @@ class WindowModalDialog(QDialog, MessageBoxMixin): class WaitingDialog(WindowModalDialog): '''Shows a please wait dialog whilst running a task. It is not necessary to maintain a reference to this dialog.''' - def __init__(self, parent, message, task, on_success=None, on_error=None): + def __init__(self, parent: QWidget, message: str, task, on_success=None, on_error=None): assert parent if isinstance(parent, MessageBoxMixin): parent = parent.top_level_window() @@ -305,6 +305,26 @@ class WaitingDialog(WindowModalDialog): self.message_label.setText(msg) +class BlockingWaitingDialog(WindowModalDialog): + """Shows a waiting dialog whilst running a task. + Should be called from the GUI thread. The GUI thread will be blocked while + the task is running; the point of the dialog is to provide feedback + to the user regarding what is going on. + """ + def __init__(self, parent: QWidget, message: str, task: Callable[[], Any]): + assert parent + if isinstance(parent, MessageBoxMixin): + parent = parent.top_level_window() + WindowModalDialog.__init__(self, parent, _("Please wait")) + self.message_label = QLabel(message) + vbox = QVBoxLayout(self) + vbox.addWidget(self.message_label) + self.show() + QCoreApplication.processEvents() + task() + self.accept() + + def line_dialog(parent, title, label, ok_label, default=None): dialog = WindowModalDialog(parent, title) dialog.setMinimumWidth(500)