From 78f297271bd915a5c2c68cd6a8a87b411ed78a08 Mon Sep 17 00:00:00 2001 From: iLLiCiTiT Date: Fri, 30 Apr 2021 19:41:44 +0200 Subject: [PATCH] added basic password dialog --- .../tools/settings/settings/widgets/eye.png | Bin 0 -> 10218 bytes .../tools/settings/settings/widgets/window.py | 101 +++++++++++++++++- 2 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 openpype/tools/settings/settings/widgets/eye.png diff --git a/openpype/tools/settings/settings/widgets/eye.png b/openpype/tools/settings/settings/widgets/eye.png new file mode 100644 index 0000000000000000000000000000000000000000..fe37f0ab6e3f001da73e3ef1a61827c09d40be2e GIT binary patch literal 10218 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 CU>tz} literal 0 HcmV?d00001 diff --git a/openpype/tools/settings/settings/widgets/window.py b/openpype/tools/settings/settings/widgets/window.py index e632a1b2b6..14804ba54a 100644 --- a/openpype/tools/settings/settings/widgets/window.py +++ b/openpype/tools/settings/settings/widgets/window.py @@ -1,4 +1,5 @@ -from Qt import QtWidgets, QtGui +import os +from Qt import QtWidgets, QtGui, QtCore from .categories import ( CategoryState, SystemWidget, @@ -88,3 +89,101 @@ class MainWidget(QtWidgets.QWidget): if self._reset_on_show: self._reset_on_show = False + + +class PasswordDialog(QtWidgets.QDialog): + """Stupidly simple dialog to compare password from general settings.""" + finished = QtCore.Signal(str) + + def __init__(self, password, parent): + super(PasswordDialog, self).__init__(parent) + + self.setWindowTitle("Settings Password") + self.resize(300, 120) + + self._result = "" + self._expected_result = password + + # Password input + password_widget = QtWidgets.QWidget(self) + + password_label = QtWidgets.QLabel("Password:", password_widget) + + password_input = QtWidgets.QLineEdit(password_widget) + password_input.setEchoMode(QtWidgets.QLineEdit.Password) + + current_dir = os.path.join( + os.path.dirname(os.path.abspath(__file__)) + ) + show_password_icon_path = os.path.join(current_dir, "eye.png") + show_password_icon = QtGui.QIcon(show_password_icon_path) + show_password_btn = QtWidgets.QPushButton(password_widget) + show_password_btn.setIcon(show_password_icon) + show_password_btn.setStyleSheet(( + "border: none;padding:0.1em;" + )) + + password_layout = QtWidgets.QHBoxLayout(password_widget) + password_layout.setContentsMargins(0, 0, 0, 0) + password_layout.addWidget(password_label) + password_layout.addWidget(password_input) + password_layout.addWidget(show_password_btn) + + message_label = QtWidgets.QLabel("", self) + + # Buttons + buttons_widget = QtWidgets.QWidget(self) + + ok_btn = QtWidgets.QPushButton("Ok", buttons_widget) + cancel_btn = QtWidgets.QPushButton("Cancel", buttons_widget) + + buttons_layout = QtWidgets.QHBoxLayout(buttons_widget) + buttons_layout.setContentsMargins(0, 0, 0, 0) + buttons_layout.addStretch(1) + buttons_layout.addWidget(ok_btn) + buttons_layout.addWidget(cancel_btn) + + # Main layout + layout = QtWidgets.QVBoxLayout(self) + layout.addSpacing(10) + layout.addWidget(password_widget, 0) + layout.addWidget(message_label, 0) + layout.addStretch(1) + layout.addWidget(buttons_widget, 0) + + password_input.textChanged.connect(self._on_text_change) + ok_btn.clicked.connect(self._on_ok_click) + cancel_btn.clicked.connect(self._on_cancel_click) + show_password_btn.clicked.connect(self._on_show_password) + + self.password_input = password_input + self.message_label = message_label + + def keyPressEvent(self, event): + if event.key() in (QtCore.Qt.Key_Return, QtCore.Qt.Key_Enter): + self._on_ok_click() + return event.accept() + super(PasswordDialog, self).keyPressEvent(event) + + def closeEvent(self, event): + self.finished.emit(self._result) + super(PasswordDialog, self).closeEvent(event) + + def _on_text_change(self, text): + self._result = text + + def _on_ok_click(self): + if self._result == self._expected_result: + self.close() + self.message_label.setText("Invalid password. Try it again...") + + def _on_show_password(self): + if self.password_input.echoMode() == QtWidgets.QLineEdit.Password: + echo_mode = QtWidgets.QLineEdit.Normal + else: + echo_mode = QtWidgets.QLineEdit.Password + self.password_input.setEchoMode(echo_mode) + + def _on_cancel_click(self): + self._result = "" + self.close()