mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-25 05:14:40 +01:00
163 lines
5.5 KiB
Python
163 lines
5.5 KiB
Python
from qtpy import QtWidgets, QtCore, QtGui
|
|
|
|
from openpype import style
|
|
from openpype.resources import get_resource
|
|
|
|
from openpype.settings import get_system_settings
|
|
from openpype.settings.lib import (
|
|
get_local_settings,
|
|
save_local_settings
|
|
)
|
|
|
|
|
|
class PressHoverButton(QtWidgets.QPushButton):
|
|
_mouse_pressed = False
|
|
_mouse_hovered = False
|
|
change_state = QtCore.Signal(bool)
|
|
|
|
def mousePressEvent(self, event):
|
|
self._mouse_pressed = True
|
|
self._mouse_hovered = True
|
|
self.change_state.emit(self._mouse_hovered)
|
|
super(PressHoverButton, self).mousePressEvent(event)
|
|
|
|
def mouseReleaseEvent(self, event):
|
|
self._mouse_pressed = False
|
|
self._mouse_hovered = False
|
|
self.change_state.emit(self._mouse_hovered)
|
|
super(PressHoverButton, self).mouseReleaseEvent(event)
|
|
|
|
def mouseMoveEvent(self, event):
|
|
mouse_pos = self.mapFromGlobal(QtGui.QCursor.pos())
|
|
under_mouse = self.rect().contains(mouse_pos)
|
|
if under_mouse != self._mouse_hovered:
|
|
self._mouse_hovered = under_mouse
|
|
self.change_state.emit(self._mouse_hovered)
|
|
|
|
super(PressHoverButton, self).mouseMoveEvent(event)
|
|
|
|
|
|
class PasswordDialog(QtWidgets.QDialog):
|
|
"""Stupidly simple dialog to compare password from general settings."""
|
|
finished = QtCore.Signal(bool)
|
|
|
|
def __init__(self, parent=None, allow_remember=True):
|
|
super(PasswordDialog, self).__init__(parent)
|
|
|
|
self.setWindowTitle("Admin Password")
|
|
self.resize(300, 120)
|
|
|
|
system_settings = get_system_settings()
|
|
|
|
self._expected_result = (
|
|
system_settings["general"].get("admin_password")
|
|
)
|
|
self._final_result = None
|
|
self._allow_remember = allow_remember
|
|
|
|
# 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)
|
|
|
|
show_password_icon_path = get_resource("icons", "eye.png")
|
|
show_password_icon = QtGui.QIcon(show_password_icon_path)
|
|
show_password_btn = PressHoverButton(password_widget)
|
|
show_password_btn.setObjectName("PasswordBtn")
|
|
show_password_btn.setIcon(show_password_icon)
|
|
show_password_btn.setFocusPolicy(QtCore.Qt.ClickFocus)
|
|
|
|
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)
|
|
|
|
remember_checkbox = QtWidgets.QCheckBox("Remember", buttons_widget)
|
|
remember_checkbox.setObjectName("RememberCheckbox")
|
|
remember_checkbox.setVisible(allow_remember)
|
|
|
|
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.addWidget(remember_checkbox)
|
|
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)
|
|
|
|
ok_btn.clicked.connect(self._on_ok_click)
|
|
cancel_btn.clicked.connect(self._on_cancel_click)
|
|
show_password_btn.change_state.connect(self._on_show_password)
|
|
|
|
self.password_input = password_input
|
|
self.remember_checkbox = remember_checkbox
|
|
self.message_label = message_label
|
|
|
|
self.setStyleSheet(style.load_stylesheet())
|
|
|
|
def remember_password(self):
|
|
if not self._allow_remember:
|
|
return False
|
|
return self.remember_checkbox.isChecked()
|
|
|
|
def result(self):
|
|
if self._final_result is None:
|
|
return False
|
|
return self._final_result == self._expected_result
|
|
|
|
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):
|
|
super(PasswordDialog, self).closeEvent(event)
|
|
self.finished.emit(self.result())
|
|
|
|
def _on_ok_click(self):
|
|
input_value = self.password_input.text()
|
|
if input_value != self._expected_result:
|
|
self.message_label.setText("Invalid password. Try it again...")
|
|
self.password_input.setFocus()
|
|
return
|
|
|
|
if self.remember_password():
|
|
local_settings = get_local_settings()
|
|
if "general" not in local_settings:
|
|
local_settings["general"] = {}
|
|
|
|
local_settings["general"]["is_admin"] = True
|
|
|
|
save_local_settings(local_settings)
|
|
|
|
self._final_result = input_value
|
|
self.close()
|
|
|
|
def _on_show_password(self, show_password):
|
|
if show_password:
|
|
echo_mode = QtWidgets.QLineEdit.Normal
|
|
else:
|
|
echo_mode = QtWidgets.QLineEdit.Password
|
|
self.password_input.setEchoMode(echo_mode)
|
|
|
|
def _on_cancel_click(self):
|
|
self.close()
|