From 915e132c335f8a4c70538088d7c6ce602de0f054 Mon Sep 17 00:00:00 2001 From: ThomasV Date: Fri, 27 Nov 2020 12:48:32 +0100 Subject: [PATCH] fix 'max' button in Kivy (fix #6169) --- electrum/gui/kivy/main_window.py | 7 ++++++- electrum/gui/kivy/uix/dialogs/amount_dialog.py | 5 ++++- .../kivy/uix/dialogs/lightning_open_channel.py | 3 ++- electrum/gui/kivy/uix/screens.py | 16 +++++++++++----- 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/electrum/gui/kivy/main_window.py b/electrum/gui/kivy/main_window.py index 5e051767e..189763b48 100644 --- a/electrum/gui/kivy/main_window.py +++ b/electrum/gui/kivy/main_window.py @@ -1173,7 +1173,12 @@ class ElectrumWindow(App, Logger): amount, u = str(amount).split() assert u == self.base_unit def cb(amount): - screen.amount = amount + if amount == '!': + screen.is_max = True + screen.amount = self.get_max_amount() + ' ' + self.base_unit + else: + screen.amount = amount + screen.is_max = False popup = AmountDialog(show_max, amount, cb) popup.open() diff --git a/electrum/gui/kivy/uix/dialogs/amount_dialog.py b/electrum/gui/kivy/uix/dialogs/amount_dialog.py index ca95f73cd..673c62f8f 100644 --- a/electrum/gui/kivy/uix/dialogs/amount_dialog.py +++ b/electrum/gui/kivy/uix/dialogs/amount_dialog.py @@ -49,6 +49,7 @@ Builder.load_string(''' amount: '' fiat_amount: '' is_fiat: False + is_max: False on_fiat_amount: if self.is_fiat: self.amount = app.fiat_to_btc(self.fiat_amount) on_amount: if not self.is_fiat: self.fiat_amount = app.btc_to_fiat(self.amount) size_hint: 1, None @@ -92,6 +93,7 @@ Builder.load_string(''' on_release: kb.is_fiat = False kb.amount = app.get_max_amount() + kb.is_max = True Button: size_hint: 1, None height: '48dp' @@ -99,6 +101,7 @@ Builder.load_string(''' on_release: kb.amount = '' kb.fiat_amount = '' + kb.is_max = False Widget: size_hint: 1, 0.2 BoxLayout: @@ -112,7 +115,7 @@ Builder.load_string(''' height: '48dp' text: _('OK') on_release: - root.callback(btc.text if kb.amount else '') + root.callback('!' if kb.is_max else btc.text if kb.amount else '') popup.dismiss() ''') diff --git a/electrum/gui/kivy/uix/dialogs/lightning_open_channel.py b/electrum/gui/kivy/uix/dialogs/lightning_open_channel.py index 6eb73840b..c4e4d2671 100644 --- a/electrum/gui/kivy/uix/dialogs/lightning_open_channel.py +++ b/electrum/gui/kivy/uix/dialogs/lightning_open_channel.py @@ -23,6 +23,7 @@ Builder.load_string(''' title: _('Open Lightning Channel') pubkey: '' amount: '' + is_max: False ipport: '' BoxLayout spacing: '12dp' @@ -154,7 +155,7 @@ class LightningOpenChannelDialog(Factory.Popup, Logger): conn_str = self.pubkey if self.ipport: conn_str += '@' + self.ipport.strip() - amount = self.app.get_amount(self.amount) + amount = '!' if self.is_max else self.app.get_amount(self.amount) self.app.protected('Create a new channel?', self.do_open_channel, (conn_str, amount)) self.dismiss() diff --git a/electrum/gui/kivy/uix/screens.py b/electrum/gui/kivy/uix/screens.py index eab111488..a949cf47a 100644 --- a/electrum/gui/kivy/uix/screens.py +++ b/electrum/gui/kivy/uix/screens.py @@ -196,6 +196,7 @@ class SendScreen(CScreen, Logger): self.address = uri.get('address', '') self.message = uri.get('message', '') self.amount = self.app.format_amount_and_units(amount) if amount else '' + self.is_max = False self.payment_request = None self.is_lightning = False @@ -260,6 +261,7 @@ class SendScreen(CScreen, Logger): self.is_lightning = False self.is_bip70 = False self.parsed_URI = None + self.is_max = False def set_request(self, pr: 'PaymentRequest'): self.address = pr.get_requestor() @@ -298,11 +300,14 @@ class SendScreen(CScreen, Logger): if not self.amount: self.app.show_error(_('Please enter an amount')) return - try: - amount = self.app.get_amount(self.amount) - except: - self.app.show_error(_('Invalid amount') + ':\n' + self.amount) - return + if self.is_max: + amount = '!' + else: + try: + amount = self.app.get_amount(self.amount) + except: + self.app.show_error(_('Invalid amount') + ':\n' + self.amount) + return message = self.message if self.is_lightning: return LNInvoice.from_bech32(address) @@ -439,6 +444,7 @@ class ReceiveScreen(CScreen): def clear(self): self.address = '' self.amount = '' + self.is_max = False # not used for receiving (see app.amount_dialog) self.message = '' self.lnaddr = ''