URI: 
       thide seed options in a popup dialog. simplify seed_dialog classes - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit f8aaa4a50ff1bd77b838f7a21f7d106e638b16c7
   DIR parent f225a269528618a9ee89fb5b57bc253fa17eaa26
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Wed, 12 Oct 2016 15:00:10 +0200
       
       hide seed options in a popup dialog. simplify seed_dialog classes
       
       Diffstat:
         M gui/qt/installwizard.py             |      63 ++++++-------------------------
         M gui/qt/seed_dialog.py               |     187 ++++++++++++++++---------------
       
       2 files changed, 108 insertions(+), 142 deletions(-)
       ---
   DIR diff --git a/gui/qt/installwizard.py b/gui/qt/installwizard.py
       t@@ -11,7 +11,7 @@ from electrum.util import UserCancelled
        from electrum.base_wizard import BaseWizard
        from electrum.i18n import _
        
       -from seed_dialog import SeedDisplayLayout, CreateSeedLayout, SeedInputLayout, TextInputLayout
       +from seed_dialog import SeedLayout, TextInputLayout
        from network_dialog import NetworkChoiceLayout
        from util import *
        from password_dialog import PasswordLayout, PW_NEW
       t@@ -248,42 +248,10 @@ class InstallWizard(QDialog, MessageBoxMixin, BaseWizard):
                self.set_main_layout(slayout.layout(), title, next_enabled=False)
                return slayout.get_text()
        
       -    def seed_input(self, title, message, is_seed):
       -        slayout = SeedInputLayout(self, message, is_seed)
       -        vbox = QVBoxLayout()
       -        vbox.addLayout(slayout.layout())
       -        if self.opt_ext or self.opt_bip39:
       -            vbox.addStretch(1)
       -            vbox.addWidget(QLabel(_('Options') + ':'))
       -        if self.opt_ext:
       -            cb_pass = QCheckBox(_('Extend this seed with custom words'))
       -            vbox.addWidget(cb_pass)
       -        if self.opt_bip39:
       -            def f(b):
       -                if b:
       -                    msg = ' '.join([
       -                        '<b>' + _('Warning') + '</b>' + ': ',
       -                        _('BIP39 seeds may not be supported in the future.'),
       -                        '<br/><br/>',
       -                        _('As technology matures, Bitcoin address generation may change.'),
       -                        _('However, BIP39 seeds do not include a version number.'),
       -                        _('As a result, it is not possible to infer your wallet type from a BIP39 seed.'),
       -                        '<br/><br/>',
       -                        _('We do not guarantee that BIP39 seeds will be supported in future versions of Electrum.'),
       -                        _('We recommend to use seeds generated by Electrum or compatible wallets.'),
       -                    ])
       -                    self.show_warning(msg)
       -                slayout.seed_type_label.setVisible(not b)
       -                slayout.is_seed = (lambda x: bool(x)) if b else is_seed
       -                slayout.on_edit()
       -            cb_bip39 = QCheckBox(_('BIP39 seed'))
       -            cb_bip39.toggled.connect(f)
       -            vbox.addWidget(cb_bip39)
       -        self.set_main_layout(vbox, title, next_enabled=False)
       -        seed = slayout.get_seed()
       -        is_bip39 = cb_bip39.isChecked() if self.opt_bip39 else False
       -        is_ext = cb_pass.isChecked() if self.opt_ext else False
       -        return seed, is_bip39, is_ext
       +    def seed_input(self, title, message, is_seed, options):
       +        slayout = SeedLayout(title=message, is_seed=is_seed, options=options, parent=self)
       +        self.set_main_layout(slayout, title, next_enabled=False)
       +        return slayout.get_seed(), slayout.is_bip39, slayout.is_ext
        
            @wizard_dialog
            def add_xpub_dialog(self, title, message, is_valid, run_next):
       t@@ -302,7 +270,7 @@ class InstallWizard(QDialog, MessageBoxMixin, BaseWizard):
            def restore_seed_dialog(self, run_next, test):
                title = _('Enter Seed')
                message = _('Please enter your seed phrase in order to restore your wallet.')
       -        return self.seed_input(title, message, test)
       +        return self.seed_input(title, message, test, ['ext', 'bip39'])
        
            @wizard_dialog
            def confirm_seed_dialog(self, run_next, test):
       t@@ -313,22 +281,15 @@ class InstallWizard(QDialog, MessageBoxMixin, BaseWizard):
                    _('If you lose your seed, your money will be permanently lost.'),
                    _('To make sure that you have properly saved your seed, please retype it here.')
                ])
       -        self.opt_ext = False
       -        self.opt_bip39 = False
       -        seed, is_bip39, is_ext = self.seed_input(title, message, test)
       +        seed, is_bip39, is_ext = self.seed_input(title, message, test, None)
                return seed
        
            @wizard_dialog
            def show_seed_dialog(self, run_next, seed_text):
       -        vbox = QVBoxLayout()
       -        slayout = CreateSeedLayout(seed_text)
       -        vbox.addLayout(slayout.layout())
       -        vbox.addStretch(1)
       -        vbox.addWidget(QLabel(_('Option') + ':'))
       -        cb_pass = QCheckBox(_('Extend this seed with custom words'))
       -        vbox.addWidget(cb_pass)
       -        self.set_main_layout(vbox)
       -        return cb_pass.isChecked()
       +        title =  _("Your wallet generation seed is:")
       +        slayout = SeedLayout(seed=seed_text, title=title, msg=True, options=['ext'])
       +        self.set_main_layout(slayout)
       +        return slayout.is_ext
        
            def pw_layout(self, msg, kind):
                playout = PasswordLayout(None, msg, kind, self.next_button)
       t@@ -425,7 +386,7 @@ class InstallWizard(QDialog, MessageBoxMixin, BaseWizard):
                    _("Please share it with your cosigners.")
                ])
                vbox = QVBoxLayout()
       -        layout = SeedDisplayLayout(xpub, title=msg, icon=False)
       +        layout = SeedLayout(xpub, title=msg, icon=False)
                vbox.addLayout(layout.layout())
                self.set_main_layout(vbox, _('Master Public Key'))
                return None
   DIR diff --git a/gui/qt/seed_dialog.py b/gui/qt/seed_dialog.py
       t@@ -31,44 +31,6 @@ from util import *
        from qrtextedit import ShowQRTextEdit, ScanQRTextEdit
        
        
       -class SeedLayoutBase(object):
       -
       -    def _seed_layout(self, seed=None, title=None, icon=True):
       -        if seed:
       -            self.seed_e = ShowQRTextEdit()
       -            self.seed_e.setText(seed)
       -        else:
       -            self.seed_e = ScanQRTextEdit()
       -            self.seed_e.setTabChangesFocus(True)
       -        self.seed_e.setMaximumHeight(75)
       -        hbox = QHBoxLayout()
       -        if icon:
       -            logo = QLabel()
       -            logo.setPixmap(QPixmap(":icons/seed.png").scaledToWidth(64))
       -            logo.setMaximumWidth(60)
       -            hbox.addWidget(logo)
       -        hbox.addWidget(self.seed_e)
       -        if not title:
       -            return hbox
       -        vbox = QVBoxLayout()
       -        vbox.addWidget(WWLabel(title))
       -        vbox.addLayout(hbox)
       -        return vbox
       -
       -    def layout(self):
       -        return self.layout_
       -
       -    def seed_edit(self):
       -        return self.seed_e
       -
       -
       -
       -class SeedDisplayLayout(SeedLayoutBase):
       -    def __init__(self, seed, title=None, icon=True):
       -        self.layout_ = self._seed_layout(seed=seed, title=title, icon=icon)
       -
       -
       -
        def seed_warning_msg(seed):
            return ''.join([
                "<p>",
       t@@ -85,50 +47,93 @@ def seed_warning_msg(seed):
            ]) % len(seed.split())
        
        
       -class CreateSeedLayout(SeedLayoutBase):
       -
       -    def __init__(self, seed):
       -        title =  _("Your wallet generation seed is:")
       -        vbox = QVBoxLayout()
       -        vbox.addLayout(self._seed_layout(seed=seed, title=title))
       -        msg = seed_warning_msg(seed)
       -        vbox.addWidget(WWLabel(msg))
       -        self.layout_ = vbox
       -
       -
       -class TextInputLayout(SeedLayoutBase):
        
       -    def __init__(self, parent, title, is_valid):
       -        self.is_valid = is_valid
       +class SeedLayout(QVBoxLayout):
       +    #options
       +    is_bip39 = False
       +    is_ext = False
       +
       +    def seed_options(self):
       +        dialog = QDialog()
       +        vbox = QVBoxLayout(dialog)
       +        if 'ext' in self.options:
       +            cb_ext = QCheckBox(_('Extend this seed with custom words'))
       +            vbox.addWidget(cb_ext)
       +        if 'bip39' in self.options:
       +            def f(b):
       +                if b:
       +                    msg = ' '.join([
       +                        '<b>' + _('Warning') + '</b>' + ': ',
       +                        _('BIP39 seeds may not be supported in the future.'),
       +                        '<br/><br/>',
       +                        _('As technology matures, Bitcoin address generation may change.'),
       +                        _('However, BIP39 seeds do not include a version number.'),
       +                        _('As a result, it is not possible to infer your wallet type from a BIP39 seed.'),
       +                        '<br/><br/>',
       +                        _('We do not guarantee that BIP39 seeds will be supported in future versions of Electrum.'),
       +                        _('We recommend to use seeds generated by Electrum or compatible wallets.'),
       +                    ])
       +                    #self.parent.show_warning(msg)
       +                self.seed_type_label.setVisible(not b)
       +                self.is_seed = (lambda x: bool(x)) if b else self.saved_is_seed
       +                self.on_edit()
       +            cb_bip39 = QCheckBox(_('BIP39 seed'))
       +            cb_bip39.toggled.connect(f)
       +            vbox.addWidget(cb_bip39)
       +        vbox.addLayout(Buttons(OkButton(dialog)))
       +        if not dialog.exec_():
       +            return None
       +        self.is_ext = cb_ext.isChecked() if 'ext' in self.options else False
       +        self.is_bip39 = cb_bip39.isChecked() if 'bip39' in self.options else False
       +
       +
       +    def __init__(self, seed=None, title=None, icon=True, msg=None, options=None, is_seed=None, passphrase=None, parent=None):
       +        QVBoxLayout.__init__(self)
                self.parent = parent
       -        self.layout_ = self._seed_layout(title=title, icon=False)
       -        self.seed_e.textChanged.connect(self.on_edit)
       -
       -    def get_text(self):
       -        return clean_text(self.seed_edit())
       -
       -    def on_edit(self):
       -        self.parent.next_button.setEnabled(self.is_valid(self.get_text()))
       -
       -
       -class SeedInputLayout(SeedLayoutBase):
       -
       -    def __init__(self, parent, title, is_seed):
       -        vbox = QVBoxLayout()
       -        vbox.addLayout(self._seed_layout(title=title))
       +        self.options = options
       +        if title:
       +            self.addWidget(WWLabel(title))
       +        if seed:
       +            self.seed_e = ShowQRTextEdit()
       +            self.seed_e.setText(seed)
       +        else:
       +            self.seed_e = ScanQRTextEdit()
       +            self.seed_e.setTabChangesFocus(True)
       +            self.is_seed = is_seed
       +            self.saved_is_seed = self.is_seed
       +            self.seed_e.textChanged.connect(self.on_edit)
       +        self.seed_e.setMaximumHeight(75)
       +        hbox = QHBoxLayout()
       +        if icon:
       +            logo = QLabel()
       +            logo.setPixmap(QPixmap(":icons/seed.png").scaledToWidth(64))
       +            logo.setMaximumWidth(60)
       +            hbox.addWidget(logo)
       +        hbox.addWidget(self.seed_e)
       +        self.addLayout(hbox)
                hbox = QHBoxLayout()
                hbox.addStretch(1)
       -        hbox.addWidget(QLabel(''))
                self.seed_type_label = QLabel('')
                hbox.addWidget(self.seed_type_label)
       -        vbox.addLayout(hbox)
       -        self.layout_ = vbox
       -        self.parent = parent
       -        self.is_seed = is_seed
       -        self.seed_e.textChanged.connect(self.on_edit)
       +        if options:
       +            opt_button = EnterButton(_('Options'), self.seed_options)
       +            hbox.addWidget(opt_button)
       +            self.addLayout(hbox)
       +        if passphrase:
       +            hbox = QHBoxLayout()
       +            passphrase_e = QLineEdit()
       +            passphrase_e.setText(passphrase)
       +            passphrase_e.setReadOnly(True)
       +            hbox.addWidget(QLabel(_("Your seed extension is") + ':'))
       +            hbox.addWidget(passphrase_e)
       +            self.addLayout(hbox)
       +        self.addStretch(1)
       +        if msg:
       +            msg = seed_warning_msg(seed)
       +            self.addWidget(WWLabel(msg))
        
            def get_seed(self):
       -        return clean_text(self.seed_edit())
       +        return clean_text(self.seed_e)
        
            def on_edit(self):
                from electrum.bitcoin import seed_type
       t@@ -141,29 +146,29 @@ class SeedInputLayout(SeedLayoutBase):
        
        
        
       -class ShowSeedLayout(SeedLayoutBase):
       +class TextInputLayout(SeedLayout):
       +
       +    def __init__(self, parent, title, is_valid):
       +        self.is_valid = is_valid
       +        self.parent = parent
       +        self.layout_ = self._seed_layout(title=title, icon=False)
       +        self.seed_e.textChanged.connect(self.on_edit)
       +
       +    def get_text(self):
       +        return clean_text(self.seed_edit())
       +
       +    def on_edit(self):
       +        self.parent.next_button.setEnabled(self.is_valid(self.get_text()))
        
       -    def __init__(self, seed, passphrase):
       -        title =  _("Your wallet generation seed is:")
       -        vbox = QVBoxLayout()
       -        vbox.addLayout(self._seed_layout(seed=seed, title=title))
       -        if passphrase:
       -            hbox = QHBoxLayout()
       -            passphrase_e = QLineEdit()
       -            passphrase_e.setText(passphrase)
       -            passphrase_e.setReadOnly(True)
       -            hbox.addWidget(QLabel(_("Your seed extension is") + ':'))
       -            hbox.addWidget(passphrase_e)
       -            vbox.addLayout(hbox)
       -        msg = seed_warning_msg(seed)
       -        vbox.addWidget(WWLabel(msg))
       -        self.layout_ = vbox
        
        
        class SeedDialog(WindowModalDialog):
       +
            def __init__(self, parent, seed, passphrase):
                WindowModalDialog.__init__(self, parent, ('Electrum - ' + _('Seed')))
                self.setMinimumWidth(400)
                vbox = QVBoxLayout(self)
       -        vbox.addLayout(ShowSeedLayout(seed, passphrase).layout())
       +        title =  _("Your wallet generation seed is:")
       +        slayout = SeedLayout(title=title, seed=seed, msg=True, passphrase=passphrase)
       +        vbox.addLayout(slayout)
                vbox.addLayout(Buttons(CloseButton(self)))