URI: 
       tMerge pull request #5822 from SomberNight/201912_qt_receive_tab_address - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 9d83dea0dcace1eded930308c050d143cf9df4ce
   DIR parent 5f6f7da2a1be473a34a125509413d95475011e6a
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Mon,  9 Dec 2019 10:57:14 +0100
       
       Merge pull request #5822 from SomberNight/201912_qt_receive_tab_address
       
       qt receive tab: show plain bitcoin address
       Diffstat:
         M electrum/gui/qt/address_list.py     |       2 +-
         M electrum/gui/qt/main_window.py      |      77 ++++++++++++++++++++-----------
         M electrum/gui/qt/request_list.py     |       9 ++++++---
         M electrum/plugins/hw_wallet/qt.py    |       7 -------
       
       4 files changed, 57 insertions(+), 38 deletions(-)
       ---
   DIR diff --git a/electrum/gui/qt/address_list.py b/electrum/gui/qt/address_list.py
       t@@ -227,7 +227,7 @@ class AddressList(MyTreeView):
                    menu.addAction(_('Details'), lambda: self.parent.show_address(addr))
                    persistent = QPersistentModelIndex(addr_idx)
                    menu.addAction(_("Edit {}").format(addr_column_title), lambda p=persistent: self.edit(QModelIndex(p)))
       -            menu.addAction(_("Request payment"), lambda: self.parent.receive_at(addr))
       +            #menu.addAction(_("Request payment"), lambda: self.parent.receive_at(addr))
                    if self.wallet.can_export():
                        menu.addAction(_("Private key"), lambda: self.parent.show_private_key(addr))
                    if not is_multisig and not self.wallet.is_watching_only():
   DIR diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py
       t@@ -38,7 +38,7 @@ import queue
        import asyncio
        from typing import Optional, TYPE_CHECKING, Sequence, List, Union
        
       -from PyQt5.QtGui import QPixmap, QKeySequence, QIcon, QCursor
       +from PyQt5.QtGui import QPixmap, QKeySequence, QIcon, QCursor, QFont
        from PyQt5.QtCore import Qt, QRect, QStringListModel, QSize, pyqtSignal
        from PyQt5.QtWidgets import (QMessageBox, QComboBox, QSystemTrayIcon, QTabWidget,
                                     QMenuBar, QFileDialog, QCheckBox, QLabel,
       t@@ -89,7 +89,7 @@ from .util import (read_QIcon, ColorScheme, text_dialog, icon_path, WaitingDialo
                           CloseButton, HelpButton, MessageBoxMixin, EnterButton,
                           import_meta_gui, export_meta_gui,
                           filename_field, address_field, char_width_in_lineedit, webopen,
       -                   TRANSACTION_FILE_EXTENSION_FILTER)
       +                   TRANSACTION_FILE_EXTENSION_FILTER, MONOSPACE_FONT)
        from .util import ButtonsTextEdit
        from .installwizard import WIF_HELP_TEXT
        from .history_list import HistoryList, HistoryModel
       t@@ -1003,18 +1003,36 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
                    buttons.addWidget(self.create_lightning_invoice_button)
                grid.addLayout(buttons, 4, 3, 1, 2)
        
       -        self.receive_address_e = ButtonsTextEdit()
       -        self.receive_address_e.addCopyButton(self.app)
       -        self.receive_address_e.setReadOnly(True)
       -        self.receive_address_e.textChanged.connect(self.update_receive_qr)
       -        self.receive_address_e.textChanged.connect(self.update_receive_address_styling)
       -        self.receive_address_e.setFocusPolicy(Qt.ClickFocus)
       +        self.receive_payreq_e = ButtonsTextEdit()
       +        self.receive_payreq_e.addCopyButton(self.app)
       +        self.receive_payreq_e.setReadOnly(True)
       +        self.receive_payreq_e.textChanged.connect(self.update_receive_qr)
       +        self.receive_payreq_e.setFocusPolicy(Qt.ClickFocus)
        
       -        self.receive_qr = QRCodeWidget(fixedSize=230)
       +        self.receive_qr = QRCodeWidget(fixedSize=220)
                self.receive_qr.mouseReleaseEvent = lambda x: self.toggle_qr_window()
                self.receive_qr.enterEvent = lambda x: self.app.setOverrideCursor(QCursor(Qt.PointingHandCursor))
                self.receive_qr.leaveEvent = lambda x: self.app.setOverrideCursor(QCursor(Qt.ArrowCursor))
        
       +        def on_receive_address_changed():
       +            addr = str(self.receive_address_e.text())
       +            self.receive_address_widgets.setVisible(bool(addr))
       +
       +        msg = _('Bitcoin address where the payment should be received. Note that each payment request uses a different Bitcoin address.')
       +        receive_address_label = HelpLabel(_('Receiving address'), msg)
       +
       +        self.receive_address_e = ButtonsTextEdit()
       +        self.receive_address_e.setFont(QFont(MONOSPACE_FONT))
       +        self.receive_address_e.addCopyButton(self.app)
       +        self.receive_address_e.setReadOnly(True)
       +        self.receive_address_e.textChanged.connect(on_receive_address_changed)
       +        self.receive_address_e.textChanged.connect(self.update_receive_address_styling)
       +        self.receive_address_e.setMinimumHeight(6 * char_width_in_lineedit())
       +        self.receive_address_e.setMaximumHeight(10 * char_width_in_lineedit())
       +        qr_show = lambda: self.show_qrcode(str(self.receive_address_e.text()), _('Receiving address'), parent=self)
       +        qr_icon = "qrcode_white.png" if ColorScheme.dark_scheme else "qrcode.png"
       +        self.receive_address_e.addButton(qr_icon, qr_show, _("Show as QR code"))
       +
                self.receive_requests_label = QLabel(_('Incoming payments'))
        
                from .request_list import RequestList
       t@@ -1025,14 +1043,29 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
                vbox_g.addLayout(grid)
                vbox_g.addStretch()
        
       -        self.receive_widgets = QTabWidget()
       -        self.receive_widgets.addTab(self.receive_qr, 'QR Code')
       -        self.receive_widgets.addTab(self.receive_address_e, 'Text')
       +        receive_tabbed_widgets = QTabWidget()
       +        receive_tabbed_widgets.addTab(self.receive_qr, 'QR Code')
       +        receive_tabbed_widgets.addTab(self.receive_payreq_e, 'Text')
       +
       +        vbox_receive_address = QVBoxLayout()
       +        vbox_receive_address.setContentsMargins(0, 0, 0, 0)
       +        vbox_receive_address.setSpacing(0)
       +        vbox_receive_address.addWidget(receive_address_label)
       +        vbox_receive_address.addWidget(self.receive_address_e)
       +        self.receive_address_widgets = QWidget()
       +        self.receive_address_widgets.setLayout(vbox_receive_address)
       +        size_policy = self.receive_address_widgets.sizePolicy()
       +        size_policy.setRetainSizeWhenHidden(True)
       +        self.receive_address_widgets.setSizePolicy(size_policy)
       +
       +        vbox_receive = QVBoxLayout()
       +        vbox_receive.addWidget(receive_tabbed_widgets)
       +        vbox_receive.addWidget(self.receive_address_widgets)
        
                hbox = QHBoxLayout()
                hbox.addLayout(vbox_g)
                hbox.addStretch()
       -        hbox.addWidget(self.receive_widgets)
       +        hbox.addLayout(vbox_receive)
        
                w = QWidget()
                w.searchable_list = self.request_list
       t@@ -1044,6 +1077,8 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
                vbox.addWidget(self.request_list)
                vbox.setStretchFactor(self.request_list, 1000)
        
       +        on_receive_address_changed()
       +
                return w
        
            def delete_request(self, key):
       t@@ -1137,6 +1172,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
                    self.saved = True
        
            def clear_receive_tab(self):
       +        self.receive_payreq_e.setText('')
                self.receive_address_e.setText('')
                self.receive_message_e.setText('')
                self.receive_amount_e.setAmount(None)
       t@@ -1164,14 +1200,8 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
            def show_receive_tab(self):
                self.tabs.setCurrentIndex(self.tabs.indexOf(self.receive_tab))
        
       -    def receive_at(self, addr):
       -        if not bitcoin.is_address(addr):
       -            return
       -        self.show_receive_tab()
       -        self.receive_address_e.setText(addr)
       -
            def update_receive_qr(self):
       -        uri = str(self.receive_address_e.text())
       +        uri = str(self.receive_payreq_e.text())
                if maybe_extract_bolt11_invoice(uri):
                    # encode lightning invoices as uppercase so QR encoding can use
                    # alphanumeric mode; resulting in smaller QR codes
       t@@ -1182,13 +1212,6 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger):
        
            def update_receive_address_styling(self):
                addr = str(self.receive_address_e.text())
       -        # note: 'addr' could be ln invoice or BIP21 URI
       -        try:
       -            uri = util.parse_URI(addr)
       -        except InvalidBitcoinURI:
       -            pass
       -        else:
       -            addr = uri.get('address')
                if is_address(addr) and self.wallet.is_used(addr):
                    self.receive_address_e.setStyleSheet(ColorScheme.RED.as_stylesheet(True))
                    self.receive_address_e.setToolTip(_("This address has already been used. "
   DIR diff --git a/electrum/gui/qt/request_list.py b/electrum/gui/qt/request_list.py
       t@@ -83,9 +83,12 @@ class RequestList(MyTreeView):
                if req is None:
                    self.update()
                    return
       -        is_lightning = request_type == PR_TYPE_LN
       -        text = req.get('invoice') if is_lightning else req.get('URI')
       -        self.parent.receive_address_e.setText(text)
       +        if request_type == PR_TYPE_LN:
       +            self.parent.receive_payreq_e.setText(req.get('invoice'))
       +            self.parent.receive_address_e.setText('')
       +        else:
       +            self.parent.receive_payreq_e.setText(req.get('URI'))
       +            self.parent.receive_address_e.setText(req['address'])
        
            def refresh_status(self):
                m = self.model()
   DIR diff --git a/electrum/plugins/hw_wallet/qt.py b/electrum/plugins/hw_wallet/qt.py
       t@@ -263,13 +263,6 @@ class QtPluginBase(object):
        
                def show_address():
                    addr = str(receive_address_e.text())
       -            # note: 'addr' could be ln invoice or BIP21 URI
       -            try:
       -                uri = parse_URI(addr)
       -            except InvalidBitcoinURI:
       -                pass
       -            else:
       -                addr = uri.get('address')
                    keystore.thread.add(partial(plugin.show_address, wallet, addr, keystore))
                dev_name = f"{plugin.device} ({keystore.label})"
                receive_address_e.addButton("eye1.png", show_address, _("Show on {}").format(dev_name))