URI: 
       tMerge pull request #3593 from SomberNight/scan_qr_textedit_allow_multi - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 7ae1a4cdebd47848f6b55461adfcbf1428fa24c5
   DIR parent 5db7363cf885ce226685e34c427c1d426f674634
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Sun, 31 Dec 2017 18:04:21 +0100
       
       Merge pull request #3593 from SomberNight/scan_qr_textedit_allow_multi
       
       ScanQRTextEdit optionally allows to concat data
       Diffstat:
         M gui/kivy/uix/dialogs/installwizard… |       6 +++++-
         M gui/qt/installwizard.py             |       9 +++++----
         M gui/qt/main_window.py               |       5 +++--
         M gui/qt/qrtextedit.py                |       9 +++++++--
         M gui/qt/seed_dialog.py               |       4 ++--
         M gui/qt/util.py                      |       4 ++--
         M lib/base_wizard.py                  |       3 ++-
       
       7 files changed, 26 insertions(+), 14 deletions(-)
       ---
   DIR diff --git a/gui/kivy/uix/dialogs/installwizard.py b/gui/kivy/uix/dialogs/installwizard.py
       t@@ -702,6 +702,7 @@ class AddXpubDialog(WizardDialog):
                self.is_valid = kwargs['is_valid']
                self.title = kwargs['title']
                self.message = kwargs['message']
       +        self.allow_multi = kwargs.get('allow_multi', False)
        
            def check_text(self, dt):
                self.ids.next.disabled = not bool(self.is_valid(self.get_text()))
       t@@ -715,7 +716,10 @@ class AddXpubDialog(WizardDialog):
        
            def scan_xpub(self):
                def on_complete(text):
       -            self.ids.text_input.text = text
       +            if self.allow_multi:
       +                self.ids.text_input.text += text + '\n'
       +            else:
       +                self.ids.text_input.text = text
                self.app.scan_qr(on_complete)
        
            def do_paste(self):
   DIR diff --git a/gui/qt/installwizard.py b/gui/qt/installwizard.py
       t@@ -332,8 +332,9 @@ class InstallWizard(QDialog, MessageBoxMixin, BaseWizard):
            def remove_from_recently_open(self, filename):
                self.config.remove_from_recently_open(filename)
        
       -    def text_input(self, title, message, is_valid):
       -        slayout = KeysLayout(parent=self, title=message, is_valid=is_valid)
       +    def text_input(self, title, message, is_valid, allow_multi=False):
       +        slayout = KeysLayout(parent=self, title=message, is_valid=is_valid,
       +                             allow_multi=allow_multi)
                self.exec_layout(slayout, title, next_enabled=False)
                return slayout.get_text()
        
       t@@ -343,8 +344,8 @@ class InstallWizard(QDialog, MessageBoxMixin, BaseWizard):
                return slayout.get_seed(), slayout.is_bip39, slayout.is_ext
        
            @wizard_dialog
       -    def add_xpub_dialog(self, title, message, is_valid, run_next):
       -        return self.text_input(title, message, is_valid)
       +    def add_xpub_dialog(self, title, message, is_valid, run_next, allow_multi=False):
       +        return self.text_input(title, message, is_valid, allow_multi)
        
            @wizard_dialog
            def add_cosigner_dialog(self, run_next, index, is_valid):
   DIR diff --git a/gui/qt/main_window.py b/gui/qt/main_window.py
       t@@ -2423,7 +2423,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
                vbox = QVBoxLayout(d)
                vbox.addWidget(QLabel(_("Enter private keys:")))
        
       -        keys_e = ScanQRTextEdit()
       +        keys_e = ScanQRTextEdit(allow_multi=True)
                keys_e.setTabChangesFocus(True)
                vbox.addWidget(keys_e)
        
       t@@ -2473,7 +2473,8 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
                self.warn_if_watching_only()
        
            def _do_import(self, title, msg, func):
       -        text = text_dialog(self, title, msg + ' :', _('Import'))
       +        text = text_dialog(self, title, msg + ' :', _('Import'),
       +                           allow_multi=True)
                if not text:
                    return
                bad = []
   DIR diff --git a/gui/qt/qrtextedit.py b/gui/qt/qrtextedit.py
       t@@ -33,8 +33,9 @@ class ShowQRTextEdit(ButtonsTextEdit):
        
        class ScanQRTextEdit(ButtonsTextEdit, MessageBoxMixin):
        
       -    def __init__(self, text=""):
       +    def __init__(self, text="", allow_multi=False):
                ButtonsTextEdit.__init__(self, text)
       +        self.allow_multi = allow_multi
                self.setReadOnly(0)
                self.addButton(":icons/file.png", self.file_input, _("Read file"))
                icon = ":icons/qrcode_white.png" if ColorScheme.dark_scheme else ":icons/qrcode.png"
       t@@ -58,7 +59,11 @@ class ScanQRTextEdit(ButtonsTextEdit, MessageBoxMixin):
                    data = ''
                if not data:
                    data = ''
       -        self.setText(data)
       +        if self.allow_multi:
       +            new_text = self.text() + data + '\n'
       +        else:
       +            new_text = data
       +        self.setText(new_text)
                return data
        
            def contextMenuEvent(self, e):
   DIR diff --git a/gui/qt/seed_dialog.py b/gui/qt/seed_dialog.py
       t@@ -153,11 +153,11 @@ class SeedLayout(QVBoxLayout):
        
        
        class KeysLayout(QVBoxLayout):
       -    def __init__(self, parent=None, title=None, is_valid=None):
       +    def __init__(self, parent=None, title=None, is_valid=None, allow_multi=False):
                QVBoxLayout.__init__(self)
                self.parent = parent
                self.is_valid = is_valid
       -        self.text_e = ScanQRTextEdit()
       +        self.text_e = ScanQRTextEdit(allow_multi=allow_multi)
                self.text_e.textChanged.connect(self.on_edit)
                self.addWidget(WWLabel(title))
                self.addWidget(self.text_e)
   DIR diff --git a/gui/qt/util.py b/gui/qt/util.py
       t@@ -251,14 +251,14 @@ def line_dialog(parent, title, label, ok_label, default=None):
            if dialog.exec_():
                return txt.text()
        
       -def text_dialog(parent, title, label, ok_label, default=None):
       +def text_dialog(parent, title, label, ok_label, default=None, allow_multi=False):
            from .qrtextedit import ScanQRTextEdit
            dialog = WindowModalDialog(parent, title)
            dialog.setMinimumWidth(500)
            l = QVBoxLayout()
            dialog.setLayout(l)
            l.addWidget(QLabel(label))
       -    txt = ScanQRTextEdit()
       +    txt = ScanQRTextEdit(allow_multi=allow_multi)
            if default:
                txt.setText(default)
            l.addWidget(txt)
   DIR diff --git a/lib/base_wizard.py b/lib/base_wizard.py
       t@@ -140,7 +140,8 @@ class BaseWizard(object):
                v = lambda x: keystore.is_address_list(x) or keystore.is_private_key_list(x)
                title = _("Import Bitcoin Addresses")
                message = _("Enter a list of Bitcoin addresses (this will create a watching-only wallet), or a list of private keys.")
       -        self.add_xpub_dialog(title=title, message=message, run_next=self.on_import, is_valid=v)
       +        self.add_xpub_dialog(title=title, message=message, run_next=self.on_import,
       +                             is_valid=v, allow_multi=True)
        
            def on_import(self, text):
                if keystore.is_address_list(text):