Browse Source

receive tab: do not use ButtonsTextEdit, add toggle to toolbar.

master
ThomasV 3 years ago
parent
commit
b07fe970bf
  1. 48
      electrum/gui/qt/receive_tab.py
  2. 2
      electrum/plugins/hw_wallet/qt.py

48
electrum/gui/qt/receive_tab.py

@ -6,7 +6,7 @@ from typing import Optional, TYPE_CHECKING
from PyQt5.QtGui import QFont, QCursor from PyQt5.QtGui import QFont, QCursor
from PyQt5.QtCore import Qt, QSize from PyQt5.QtCore import Qt, QSize
from PyQt5.QtWidgets import (QComboBox, QLabel, QVBoxLayout, QGridLayout, QLineEdit, from PyQt5.QtWidgets import (QComboBox, QLabel, QVBoxLayout, QGridLayout, QLineEdit, QTextEdit,
QHBoxLayout, QPushButton, QWidget, QSizePolicy, QFrame) QHBoxLayout, QPushButton, QWidget, QSizePolicy, QFrame)
from electrum.bitcoin import is_address from electrum.bitcoin import is_address
@ -73,7 +73,7 @@ class ReceiveTab(QWidget, MessageBoxMixin, Logger):
buttons.addWidget(self.create_invoice_button) buttons.addWidget(self.create_invoice_button)
grid.addLayout(buttons, 4, 0, 1, -1) grid.addLayout(buttons, 4, 0, 1, -1)
self.receive_address_e = ButtonsTextEdit() self.receive_address_e = QTextEdit()
self.receive_address_help_text = WWLabel('') self.receive_address_help_text = WWLabel('')
vbox = QVBoxLayout() vbox = QVBoxLayout()
vbox.addWidget(self.receive_address_help_text) vbox.addWidget(self.receive_address_help_text)
@ -81,9 +81,9 @@ class ReceiveTab(QWidget, MessageBoxMixin, Logger):
self.receive_address_help.setVisible(False) self.receive_address_help.setVisible(False)
self.receive_address_help.setLayout(vbox) self.receive_address_help.setLayout(vbox)
self.receive_URI_e = ButtonsTextEdit() self.receive_URI_e = QTextEdit()
self.receive_URI_help = WWLabel('') self.receive_URI_help = WWLabel('')
self.receive_lightning_e = ButtonsTextEdit() self.receive_lightning_e = QTextEdit()
self.receive_lightning_help_text = WWLabel('') self.receive_lightning_help_text = WWLabel('')
self.receive_rebalance_button = QPushButton('Rebalance') self.receive_rebalance_button = QPushButton('Rebalance')
self.receive_rebalance_button.suggestion = None self.receive_rebalance_button.suggestion = None
@ -114,8 +114,9 @@ class ReceiveTab(QWidget, MessageBoxMixin, Logger):
for e in [self.receive_address_e, self.receive_URI_e, self.receive_lightning_e]: for e in [self.receive_address_e, self.receive_URI_e, self.receive_lightning_e]:
e.setFont(QFont(MONOSPACE_FONT)) e.setFont(QFont(MONOSPACE_FONT))
e.addCopyButton()
e.setReadOnly(True) e.setReadOnly(True)
e.setContextMenuPolicy(Qt.NoContextMenu)
e.setTextInteractionFlags(Qt.NoTextInteraction)
self.receive_lightning_e.textChanged.connect(self.update_receive_widgets) self.receive_lightning_e.textChanged.connect(self.update_receive_widgets)
@ -147,7 +148,15 @@ class ReceiveTab(QWidget, MessageBoxMixin, Logger):
self.receive_requests_label.setMaximumWidth(400) self.receive_requests_label.setMaximumWidth(400)
from .request_list import RequestList from .request_list import RequestList
self.request_list = RequestList(self) self.request_list = RequestList(self)
# toolbar
self.toolbar, menu = self.request_list.create_toolbar_with_menu('') self.toolbar, menu = self.request_list.create_toolbar_with_menu('')
self.toggle_qr_button = QPushButton('')
self.toggle_qr_button.setIcon(read_QIcon('qrcode.png'))
self.toggle_qr_button.setToolTip(_('Switch between text and QR code view'))
self.toggle_qr_button.clicked.connect(self.toggle_receive_qr)
self.toggle_qr_button.setEnabled(False)
self.toolbar.insertWidget(2, self.toggle_qr_button)
# menu
menu.addConfig( menu.addConfig(
_('Add on-chain fallback to lightning requests'), 'bolt11_fallback', True, _('Add on-chain fallback to lightning requests'), 'bolt11_fallback', True,
callback=self.on_toggle_bolt11_fallback) callback=self.on_toggle_bolt11_fallback)
@ -159,6 +168,7 @@ class ReceiveTab(QWidget, MessageBoxMixin, Logger):
menu.addAction(_("Import requests"), self.window.import_requests) menu.addAction(_("Import requests"), self.window.import_requests)
menu.addAction(_("Export requests"), self.window.export_requests) menu.addAction(_("Export requests"), self.window.export_requests)
menu.addAction(_("Delete expired requests"), self.request_list.delete_expired_requests) menu.addAction(_("Delete expired requests"), self.request_list.delete_expired_requests)
self.toolbar_menu = menu
# layout # layout
vbox_g = QVBoxLayout() vbox_g = QVBoxLayout()
@ -216,9 +226,14 @@ class ReceiveTab(QWidget, MessageBoxMixin, Logger):
self.window.do_copy(data, title=title) self.window.do_copy(data, title=title)
self.update_receive_qr_window() self.update_receive_qr_window()
def toggle_receive_qr(self, e): def do_copy(self, e):
if e.button() != Qt.LeftButton: if e.button() != Qt.LeftButton:
return return
i = self.receive_tabs.currentIndex()
title, data = self.get_tab_data(i)
self.window.do_copy(data, title=title)
def toggle_receive_qr(self):
b = not self.config.get('receive_qr_visible', False) b = not self.config.get('receive_qr_visible', False)
self.config.set_key('receive_qr_visible', b) self.config.set_key('receive_qr_visible', b)
self.update_receive_widgets() self.update_receive_widgets()
@ -275,15 +290,16 @@ class ReceiveTab(QWidget, MessageBoxMixin, Logger):
self.receive_address_e.repaint() self.receive_address_e.repaint()
# always show # always show
self.receive_tabs.setVisible(True) self.receive_tabs.setVisible(True)
self.toggle_qr_button.setEnabled(True)
self.update_receive_qr_window() self.update_receive_qr_window()
def get_tab_data(self, i): def get_tab_data(self, i):
if i == 0: if i == 0:
return _('Bitcoin URI'), self.receive_URI_e.text() return _('Bitcoin URI'), self.receive_URI_e.toPlainText()
elif i == 1: elif i == 1:
return _('Address'), self.receive_address_e.text() return _('Address'), self.receive_address_e.toPlainText()
else: else:
return _('Lightning Request'), self.receive_lightning_e.text() return _('Lightning Request'), self.receive_lightning_e.toPlainText()
def update_receive_qr_window(self): def update_receive_qr_window(self):
if self.window.qr_window and self.window.qr_window.isVisible(): if self.window.qr_window and self.window.qr_window.isVisible():
@ -353,17 +369,18 @@ class ReceiveTab(QWidget, MessageBoxMixin, Logger):
self.receive_URI_e.setText('') self.receive_URI_e.setText('')
self.receive_lightning_e.setText('') self.receive_lightning_e.setText('')
self.receive_tabs.setVisible(False) self.receive_tabs.setVisible(False)
self.toggle_qr_button.setEnabled(False)
self.receive_message_e.setText('') self.receive_message_e.setText('')
self.receive_amount_e.setAmount(None) self.receive_amount_e.setAmount(None)
self.request_list.clearSelection() self.request_list.clearSelection()
def update_textedit_warning(self, *, text_e: ButtonsTextEdit, warning_text: Optional[str]): def update_textedit_warning(self, *, text_e: ButtonsTextEdit, warning_text: Optional[str]):
if bool(text_e.text()) and warning_text: if bool(text_e.toPlainText()) and warning_text:
text_e.setStyleSheet(ColorScheme.RED.as_stylesheet(True)) text_e.setStyleSheet(ColorScheme.RED.as_stylesheet(True))
text_e.setToolTip(warning_text) text_e.setToolTip(warning_text)
else: else:
text_e.setStyleSheet("") text_e.setStyleSheet("")
text_e.setToolTip(text_e._default_tooltip) text_e.setToolTip('')
class ReceiveTabWidget(QWidget): class ReceiveTabWidget(QWidget):
@ -376,12 +393,11 @@ class ReceiveTabWidget(QWidget):
QWidget.__init__(self) QWidget.__init__(self)
for w in [textedit, qr, help_widget]: for w in [textedit, qr, help_widget]:
w.setMinimumSize(self.min_size) w.setMinimumSize(self.min_size)
for w in [textedit, qr]: for w in [textedit, qr]:
w.mousePressEvent = receive_tab.toggle_receive_qr w.mousePressEvent = receive_tab.do_copy
tooltip = _('Click to switch between text and QR code view')
w._default_tooltip = tooltip
w.setToolTip(tooltip)
w.setCursor(QCursor(Qt.PointingHandCursor)) w.setCursor(QCursor(Qt.PointingHandCursor))
textedit.setFocusPolicy(Qt.NoFocus) textedit.setFocusPolicy(Qt.NoFocus)
if isinstance(help_widget, QLabel): if isinstance(help_widget, QLabel):
help_widget.setFrameStyle(QFrame.StyledPanel) help_widget.setFrameStyle(QFrame.StyledPanel)
@ -394,7 +410,7 @@ class ReceiveTabWidget(QWidget):
self.setLayout(hbox) self.setLayout(hbox)
def update_visibility(self, is_qr): def update_visibility(self, is_qr):
if str(self.textedit.text()): if str(self.textedit.toPlainText()):
self.help_widget.setVisible(False) self.help_widget.setVisible(False)
self.textedit.setVisible(not is_qr) self.textedit.setVisible(not is_qr)
self.qr.setVisible(is_qr) self.qr.setVisible(is_qr)

2
electrum/plugins/hw_wallet/qt.py

@ -290,7 +290,7 @@ class QtPluginBase(object):
addr = str(receive_address_e.text()) addr = str(receive_address_e.text())
keystore.thread.add(partial(plugin.show_address, wallet, addr, keystore)) keystore.thread.add(partial(plugin.show_address, wallet, addr, keystore))
dev_name = f"{plugin.device} ({keystore.label})" dev_name = f"{plugin.device} ({keystore.label})"
receive_address_e.addButton("eye1.png", show_address, _("Show on {}").format(dev_name)) main_window.receive_tab.toolbar_menu.addAction(read_QIcon("eye1.png"), _("Show address on {}").format(dev_name), show_address)
def create_handler(self, window: Union[ElectrumWindow, InstallWizard]) -> 'QtHandlerBase': def create_handler(self, window: Union[ElectrumWindow, InstallWizard]) -> 'QtHandlerBase':
raise NotImplementedError() raise NotImplementedError()

Loading…
Cancel
Save