send_tab: add spinner for network lookup indication
This commit is contained in:
BIN
electrum/gui/icons/spinner.gif
Normal file
BIN
electrum/gui/icons/spinner.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
@@ -4,9 +4,10 @@
|
||||
|
||||
from decimal import Decimal
|
||||
from typing import Optional, TYPE_CHECKING, Sequence, List, Callable
|
||||
from PyQt5.QtCore import pyqtSignal, QPoint
|
||||
from PyQt5.QtCore import pyqtSignal, QPoint, QSize, Qt
|
||||
from PyQt5.QtWidgets import (QLabel, QVBoxLayout, QGridLayout, QHBoxLayout,
|
||||
QWidget, QToolTip, QPushButton, QApplication)
|
||||
from PyQt5.QtGui import QMovie, QColor
|
||||
|
||||
from electrum.i18n import _
|
||||
from electrum.logging import Logger
|
||||
@@ -22,7 +23,7 @@ from .amountedit import AmountEdit, BTCAmountEdit, SizedFreezableLineEdit
|
||||
from .paytoedit import InvalidPaymentIdentifier
|
||||
from .util import (WaitingDialog, HelpLabel, MessageBoxMixin, EnterButton,
|
||||
char_width_in_lineedit, get_iconname_camera, get_iconname_qrcode,
|
||||
read_QIcon, ColorScheme)
|
||||
read_QIcon, ColorScheme, icon_path)
|
||||
from .confirm_tx_dialog import ConfirmTxDialog
|
||||
|
||||
if TYPE_CHECKING:
|
||||
@@ -127,6 +128,15 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
|
||||
self.paste_button.setMaximumWidth(35)
|
||||
grid.addWidget(self.paste_button, 0, 5)
|
||||
|
||||
self.spinner = QMovie(icon_path('spinner.gif'))
|
||||
self.spinner.setScaledSize(QSize(24, 24))
|
||||
self.spinner.setBackgroundColor(QColor('black'))
|
||||
self.spinner_l = QLabel()
|
||||
self.spinner_l.setMargin(5)
|
||||
self.spinner_l.setVisible(False)
|
||||
self.spinner_l.setMovie(self.spinner)
|
||||
grid.addWidget(self.spinner_l, 0, 1, 1, 4, Qt.AlignRight)
|
||||
|
||||
self.save_button = EnterButton(_("Save"), self.do_save_invoice)
|
||||
self.save_button.setEnabled(False)
|
||||
self.send_button = EnterButton(_("Pay") + "...", self.do_pay_or_get_invoice)
|
||||
@@ -185,6 +195,13 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
|
||||
self.notify_merchant_done_signal.connect(self.on_notify_merchant_done)
|
||||
self.payto_e.paymentIdentifierChanged.connect(self._handle_payment_identifier)
|
||||
|
||||
def showSpinner(self, b):
|
||||
self.spinner_l.setVisible(b)
|
||||
if b:
|
||||
self.spinner.start()
|
||||
else:
|
||||
self.spinner.stop()
|
||||
|
||||
def on_amount_changed(self, text):
|
||||
# FIXME: implement full valid amount check to enable/disable Pay button
|
||||
pi_valid = self.payto_e.payment_identifier.is_valid() if self.payto_e.payment_identifier else False
|
||||
@@ -325,12 +342,9 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
|
||||
run_hook('do_clear', self)
|
||||
|
||||
def prepare_for_send_tab_network_lookup(self):
|
||||
self.window.show_send_tab() # FIXME why is this here
|
||||
#for e in [self.payto_e, self.message_e]:
|
||||
# self.payto_e.setFrozen(True)
|
||||
for btn in [self.save_button, self.send_button, self.clear_button]:
|
||||
btn.setEnabled(False)
|
||||
# self.payto_e.setTextNoCheck(_("please wait..."))
|
||||
self.showSpinner(True)
|
||||
|
||||
def payment_request_error(self, error):
|
||||
self.show_message(error)
|
||||
@@ -430,6 +444,7 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
|
||||
# TODO: resolve can happen while typing, we don't want message dialogs to pop up
|
||||
# currently we don't set error for emaillike recipients to avoid just that
|
||||
self.logger.debug('payment identifier resolve done')
|
||||
self.showSpinner(False)
|
||||
if pi.error:
|
||||
self.show_error(pi.error)
|
||||
self.do_clear()
|
||||
@@ -481,6 +496,7 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
|
||||
return self.amount_e.get_amount() or 0
|
||||
|
||||
def on_finalize_done(self, pi):
|
||||
self.showSpinner(False)
|
||||
self.update_fields()
|
||||
if pi.error:
|
||||
self.show_error(pi.error)
|
||||
|
||||
Reference in New Issue
Block a user