Browse Source

send_tab: add spinner for network lookup indication

master
Sander van Grieken 3 years ago
parent
commit
49dab82efa
  1. BIN
      electrum/gui/icons/spinner.gif
  2. 28
      electrum/gui/qt/send_tab.py

BIN
electrum/gui/icons/spinner.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

28
electrum/gui/qt/send_tab.py

@ -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)

Loading…
Cancel
Save