URI: 
       tEmbed password dialog. - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit f94d2db9a443f61057af3bdb2fbc9950e3237754
   DIR parent 2ae3543dc4e84e5e9c1816a54be50057bdb673e9
  HTML Author: Neil Booth <kyuupichan@gmail.com>
       Date:   Tue, 12 Jan 2016 23:32:13 +0900
       
       Embed password dialog.
       
       Diffstat:
         M gui/qt/installwizard.py             |      34 +++++++++++++++++--------------
         M gui/qt/password_dialog.py           |      64 ++++++++++++++++++++-----------
         M gui/qt/seed_dialog.py               |       2 +-
       
       3 files changed, 62 insertions(+), 38 deletions(-)
       ---
   DIR diff --git a/gui/qt/installwizard.py b/gui/qt/installwizard.py
       t@@ -10,7 +10,7 @@ from electrum.i18n import _
        import seed_dialog
        from network_dialog import NetworkDialog
        from util import *
       -from password_dialog import PasswordDialog
       +from password_dialog import PasswordLayout, PW_NEW, PW_PASSPHRASE
        
        from electrum.wallet import Wallet
        from electrum.mnemonic import prepare_seed
       t@@ -71,10 +71,11 @@ class InstallWizard(WindowModalDialog, WizardBase):
                # Set for base base class
                self.plugins = plugins
                self.language_for_seed = config.get('language')
       -        self.setMinimumSize(575, 400)
       -        self.setMaximumSize(575, 400)
       +        self.setMinimumSize(518, 360)
       +        self.setMaximumSize(518, 360)
                self.connect(self, QtCore.SIGNAL('accept'), self.accept)
                self.title = QLabel()
       +        self.title.setWordWrap(True)
                self.main_widget = QWidget()
                self.cancel_button = QPushButton(_("Cancel"), self)
                self.next_button = QPushButton(_("Next"), self)
       t@@ -112,8 +113,10 @@ class InstallWizard(WindowModalDialog, WizardBase):
                self.logo.setPixmap(QPixmap(filename).scaledToWidth(70))
                return prior_filename
        
       -    def set_main_layout(self, layout, title):
       -        self.title.setText(title)
       +    def set_main_layout(self, layout, title=None):
       +        self.title.setText(title or "")
       +        self.title.setVisible(bool(title))
       +        # Get rid of any prior layout
                prior_layout = self.main_widget.layout()
                if prior_layout:
                    QWidget().setLayout(prior_layout)
       t@@ -124,7 +127,7 @@ class InstallWizard(WindowModalDialog, WizardBase):
                self.please_wait.setVisible(False)
                if not self.loop.exec_():
                    raise UserCancelled
       -        self.title.setText("")
       +        self.title.setVisible(False)
                self.cancel_button.setEnabled(False)
                self.next_button.setEnabled(False)
                self.main_widget.setVisible(False)
       t@@ -178,12 +181,13 @@ class InstallWizard(WindowModalDialog, WizardBase):
                self.app.clipboard().clear()
                self.verify_seed(seed, is_valid)
        
       -    def pw_dialog(self, msg, kind):
       -        dialog = PasswordDialog(self, None, msg, kind)
       -        accepted, p, pass_text = dialog.run()
       -        if not accepted:
       -            raise UserCancelled
       -        return pass_text
       +    def pw_layout(self, msg, kind):
       +        hbox = QHBoxLayout()
       +        playout = PasswordLayout(None, msg, kind, self.next_button)
       +        hbox.addLayout(playout.layout())
       +        #hbox.addStretch(1)
       +        self.set_main_layout(hbox)
       +        return playout.new_password()
        
            def request_passphrase(self, device_text, restore=True):
                """Request a passphrase for a wallet from the given device and
       t@@ -191,12 +195,12 @@ class InstallWizard(WindowModalDialog, WizardBase):
                a unicode string."""
                if restore:
                    msg = MSG_RESTORE_PASSPHRASE % device_text
       -        return unicode(self.pw_dialog(msg, PasswordDialog.PW_PASSPHRASE) or '')
       +        return unicode(self.pw_layout(msg, PW_PASSPHRASE) or '')
        
            def request_password(self, msg=None):
                """Request the user enter a new password and confirm it.  Return
                the password or None for no password."""
       -        return self.pw_dialog(msg or MSG_ENTER_PASSWORD, PasswordDialog.PW_NEW)
       +        return self.pw_layout(msg or MSG_ENTER_PASSWORD, PW_NEW)
        
            def choose_server(self, network):
                self.network_dialog(network)
       t@@ -246,7 +250,6 @@ class InstallWizard(WindowModalDialog, WizardBase):
        
                actions = [_("Create a new wallet"),
                           _("Restore a wallet or import keys")]
       -
                title = _("Electrum could not find an existing wallet.")
                actions_clayout = ChoicesLayout(_("What do you want to do?"), actions)
                wallet_clayout = ChoicesLayout(_("Wallet kind:"), wallet_kinds)
       t@@ -255,6 +258,7 @@ class InstallWizard(WindowModalDialog, WizardBase):
                vbox.addLayout(actions_clayout.layout())
                vbox.addLayout(wallet_clayout.layout())
                self.set_main_layout(vbox, title)
       +
                action = ['create', 'restore'][actions_clayout.selected_index()]
                return action, wallet_clayout.selected_index()
        
   DIR diff --git a/gui/qt/password_dialog.py b/gui/qt/password_dialog.py
       t@@ -39,13 +39,15 @@ def check_password_strength(password):
            password_strength = {0:"Weak",1:"Medium",2:"Strong",3:"Very Strong"}
            return password_strength[min(3, int(score))]
        
       -class PasswordDialog(WindowModalDialog):
        
       -    PW_NEW, PW_CHANGE, PW_PASSPHRASE = range(0, 3)
       +PW_NEW, PW_CHANGE, PW_PASSPHRASE = range(0, 3)
       +
       +
       +class PasswordLayout(object):
       +
            titles = [_("Enter Password"), _("Change Password"), _("Enter Passphrase")]
        
       -    def __init__(self, parent, wallet, msg, kind):
       -        WindowModalDialog.__init__(self, parent, self.titles[kind])
       +    def __init__(self, wallet, msg, kind, OK_button):
                self.wallet = wallet
        
                self.pw = QLineEdit()
       t@@ -55,6 +57,7 @@ class PasswordDialog(WindowModalDialog):
                self.conf_pw = QLineEdit()
                self.conf_pw.setEchoMode(2)
                self.kind = kind
       +        self.OK_button = OK_button
        
                vbox = QVBoxLayout()
                label = QLabel(msg + "\n")
       t@@ -66,7 +69,7 @@ class PasswordDialog(WindowModalDialog):
                grid.setColumnMinimumWidth(1, 100)
                grid.setColumnStretch(1,1)
        
       -        if kind == self.PW_PASSPHRASE:
       +        if kind == PW_PASSPHRASE:
                    vbox.addWidget(label)
                    msgs = [_('Passphrase:'), _('Confirm Passphrase:')]
                else:
       t@@ -82,7 +85,7 @@ class PasswordDialog(WindowModalDialog):
                    logo_grid.addWidget(label, 0, 1, 1, 2)
                    vbox.addLayout(logo_grid)
        
       -            m1 = _('New Password:') if kind == self.PW_NEW else _('Password:')
       +            m1 = _('New Password:') if kind == PW_NEW else _('Password:')
                    msgs = [m1, _('Confirm Password:')]
                    if wallet and wallet.use_encryption:
                        grid.addWidget(QLabel(_('Current Password:')), 0, 0)
       t@@ -100,18 +103,23 @@ class PasswordDialog(WindowModalDialog):
                vbox.addLayout(grid)
        
                # Password Strength Label
       -        if kind != self.PW_PASSPHRASE:
       +        if kind != PW_PASSPHRASE:
                    self.pw_strength = QLabel()
                    grid.addWidget(self.pw_strength, 3, 0, 1, 2)
                    self.new_pw.textChanged.connect(self.pw_changed)
        
       -        self.new_pw.textChanged.connect(self.check_OKButton)
       -        self.conf_pw.textChanged.connect(self.check_OKButton)
       +        def enable_OK():
       +            OK_button.setEnabled(self.new_pw.text() == self.conf_pw.text())
       +        self.new_pw.textChanged.connect(enable_OK)
       +        self.conf_pw.textChanged.connect(enable_OK)
        
       -        self.OKButton = OkButton(self)
       -        vbox.addStretch(1)
       -        vbox.addLayout(Buttons(CancelButton(self), self.OKButton))
       -        self.setLayout(vbox)
       +        self.vbox = vbox
       +
       +    def title(self):
       +        return self.titles[self.kind]
       +
       +    def layout(self):
       +        return self.vbox
        
            def pw_changed(self):
                password = self.new_pw.text()
       t@@ -125,17 +133,29 @@ class PasswordDialog(WindowModalDialog):
                    label = ""
                self.pw_strength.setText(label)
        
       -    def check_OKButton(self):
       -        self.OKButton.setEnabled(self.new_pw.text() == self.conf_pw.text())
       +    def old_password(self):
       +        if self.kind == PW_CHANGE:
       +            return unicode(self.pw.text()) or None
       +        return None
       +
       +    def new_password(self):
       +        return unicode(self.new_pw.text()) or None
       +
       +
       +class PasswordDialog(WindowModalDialog):
       +
       +    def __init__(self, parent, wallet, msg, kind):
       +        WindowModalDialog.__init__(self)
       +        OK_button = OkButton(self)
       +        self.playout = PasswordLayout(wallet, msg, kind, OK_button)
       +        self.setTitle(slef.playout.title())
       +        vbox = QVBoxLayout(self)
       +        vbox.addLayout(self.playout.layout())
       +        vbox.addStretch(1)
       +        vbox.addLayout(Buttons(CancelButton(self), OK_button))
        
            def run(self):
                if not self.exec_():
                    return False, None, None
        
       -        if self.kind == self.PW_CHANGE:
       -            old_password = unicode(self.pw.text()) or None
       -        else:
       -            old_password = None
       -        new_password = unicode(self.new_pw.text()) or None
       -
       -        return True, old_password, new_password
       +        return True, self.playout.old_password(), self.playout.new_password()
   DIR diff --git a/gui/qt/seed_dialog.py b/gui/qt/seed_dialog.py
       t@@ -63,7 +63,7 @@ class SeedLayout(object):
                    "<p>",
                    _("Please save these %d words on paper (order is important). "),
                    _("This seed will allow you to recover your wallet in case "
       -              "of computer failure.") + "<br/>",
       +              "of computer failure."),
                    "</p>",
                    "<b>" + _("WARNING") + ":</b> ",
                    "<ul>",