From 38b155c631f16e9a8d972ff25570b0eeeb9ae33f Mon Sep 17 00:00:00 2001 From: ThomasV Date: Sun, 29 May 2022 13:54:38 +0200 Subject: [PATCH] Qt receive widgets: factorize code --- electrum/gui/qt/main_window.py | 109 +++++++++++++-------------------- 1 file changed, 44 insertions(+), 65 deletions(-) diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py index 1e4fb2c70..5ba1037ff 100644 --- a/electrum/gui/qt/main_window.py +++ b/electrum/gui/qt/main_window.py @@ -138,6 +138,36 @@ class StatusBarButton(QToolButton): if e.key() in [Qt.Key_Return, Qt.Key_Enter]: self.func() +class ReceiveTabWidget(QWidget): + min_size = QSize(200, 200) + def __init__(self, window, textedit, qr, help_widget): + self.textedit = textedit + self.qr = qr + self.help_widget = help_widget + QWidget.__init__(self) + for w in [textedit, qr, help_widget]: + w.setMinimumSize(self.min_size) + for w in [textedit, qr]: + w.mousePressEvent = window.toggle_receive_qr + tooltip = _('Click to switch between text and QR code view') + w.setToolTip(tooltip) + textedit.setFocusPolicy(Qt.NoFocus) + hbox = QHBoxLayout() + hbox.setContentsMargins(0, 0, 0, 0) + hbox.addWidget(textedit) + hbox.addWidget(help_widget) + hbox.addWidget(qr) + self.setLayout(hbox) + + def update_visibility(self, is_qr): + if str(self.textedit.text()): + self.help_widget.setVisible(False) + self.textedit.setVisible(not is_qr) + self.qr.setVisible(is_qr) + else: + self.help_widget.setVisible(True) + self.textedit.setVisible(False) + self.qr.setVisible(False) def protected(func): '''Password request wrapper. The password is passed to the function @@ -1114,24 +1144,9 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): def update_receive_widgets(self): b = self.config.get('receive_qr_visible', False) - self.receive_URI_e.setVisible(not b) - self.receive_URI_qr.setVisible(b) - if str(self.receive_address_e.text()): - self.receive_address_help.setVisible(False) - self.receive_address_e.setVisible(not b) - self.receive_address_qr.setVisible(b) - else: - self.receive_address_help.setVisible(True) - self.receive_address_e.setVisible(False) - self.receive_address_qr.setVisible(False) - if str(self.receive_lightning_e.text()): - self.receive_lightning_help.setVisible(False) - self.receive_lightning_e.setVisible(not b) - self.receive_lightning_qr.setVisible(b) - else: - self.receive_lightning_help.setVisible(True) - self.receive_lightning_e.setVisible(False) - self.receive_lightning_qr.setVisible(False) + self.receive_URI_widget.update_visibility(b) + self.receive_address_widget.update_visibility(b) + self.receive_lightning_widget.update_visibility(b) def create_receive_tab(self): # A 4-column grid layout. All the stretch is in the last column. @@ -1207,6 +1222,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): self.receive_address_help.setLayout(vbox) self.receive_URI_e = ButtonsTextEdit() + self.receive_URI_help = WWLabel('') self.receive_lightning_e = ButtonsTextEdit() self.receive_lightning_help_text = WWLabel('') self.receive_rebalance_button = QPushButton('Rebalance') @@ -1236,63 +1252,26 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): self.receive_URI_qr = QRCodeWidget() self.receive_lightning_qr = QRCodeWidget() - min_size = QSize(200, 200) for e in [self.receive_address_e, self.receive_URI_e, self.receive_lightning_e]: e.setFont(QFont(MONOSPACE_FONT)) e.addCopyButton(self.app) e.setReadOnly(True) - e.setMinimumSize(min_size) - for w in [self.receive_address_help, self.receive_lightning_help]: - w.setMinimumSize(min_size) - for w in [self.receive_address_qr, self.receive_URI_qr, self.receive_lightning_qr]: - w.setMinimumSize(min_size) self.receive_lightning_e.textChanged.connect(self.update_receive_widgets) - receive_address_layout = QHBoxLayout() - receive_address_layout.setContentsMargins(0, 0, 0, 0) - receive_address_layout.addWidget(self.receive_address_e) - receive_address_layout.addWidget(self.receive_address_qr) - receive_address_layout.addWidget(self.receive_address_help) - receive_URI_layout = QHBoxLayout() - receive_URI_layout.setContentsMargins(0, 0, 0, 0) - receive_URI_layout.addWidget(self.receive_URI_e) - receive_URI_layout.addWidget(self.receive_URI_qr) - receive_lightning_layout = QHBoxLayout() - receive_lightning_layout.setContentsMargins(0, 0, 0, 0) - receive_lightning_layout.addWidget(self.receive_lightning_e) - receive_lightning_layout.addWidget(self.receive_lightning_qr) - receive_lightning_layout.addWidget(self.receive_lightning_help) + self.receive_address_widget = ReceiveTabWidget(self, + self.receive_address_e, self.receive_address_qr, self.receive_address_help) + self.receive_URI_widget = ReceiveTabWidget(self, + self.receive_URI_e, self.receive_URI_qr, self.receive_URI_help) + self.receive_lightning_widget = ReceiveTabWidget(self, + self.receive_lightning_e, self.receive_lightning_qr, self.receive_lightning_help) from .util import VTabWidget self.receive_tabs = VTabWidget() - self.receive_tabs.setMinimumHeight(min_size.height() + 4) # for margins - receive_address_widget = QWidget() - receive_address_widget.setLayout(receive_address_layout) - receive_URI_widget = QWidget() - receive_URI_widget.setLayout(receive_URI_layout) - receive_lightning_widget = QWidget() - receive_lightning_widget.setLayout(receive_lightning_layout) - - self.receive_address_e.setFocusPolicy(Qt.NoFocus) - self.receive_address_e.mousePressEvent = self.toggle_receive_qr - self.receive_address_qr.mousePressEvent = self.toggle_receive_qr - self.receive_URI_e.setFocusPolicy(Qt.NoFocus) - self.receive_URI_e.mousePressEvent = self.toggle_receive_qr - self.receive_URI_qr.mousePressEvent = self.toggle_receive_qr - self.receive_lightning_e.setFocusPolicy(Qt.NoFocus) - self.receive_lightning_e.mousePressEvent = self.toggle_receive_qr - self.receive_lightning_qr.mousePressEvent = self.toggle_receive_qr - # add tooltip to QR and edits, not to the help widget - switch_tooltip = _('Click to switch between text and QR code view') - for w in [ - self.receive_address_e, self.receive_URI_e, self.receive_lightning_e, - self.receive_address_qr, self.receive_URI_qr, self.receive_lightning_qr]: - w.setToolTip(switch_tooltip) - - self.receive_tabs.addTab(receive_URI_widget, read_QIcon("link.png"), _('URI')) - self.receive_tabs.addTab(receive_address_widget, read_QIcon("bitcoin.png"), _('Address')) - self.receive_tabs.addTab(receive_lightning_widget, read_QIcon("lightning.png"), _('Lightning')) + self.receive_tabs.setMinimumHeight(ReceiveTabWidget.min_size.height() + 4) # for margins + self.receive_tabs.addTab(self.receive_URI_widget, read_QIcon("link.png"), _('URI')) + self.receive_tabs.addTab(self.receive_address_widget, read_QIcon("bitcoin.png"), _('Address')) + self.receive_tabs.addTab(self.receive_lightning_widget, read_QIcon("lightning.png"), _('Lightning')) self.receive_tabs.currentChanged.connect(self.update_receive_qr_window) self.receive_tabs.setCurrentIndex(self.config.get('receive_tabs_index', 0)) self.receive_tabs.currentChanged.connect(lambda i: self.config.set_key('receive_tabs_index', i))