receive tab: do not use ButtonsTextEdit, add toggle to toolbar.
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user