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 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)
|
||||||
|
|||||||
Reference in New Issue
Block a user