diff -r 4e8b98454baa -r 800c432b34c8 eric7/WebBrowser/Passwords/PasswordsDialog.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eric7/WebBrowser/Passwords/PasswordsDialog.py Sat May 15 18:45:04 2021 +0200 @@ -0,0 +1,108 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2009 - 2021 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing a dialog to show all saved logins. +""" + +from PyQt5.QtCore import pyqtSlot, QSortFilterProxyModel +from PyQt5.QtGui import QFont, QFontMetrics +from PyQt5.QtWidgets import QDialog + +from E5Gui import E5MessageBox + +from .Ui_PasswordsDialog import Ui_PasswordsDialog + + +class PasswordsDialog(QDialog, Ui_PasswordsDialog): + """ + Class implementing a dialog to show all saved logins. + """ + def __init__(self, parent=None): + """ + Constructor + + @param parent reference to the parent widget (QWidget) + """ + super().__init__(parent) + self.setupUi(self) + + self.__showPasswordsText = self.tr("Show Passwords") + self.__hidePasswordsText = self.tr("Hide Passwords") + self.passwordsButton.setText(self.__showPasswordsText) + + self.removeButton.clicked.connect( + self.passwordsTable.removeSelected) + self.removeAllButton.clicked.connect(self.passwordsTable.removeAll) + + import WebBrowser.WebBrowserWindow + from .PasswordModel import PasswordModel + + self.passwordsTable.verticalHeader().hide() + self.__passwordModel = PasswordModel( + WebBrowser.WebBrowserWindow.WebBrowserWindow.passwordManager(), + self) + self.__proxyModel = QSortFilterProxyModel(self) + self.__proxyModel.setSourceModel(self.__passwordModel) + self.searchEdit.textChanged.connect( + self.__proxyModel.setFilterFixedString) + self.passwordsTable.setModel(self.__proxyModel) + + fm = QFontMetrics(QFont()) + height = fm.height() + fm.height() // 3 + self.passwordsTable.verticalHeader().setDefaultSectionSize(height) + self.passwordsTable.verticalHeader().setMinimumSectionSize(-1) + + self.__calculateHeaderSizes() + + def __calculateHeaderSizes(self): + """ + Private method to calculate the section sizes of the horizontal header. + """ + fm = QFontMetrics(QFont()) + for section in range(self.__passwordModel.columnCount()): + header = self.passwordsTable.horizontalHeader().sectionSizeHint( + section) + if section == 0: + try: + header = fm.horizontalAdvance("averagebiglongsitename") + except AttributeError: + header = fm.width("averagebiglongsitename") + elif section == 1: + try: + header = fm.horizontalAdvance("averagelongusername") + except AttributeError: + header = fm.width("averagelongusername") + elif section == 2: + try: + header = fm.horizontalAdvance("averagelongpassword") + except AttributeError: + header = fm.width("averagelongpassword") + try: + buffer = fm.horizontalAdvance("mm") + except AttributeError: + buffer = fm.width("mm") + header += buffer + self.passwordsTable.horizontalHeader().resizeSection( + section, header) + self.passwordsTable.horizontalHeader().setStretchLastSection(True) + + @pyqtSlot() + def on_passwordsButton_clicked(self): + """ + Private slot to switch the password display mode. + """ + if self.__passwordModel.showPasswords(): + self.__passwordModel.setShowPasswords(False) + self.passwordsButton.setText(self.__showPasswordsText) + else: + res = E5MessageBox.yesNo( + self, + self.tr("Saved Passwords"), + self.tr("""Do you really want to show passwords?""")) + if res: + self.__passwordModel.setShowPasswords(True) + self.passwordsButton.setText(self.__hidePasswordsText) + self.__calculateHeaderSizes()