Browse Source

qt: fix various issues on send_tab, fixes #8874

master
Sander van Grieken 2 years ago
parent
commit
cac9c4bbb9
No known key found for this signature in database
GPG Key ID: 9BCF8209EA402EBA
  1. 28
      electrum/gui/qt/send_tab.py

28
electrum/gui/qt/send_tab.py

@ -17,14 +17,13 @@ from electrum.util import NotEnoughFunds, NoDynamicFeeEstimates, parse_max_spend
from electrum.invoices import PR_PAID, Invoice, PR_BROADCASTING, PR_BROADCAST from electrum.invoices import PR_PAID, Invoice, PR_BROADCASTING, PR_BROADCAST
from electrum.transaction import Transaction, PartialTxInput, PartialTxOutput from electrum.transaction import Transaction, PartialTxInput, PartialTxOutput
from electrum.network import TxBroadcastError, BestEffortRequestFailed from electrum.network import TxBroadcastError, BestEffortRequestFailed
from electrum.payment_identifier import PaymentIdentifierState, PaymentIdentifierType, PaymentIdentifier, \ from electrum.payment_identifier import (PaymentIdentifierType, PaymentIdentifier, invoice_from_payment_identifier,
invoice_from_payment_identifier, payment_identifier_from_invoice payment_identifier_from_invoice)
from .amountedit import AmountEdit, BTCAmountEdit, SizedFreezableLineEdit 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,
char_width_in_lineedit, get_iconname_camera, get_iconname_qrcode, get_iconname_camera, read_QIcon, ColorScheme, icon_path)
read_QIcon, ColorScheme, icon_path)
from .confirm_tx_dialog import ConfirmTxDialog from .confirm_tx_dialog import ConfirmTxDialog
from .invoice_list import InvoiceList from .invoice_list import InvoiceList
@ -216,7 +215,8 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
pi_error = pi.is_error() if pi.is_valid() else False pi_error = pi.is_error() if pi.is_valid() else False
is_spk_script = pi.type == PaymentIdentifierType.SPK and not pi.spk_is_address is_spk_script = pi.type == PaymentIdentifierType.SPK and not pi.spk_is_address
valid_amount = is_spk_script or bool(self.amount_e.get_amount()) valid_amount = is_spk_script or bool(self.amount_e.get_amount())
self.send_button.setEnabled(pi.is_valid() and not pi_error and valid_amount) ready_to_finalize = not pi.need_resolve()
self.send_button.setEnabled(pi.is_valid() and not pi_error and valid_amount and ready_to_finalize)
def do_paste(self): def do_paste(self):
self.logger.debug('do_paste') self.logger.debug('do_paste')
@ -393,7 +393,8 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
if validated is not None: if validated is not None:
w.setStyleSheet(ColorScheme.GREEN.as_stylesheet(True) if validated else ColorScheme.RED.as_stylesheet(True)) w.setStyleSheet(ColorScheme.GREEN.as_stylesheet(True) if validated else ColorScheme.RED.as_stylesheet(True))
def lock_fields(self, *, def lock_fields(
self, *,
lock_recipient: Optional[bool] = None, lock_recipient: Optional[bool] = None,
lock_amount: Optional[bool] = None, lock_amount: Optional[bool] = None,
lock_max: Optional[bool] = None, lock_max: Optional[bool] = None,
@ -417,7 +418,7 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
if pi.is_multiline(): if pi.is_multiline():
self.lock_fields(lock_recipient=False, lock_amount=True, lock_max=True, lock_description=False) self.lock_fields(lock_recipient=False, lock_amount=True, lock_max=True, lock_description=False)
self.set_field_validated(self.payto_e, validated=pi.is_valid()) # TODO: validated used differently here than openalias self.set_field_validated(self.payto_e, validated=pi.is_valid()) # TODO: validated used differently here than openalias
self.save_button.setEnabled(pi.is_valid()) self.save_button.setEnabled(pi.is_valid())
self.send_button.setEnabled(pi.is_valid()) self.send_button.setEnabled(pi.is_valid())
self.payto_e.setToolTip(pi.get_error() if not pi.is_valid() else '') self.payto_e.setToolTip(pi.get_error() if not pi.is_valid() else '')
@ -453,13 +454,13 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
for w in [self.comment_e, self.comment_label]: for w in [self.comment_e, self.comment_label]:
w.setVisible(bool(fields.comment)) w.setVisible(bool(fields.comment))
if fields.comment: if fields.comment:
self.comment_e.setToolTip(_('Max comment length: %d characters') % fields.comment) self.comment_e.setToolTip(_('Max comment length: {} characters').format(fields.comment))
self.set_field_validated(self.payto_e, validated=fields.validated) self.set_field_validated(self.payto_e, validated=fields.validated)
# LNURLp amount range # LNURLp amount range
if fields.amount_range: if fields.amount_range:
amin, amax = fields.amount_range amin, amax = fields.amount_range
self.amount_e.setToolTip(_('Amount must be between %d and %d sat.') % (amin, amax)) self.amount_e.setToolTip(_('Amount must be between {} and {} sat.').format(amin, amax))
else: else:
self.amount_e.setToolTip('') self.amount_e.setToolTip('')
@ -467,7 +468,10 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
if not lock_max and self.amount_e.text() == '!': if not lock_max and self.amount_e.text() == '!':
self.spend_max() self.spend_max()
pi_unusable = pi.is_error() or (not self.wallet.has_lightning() and not pi.is_onchain()) pi_unusable = pi.is_error() \
or (not self.wallet.has_lightning() and not pi.is_onchain()) \
or pi.need_resolve()
self.logger.debug(f'usable? {not pi_unusable}')
is_spk_script = pi.type == PaymentIdentifierType.SPK and not pi.spk_is_address is_spk_script = pi.type == PaymentIdentifierType.SPK and not pi.spk_is_address
amount_valid = is_spk_script or bool(self.amount_e.get_amount()) amount_valid = is_spk_script or bool(self.amount_e.get_amount())
@ -821,7 +825,7 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
total = 0 total = 0
for output in outputs: for output in outputs:
if parse_max_spend(output.value): if parse_max_spend(output.value):
self.max_button.setChecked(True) # TODO: remove and let spend_max set this? self.max_button.setChecked(True) # TODO: remove and let spend_max set this?
self.spend_max() self.spend_max()
return return
else: else:

Loading…
Cancel
Save