From aef0444867323ef4c8f78f2c1b07ac2ff8f004a7 Mon Sep 17 00:00:00 2001 From: SomberNight Date: Sun, 24 Dec 2017 03:30:04 +0100 Subject: [PATCH] fix #3439: ScanQRTextEdit optionally allows to concat data --- gui/kivy/uix/dialogs/installwizard.py | 6 +++++- gui/qt/installwizard.py | 9 +++++---- gui/qt/qrtextedit.py | 9 +++++++-- gui/qt/seed_dialog.py | 4 ++-- lib/base_wizard.py | 3 ++- 5 files changed, 21 insertions(+), 10 deletions(-) diff --git a/gui/kivy/uix/dialogs/installwizard.py b/gui/kivy/uix/dialogs/installwizard.py index aea257ccd..a8dade46b 100644 --- a/gui/kivy/uix/dialogs/installwizard.py +++ b/gui/kivy/uix/dialogs/installwizard.py @@ -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())) @@ -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): diff --git a/gui/qt/installwizard.py b/gui/qt/installwizard.py index fc5b440a6..a455389e6 100644 --- a/gui/qt/installwizard.py +++ b/gui/qt/installwizard.py @@ -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() @@ -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): diff --git a/gui/qt/qrtextedit.py b/gui/qt/qrtextedit.py index 9e7e3ba6c..aef68f053 100644 --- a/gui/qt/qrtextedit.py +++ b/gui/qt/qrtextedit.py @@ -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" @@ -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): diff --git a/gui/qt/seed_dialog.py b/gui/qt/seed_dialog.py index f1a4e6740..af0498703 100644 --- a/gui/qt/seed_dialog.py +++ b/gui/qt/seed_dialog.py @@ -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) diff --git a/lib/base_wizard.py b/lib/base_wizard.py index 987e2cf50..a080f2fed 100644 --- a/lib/base_wizard.py +++ b/lib/base_wizard.py @@ -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):