tqt/kivy: lightning_tx_dialog: show LN invoice - electrum - Electrum Bitcoin wallet
 (HTM) git clone https://git.parazyd.org/electrum
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
       ---
 (DIR) commit b3b87555dcaae777486c5f8c36f9451682f03a7e
 (DIR) parent c3ae1c09656d5e599a9d260c8b0e5ab9d78c94a7
 (HTM) Author: SomberNight <somber.night@protonmail.com>
       Date:   Mon,  1 Mar 2021 20:56:45 +0100
       
       qt/kivy: lightning_tx_dialog: show LN invoice
       
       Diffstat:
         M electrum/gui/kivy/main.kv           |       3 ++-
         M electrum/gui/kivy/main_window.py    |       4 ++--
         M electrum/gui/kivy/uix/dialogs/ligh… |      16 ++++++++++++++++
         M electrum/gui/qt/lightning_tx_dialo… |      17 +++++++++++++++++
       
       4 files changed, 37 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/electrum/gui/kivy/main.kv b/electrum/gui/kivy/main.kv
       t@@ -157,7 +157,8 @@
            touched: False
            padding: '10dp', '10dp'
            background_color: .3, .3, .3, 1
       -    touch_callback: lambda: app.on_ref_label(self)
       +    show_text_with_qr: True
       +    touch_callback: lambda: app.on_ref_label(self, show_text_with_qr=self.show_text_with_qr)
            on_touch_down:
                touch = args[1]
                touched = bool(self.collide_point(*touch.pos))
 (DIR) diff --git a/electrum/gui/kivy/main_window.py b/electrum/gui/kivy/main_window.py
       t@@ -1018,10 +1018,10 @@ class ElectrumWindow(App, Logger):
                self._orientation = 'landscape' if width > height else 'portrait'
                self._ui_mode = 'tablet' if min(width, height) > inch(3.51) else 'phone'
        
       -    def on_ref_label(self, label):
       +    def on_ref_label(self, label, *, show_text_with_qr: bool = True):
                if not label.data:
                    return
       -        self.qr_dialog(label.name, label.data, True)
       +        self.qr_dialog(label.name, label.data, show_text_with_qr)
        
            def show_error(self, error, width='200dp', pos=None, arrow_pos=None,
                           exit=False, icon=f'atlas://{KIVY_GUI_PATH}/theming/light/error', duration=0,
 (DIR) diff --git a/electrum/gui/kivy/uix/dialogs/lightning_tx_dialog.py b/electrum/gui/kivy/uix/dialogs/lightning_tx_dialog.py
       t@@ -13,6 +13,7 @@ from kivy.uix.dropdown import DropDown
        from kivy.uix.button import Button
        
        from electrum.gui.kivy.i18n import _
       +from electrum.invoices import LNInvoice
        
        
        if TYPE_CHECKING:
       t@@ -31,6 +32,7 @@ Builder.load_string('''
            date_str: ''
            payment_hash: ''
            description: ''
       +    invoice: ''
            BoxLayout:
                orientation: 'vertical'
                ScrollView:
       t@@ -69,6 +71,13 @@ Builder.load_string('''
                        TxHashLabel:
                            data: root.preimage
                            name: _('Preimage')
       +                TopLabel:
       +                    text: _('Lightning Invoice')
       +                RefLabel:
       +                    data: root.invoice
       +                    text: root.invoice[:40] + "..."
       +                    name: _('Lightning Invoice')
       +                    show_text_with_qr: False
        
                Widget:
                    size_hint: 1, 0.1
       t@@ -109,3 +118,10 @@ class LightningTxDialog(Factory.Popup):
                self.amount_str = format_amount(-self.amount if self.is_sent else self.amount)
                if tx_item.get('fee_msat'):
                    self.fee_str = format_amount(Decimal(tx_item['fee_msat']) / 1000)
       +        invoice = (self.app.wallet.get_invoice(self.payment_hash)
       +                   or self.app.wallet.get_request(self.payment_hash))
       +        if invoice:
       +            assert isinstance(invoice, LNInvoice), f"{self.invoice!r}"
       +            self.invoice = invoice.invoice
       +        else:
       +            self.invoice = ''
 (DIR) diff --git a/electrum/gui/qt/lightning_tx_dialog.py b/electrum/gui/qt/lightning_tx_dialog.py
       t@@ -31,7 +31,10 @@ from PyQt5.QtGui import QFont
        from PyQt5.QtWidgets import QVBoxLayout, QLabel, QGridLayout
        
        from electrum.i18n import _
       +from electrum.invoices import LNInvoice
       +
        from .util import WindowModalDialog, ButtonsLineEdit, ColorScheme, Buttons, CloseButton, MONOSPACE_FONT
       +from .qrtextedit import ShowQRTextEdit
        
        if TYPE_CHECKING:
            from .main_window import ElectrumWindow
       t@@ -49,6 +52,14 @@ class LightningTxDialog(WindowModalDialog):
                self.amount = Decimal(tx_item['amount_msat']) / 1000
                self.payment_hash = tx_item['payment_hash']
                self.preimage = tx_item['preimage']
       +        invoice = (self.parent.wallet.get_invoice(self.payment_hash)
       +                   or self.parent.wallet.get_request(self.payment_hash))
       +        if invoice:
       +            assert isinstance(invoice, LNInvoice), f"{self.invoice!r}"
       +            self.invoice = invoice.invoice
       +        else:
       +            self.invoice = ''
       +
                self.setMinimumWidth(700)
                vbox = QVBoxLayout()
                self.setLayout(vbox)
       t@@ -83,6 +94,12 @@ class LightningTxDialog(WindowModalDialog):
                self.preimage_e.setFont(QFont(MONOSPACE_FONT))
                vbox.addWidget(self.preimage_e)
        
       +        vbox.addWidget(QLabel(_("Lightning Invoice") + ":"))
       +        self.invoice_e = ShowQRTextEdit(self.invoice, config=parent.config)
       +        self.invoice_e.setMaximumHeight(150)
       +        self.invoice_e.addCopyButton(self.parent.app)
       +        vbox.addWidget(self.invoice_e)
       +
                vbox.addLayout(Buttons(CloseButton(self)))
        
            def show_qr(self, line_edit, title=''):