URI: 
       tqt swap dialog: attempt at clearer logic (at the cost of more lines) - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit ede9b4382a899b8b12c4c96dc892d54dffc59d11
   DIR parent f453bfe82ecdc5b216f51b18b7cb110c6ba137d2
  HTML Author: SomberNight <somber.night@protonmail.com>
       Date:   Wed, 16 Dec 2020 17:17:30 +0100
       
       qt swap dialog: attempt at clearer logic (at the cost of more lines)
       
       fixes #6853
       
       Diffstat:
         M electrum/gui/qt/swap_dialog.py      |      57 ++++++++++++++++++++-----------
       
       1 file changed, 37 insertions(+), 20 deletions(-)
       ---
   DIR diff --git a/electrum/gui/qt/swap_dialog.py b/electrum/gui/qt/swap_dialog.py
       t@@ -104,6 +104,7 @@ class SwapDialog(WindowModalDialog):
                self.is_reverse = not self.is_reverse
                self.send_amount_e.setAmount(None)
                self.recv_amount_e.setAmount(None)
       +        self.max_button.setChecked(False)
                self.update()
        
            def spend_max(self):
       t@@ -115,19 +116,20 @@ class SwapDialog(WindowModalDialog):
                else:
                    self.send_amount_e.setAmount(None)
                self.update_fee()
       +        self.update_ok_button()
        
            def uncheck_max(self):
                self.max_button.setChecked(False)
                self.update()
        
            def _spend_max_forward_swap(self):
       -        self.update_tx('!')
       +        self._update_tx('!')
                if self.tx:
                    amount = self.tx.output_value_for_address(ln_dummy_address())
                    max_amt = self.swap_manager.get_max_amount()
                    if amount > max_amt:
                        amount = max_amt
       -                self.update_tx(amount)
       +                self._update_tx(amount)
                    if self.tx:
                        amount = self.tx.output_value_for_address(ln_dummy_address())
                        assert amount <= max_amt
       t@@ -155,8 +157,9 @@ class SwapDialog(WindowModalDialog):
                self.recv_amount_e.setStyleSheet(ColorScheme.BLUE.as_stylesheet())
                self.recv_amount_e.follows = False
                self.send_follows = False
       -        self.ok_button.setEnabled((recv_amount is not None)
       -                                  and (self.tx is not None or self.is_reverse))
       +        self._update_tx(send_amount)
       +        self.update_fee()
       +        self.update_ok_button()
        
            def on_recv_edited(self):
                if self.recv_amount_e.follows:
       t@@ -171,8 +174,9 @@ class SwapDialog(WindowModalDialog):
                self.send_amount_e.setStyleSheet(ColorScheme.BLUE.as_stylesheet())
                self.send_amount_e.follows = False
                self.send_follows = True
       -        self.ok_button.setEnabled((send_amount is not None)
       -                                  and (self.tx is not None or self.is_reverse))
       +        self._update_tx(send_amount)
       +        self.update_fee()
       +        self.update_ok_button()
        
            def update(self):
                sm = self.swap_manager
       t@@ -186,25 +190,17 @@ class SwapDialog(WindowModalDialog):
                server_fee_str = '%.2f'%sm.percentage + '%  +  '  + self.window.format_amount(server_mining_fee) + ' ' + self.window.base_unit()
                self.server_fee_label.setText(server_fee_str)
                self.server_fee_label.repaint()  # macOS hack for #6269
       +        self.update_tx()
                self.update_fee()
       +        self.update_ok_button()
        
            def update_fee(self):
       -        self.tx = None
       -        is_max = self.max_button.isChecked()
       +        """Updates self.fee_label. No other side-effects."""
                if self.is_reverse:
       -            if is_max:
       -                self._spend_max_reverse_swap()
                    sm = self.swap_manager
                    fee = sm.get_claim_fee()
                else:
       -            if is_max:
       -                self._spend_max_forward_swap()
       -            else:
       -                onchain_amount = self.send_amount_e.get_amount()
       -                self.update_tx(onchain_amount)
                    fee = self.tx.get_fee() if self.tx else None
       -            if self.tx is None:
       -                self.ok_button.setEnabled(False)
                fee_text = self.window.format_amount(fee) + ' ' + self.window.base_unit() if fee else ''
                self.fee_label.setText(fee_text)
                self.fee_label.repaint()  # macOS hack for #6269
       t@@ -233,10 +229,22 @@ class SwapDialog(WindowModalDialog):
                            return
                    self.window.protect(self.do_normal_swap, (lightning_amount, onchain_amount))
        
       -    def update_tx(self, onchain_amount):
       +    def update_tx(self):
       +        if self.is_reverse:
       +            return
       +        is_max = self.max_button.isChecked()
       +        if is_max:
       +            self._spend_max_forward_swap()
       +        else:
       +            onchain_amount = self.send_amount_e.get_amount()
       +            self._update_tx(onchain_amount)
       +
       +    def _update_tx(self, onchain_amount):
       +        """Updates self.tx. No other side-effects."""
       +        if self.is_reverse:
       +            return
                if onchain_amount is None:
                    self.tx = None
       -            self.ok_button.setEnabled(False)
                    return
                outputs = [PartialTxOutput.from_address_and_value(ln_dummy_address(), onchain_amount)]
                coins = self.window.get_coins()
       t@@ -246,7 +254,16 @@ class SwapDialog(WindowModalDialog):
                        outputs=outputs)
                except (NotEnoughFunds, NoDynamicFeeEstimates) as e:
                    self.tx = None
       -            self.ok_button.setEnabled(False)
       +
       +    def update_ok_button(self):
       +        """Updates self.ok_button. No other side-effects."""
       +        send_amount = self.send_amount_e.get_amount()
       +        recv_amount = self.recv_amount_e.get_amount()
       +        self.ok_button.setEnabled(
       +            (send_amount is not None)
       +            and (recv_amount is not None)
       +            and (self.tx is not None or self.is_reverse)
       +        )
        
            def do_normal_swap(self, lightning_amount, onchain_amount, password):
                tx = self.tx