Browse Source

Qt receive widgets: factorize code

master
ThomasV 4 years ago
parent
commit
38b155c631
  1. 109
      electrum/gui/qt/main_window.py

109
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))

Loading…
Cancel
Save