diff --git a/gui/gui_classic.py b/gui/gui_classic.py index 9ef2a070..ff580636 100644 --- a/gui/gui_classic.py +++ b/gui/gui_classic.py @@ -42,7 +42,7 @@ from electrum.wallet import format_satoshis from electrum.bitcoin import Transaction, is_valid from electrum import mnemonic -import bmp, pyqrnative, qrscanner +import bmp, pyqrnative import exchange_rate from decimal import Decimal @@ -620,24 +620,7 @@ class ElectrumWindow(QMainWindow): self.payto_e = QLineEdit() grid.addWidget(QLabel(_('Pay to')), 1, 0) grid.addWidget(self.payto_e, 1, 1, 1, 3) - - def fill_from_qr(): - qrcode = qrscanner.scan_qr() - if 'address' in qrcode: - self.payto_e.setText(qrcode['address']) - if 'amount' in qrcode: - self.amount_e.setText(str(qrcode['amount'])) - if 'label' in qrcode: - self.message_e.setText(qrcode['label']) - if 'message' in qrcode: - self.message_e.setText("%s (%s)" % (self.message_e.text(), qrcode['message'])) - - - if qrscanner.is_available(): - b = QPushButton(_("Scan QR code")) - b.clicked.connect(fill_from_qr) - grid.addWidget(b, 1, 5) - + grid.addWidget(HelpButton(_('Recipient of the funds.') + '\n\n' + _('You may enter a Bitcoin address, a label from your list of contacts (a list of completions will be proposed), or an alias (email-like address that forwards to a Bitcoin address)')), 1, 4) completer = QCompleter() @@ -714,6 +697,7 @@ class ElectrumWindow(QMainWindow): self.amount_e.textChanged.connect(lambda: entry_changed(False) ) self.fee_e.textChanged.connect(lambda: entry_changed(True) ) + self.wallet.run_hook('create_send_tab',(self,grid)) return w2 diff --git a/gui/qrcodewidget.py b/gui/qrcodewidget.py index a4af8311..8f964b0c 100644 --- a/gui/qrcodewidget.py +++ b/gui/qrcodewidget.py @@ -3,7 +3,7 @@ from PyQt4.QtCore import * import PyQt4.QtCore as QtCore import PyQt4.QtGui as QtGui -import bmp, pyqrnative, qrscanner +import bmp, pyqrnative class QRCodeWidget(QWidget): diff --git a/plugins/pointofsale.py b/plugins/pointofsale.py index 7191cf4e..3b87f8bd 100644 --- a/plugins/pointofsale.py +++ b/plugins/pointofsale.py @@ -8,7 +8,7 @@ import PyQt4.QtCore as QtCore import PyQt4.QtGui as QtGui from electrum_gui.qrcodewidget import QRCodeWidget -from electrum_gui import bmp, pyqrnative, qrscanner +from electrum_gui import bmp, pyqrnative from electrum_gui.i18n import _ diff --git a/gui/qrscanner.py b/plugins/qrscanner.py similarity index 70% rename from gui/qrscanner.py rename to plugins/qrscanner.py index c6e2796b..a13789ef 100644 --- a/gui/qrscanner.py +++ b/plugins/qrscanner.py @@ -8,6 +8,26 @@ except ImportError: from urlparse import urlparse, parse_qs + +def init(wallet): + pass + +def init_gui(gui): + if is_enabled(): + gui.wallet.set_hook('create_send_tab', create_send_tab) + else: + gui.wallet.unset_hook('create_send_tab', create_send_tab) + +def get_info(): + return 'QR scans', "QR Scans" + +def is_enabled(): + return is_available() + +def toggle(gui): + return is_enabled() + + def is_available(): if not zbar: return False @@ -62,6 +82,28 @@ def parse_uri(uri): return result + + +def fill_from_qr(self): + qrcode = qrscanner.scan_qr() + if 'address' in qrcode: + self.payto_e.setText(qrcode['address']) + if 'amount' in qrcode: + self.amount_e.setText(str(qrcode['amount'])) + if 'label' in qrcode: + self.message_e.setText(qrcode['label']) + if 'message' in qrcode: + self.message_e.setText("%s (%s)" % (self.message_e.text(), qrcode['message'])) + + +def create_send_tab(gui, grid): + if qrscanner.is_available(): + b = QPushButton(_("Scan QR code")) + b.clicked.connect(lambda: fill_from_qr(gui)) + grid.addWidget(b, 1, 5) + + + if __name__ == '__main__': # Run some tests