E5Gui/E5PasswordMeter.py

Mon, 26 Dec 2011 19:31:22 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 26 Dec 2011 19:31:22 +0100
changeset 1509
c0b5e693b0eb
parent 1127
b1802ebe0066
child 2302
f29e9405c851
permissions
-rw-r--r--

Updated copyright for 2012.

# -*- coding: utf-8 -*-

# Copyright (c) 2011 - 2012 Detlev Offenbach <detlev@die-offenbachs.de>
#

"""
Module implementing a custom widget indicating the strength of a password.
"""

from PyQt4.QtGui import QProgressBar

from Utilities.PasswordChecker import PasswordChecker


class E5PasswordMeter(QProgressBar):
    """
    Class implementing a custom widget indicating the strength of a password.
    """
    def __init__(self, parent=None):
        """
        Constructor
        
        @param parent reference to the parent widget (QWidget)
        """
        super().__init__(parent)
        
        super().setTextVisible(False)
        super().setMaximum(100)
        self.__increment = 100 // (PasswordChecker.Complexity_VeryStrong + 1)
        
        self.__indicatorColors = [
            "#ff0000",      # red
            "#ff8800",      # orange
            "#ffff00",      # yellow
            "#ccff00",      # yellow green
            "#00ff00",      # green
        ]
        self.__noIndicator = "#ffffff"
        
        self.__styleSheetTemplate = \
            "QProgressBar {{"\
            " border: 2px solid black;" \
            " border-radius: 5px;" \
            " text-align: center; }}" \
            "QProgressBar::chunk:horizontal {{" \
            " background-color: {0}; }}"
        self.setStyleSheet(self.__styleSheetTemplate.format(self.__noIndicator))
    
    def checkPasswordStrength(self, password):
        """
        Public slot to check the password strength and update the
        progress bar accordingly.
        
        @param password password to be checked (string)
        """
        strength = PasswordChecker().checkPassword(password)
        self.setStyleSheet(self.__styleSheetTemplate.format(
            self.__indicatorColors[strength]))
        super().setValue((strength + 1) * self.__increment)
    
    def setValue(self, value):
        """
        Public method to set the value.
        
        Overwritten to do nothing.
        """
        pass
    
    def setMaximum(self, value):
        """
        Public method to set the maximum value.
        
        Overwritten to do nothing.
        """
        pass
    
    def setMinimum(self, value):
        """
        Public method to set the minimal value.
        
        Overwritten to do nothing.
        """
        pass

if __name__ == "__main__":
    import sys
    from PyQt4.QtGui import QApplication
    
    app = QApplication(sys.argv)
    meter = E5PasswordMeter()
    meter.show()
    meter.checkPasswordStrength("Blah2+")
    app.exec_()

eric ide

mercurial