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 decimal import Decimal
from typing import Optional, TYPE_CHECKING, Sequence, List, Callable 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, from PyQt5.QtWidgets import (QLabel, QVBoxLayout, QGridLayout, QHBoxLayout,
QWidget, QToolTip, QPushButton, QApplication) QWidget, QToolTip, QPushButton, QApplication)
from PyQt5.QtGui import QMovie, QColor
from electrum.i18n import _ from electrum.i18n import _
from electrum.logging import Logger from electrum.logging import Logger
@ -22,7 +23,7 @@ from .amountedit import AmountEdit, BTCAmountEdit, SizedFreezableLineEdit
from .paytoedit import InvalidPaymentIdentifier from .paytoedit import InvalidPaymentIdentifier
from .util import (WaitingDialog, HelpLabel, MessageBoxMixin, EnterButton, from .util import (WaitingDialog, HelpLabel, MessageBoxMixin, EnterButton,
char_width_in_lineedit, get_iconname_camera, get_iconname_qrcode, char_width_in_lineedit, get_iconname_camera, get_iconname_qrcode,
read_QIcon, ColorScheme) read_QIcon, ColorScheme, icon_path)
from .confirm_tx_dialog import ConfirmTxDialog from .confirm_tx_dialog import ConfirmTxDialog
if TYPE_CHECKING: if TYPE_CHECKING:
@ -127,6 +128,15 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
self.paste_button.setMaximumWidth(35) self.paste_button.setMaximumWidth(35)
grid.addWidget(self.paste_button, 0, 5) 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 = EnterButton(_("Save"), self.do_save_invoice)
self.save_button.setEnabled(False) self.save_button.setEnabled(False)
self.send_button = EnterButton(_("Pay") + "...", self.do_pay_or_get_invoice) 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.notify_merchant_done_signal.connect(self.on_notify_merchant_done)
self.payto_e.paymentIdentifierChanged.connect(self._handle_payment_identifier) 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): def on_amount_changed(self, text):
# FIXME: implement full valid amount check to enable/disable Pay button # 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 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) run_hook('do_clear', self)
def prepare_for_send_tab_network_lookup(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]: for btn in [self.save_button, self.send_button, self.clear_button]:
btn.setEnabled(False) btn.setEnabled(False)
# self.payto_e.setTextNoCheck(_("please wait...")) self.showSpinner(True)
def payment_request_error(self, error): def payment_request_error(self, error):
self.show_message(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 # 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 # currently we don't set error for emaillike recipients to avoid just that
self.logger.debug('payment identifier resolve done') self.logger.debug('payment identifier resolve done')
self.showSpinner(False)
if pi.error: if pi.error:
self.show_error(pi.error) self.show_error(pi.error)
self.do_clear() self.do_clear()
@ -481,6 +496,7 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
return self.amount_e.get_amount() or 0 return self.amount_e.get_amount() or 0
def on_finalize_done(self, pi): def on_finalize_done(self, pi):
self.showSpinner(False)
self.update_fields() self.update_fields()
if pi.error: if pi.error:
self.show_error(pi.error) self.show_error(pi.error)

Loading…
Cancel
Save