mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-02 00:44:52 +01:00
added confirmation button to modifiable dict item
This commit is contained in:
parent
b8be1371ba
commit
b53c452a9b
1 changed files with 107 additions and 2 deletions
|
|
@ -1,6 +1,6 @@
|
|||
from uuid import uuid4
|
||||
|
||||
from Qt import QtWidgets, QtCore
|
||||
from Qt import QtWidgets, QtCore, QtGui
|
||||
|
||||
from .base import BaseWidget
|
||||
from .widgets import (
|
||||
|
|
@ -14,6 +14,63 @@ from openpype.tools.settings import (
|
|||
from openpype.settings.constants import KEY_REGEX
|
||||
|
||||
|
||||
class PaintHelper:
|
||||
cached_icons = {}
|
||||
|
||||
@classmethod
|
||||
def _draw_image(cls, width, height, brush):
|
||||
image = QtGui.QPixmap(width, height)
|
||||
image.fill(QtCore.Qt.transparent)
|
||||
|
||||
icon_path_stroker = QtGui.QPainterPathStroker()
|
||||
icon_path_stroker.setCapStyle(QtCore.Qt.RoundCap)
|
||||
icon_path_stroker.setJoinStyle(QtCore.Qt.RoundJoin)
|
||||
icon_path_stroker.setWidth(height / 5)
|
||||
|
||||
painter = QtGui.QPainter(image)
|
||||
painter.setPen(QtCore.Qt.transparent)
|
||||
painter.setBrush(brush)
|
||||
rect = QtCore.QRect(0, 0, image.width(), image.height())
|
||||
fifteenth = rect.height() / 15
|
||||
# Left point
|
||||
p1 = QtCore.QPoint(
|
||||
rect.x() + (5 * fifteenth),
|
||||
rect.y() + (9 * fifteenth)
|
||||
)
|
||||
# Middle bottom point
|
||||
p2 = QtCore.QPoint(
|
||||
rect.center().x(),
|
||||
rect.y() + (11 * fifteenth)
|
||||
)
|
||||
# Top right point
|
||||
p3 = QtCore.QPoint(
|
||||
rect.x() + (10 * fifteenth),
|
||||
rect.y() + (5 * fifteenth)
|
||||
)
|
||||
|
||||
path = QtGui.QPainterPath(p1)
|
||||
path.lineTo(p2)
|
||||
path.lineTo(p3)
|
||||
|
||||
stroked_path = icon_path_stroker.createStroke(path)
|
||||
painter.drawPath(stroked_path)
|
||||
|
||||
painter.end()
|
||||
|
||||
return image
|
||||
|
||||
@classmethod
|
||||
def get_confirm_icon(cls, width, height):
|
||||
key = "{}x{}-confirm_image".format(width, height)
|
||||
icon = cls.cached_icons.get(key)
|
||||
|
||||
if icon is None:
|
||||
image = cls._draw_image(width, height, QtCore.Qt.white)
|
||||
icon = QtGui.QIcon(image)
|
||||
cls.cached_icons[key] = icon
|
||||
return icon
|
||||
|
||||
|
||||
def create_add_btn(parent):
|
||||
add_btn = QtWidgets.QPushButton("+", parent)
|
||||
add_btn.setFocusPolicy(QtCore.Qt.ClickFocus)
|
||||
|
|
@ -30,6 +87,19 @@ def create_remove_btn(parent):
|
|||
return remove_btn
|
||||
|
||||
|
||||
def create_confirm_btn(parent):
|
||||
confirm_btn = QtWidgets.QPushButton(parent)
|
||||
|
||||
icon = PaintHelper.get_confirm_icon(
|
||||
BTN_FIXED_SIZE, BTN_FIXED_SIZE
|
||||
)
|
||||
confirm_btn.setIcon(icon)
|
||||
confirm_btn.setFocusPolicy(QtCore.Qt.ClickFocus)
|
||||
confirm_btn.setProperty("btn-type", "tool-item")
|
||||
confirm_btn.setFixedSize(BTN_FIXED_SIZE, BTN_FIXED_SIZE)
|
||||
return confirm_btn
|
||||
|
||||
|
||||
class ModifiableDictEmptyItem(QtWidgets.QWidget):
|
||||
def __init__(self, entity_widget, store_as_list, parent):
|
||||
super(ModifiableDictEmptyItem, self).__init__(parent)
|
||||
|
|
@ -41,6 +111,8 @@ class ModifiableDictEmptyItem(QtWidgets.QWidget):
|
|||
self.is_duplicated = False
|
||||
self.key_is_valid = store_as_list
|
||||
|
||||
self.confirm_btn = None
|
||||
|
||||
if self.collapsible_key:
|
||||
self.create_collapsible_ui()
|
||||
else:
|
||||
|
|
@ -108,7 +180,16 @@ class ModifiableDictEmptyItem(QtWidgets.QWidget):
|
|||
self.is_duplicated = self.entity_widget.is_key_duplicated(key)
|
||||
key_input_state = ""
|
||||
# Collapsible key and empty key are not invalid
|
||||
if self.collapsible_key and self.key_input.text() == "":
|
||||
key_value = self.key_input.text()
|
||||
if self.confirm_btn is not None:
|
||||
conf_disabled = (
|
||||
key_value == ""
|
||||
or not self.key_is_valid
|
||||
or self.is_duplicated
|
||||
)
|
||||
self.confirm_btn.setEnabled(not conf_disabled)
|
||||
|
||||
if self.collapsible_key and key_value == "":
|
||||
pass
|
||||
elif self.is_duplicated or not self.key_is_valid:
|
||||
key_input_state = "invalid"
|
||||
|
|
@ -138,11 +219,15 @@ class ModifiableDictEmptyItem(QtWidgets.QWidget):
|
|||
key_input_label_widget = QtWidgets.QLabel("Key:", self)
|
||||
key_label_input_label_widget = QtWidgets.QLabel("Label:", self)
|
||||
|
||||
confirm_btn = create_confirm_btn(self)
|
||||
confirm_btn.setEnabled(False)
|
||||
|
||||
wrapper_widget = ExpandingWidget("", self)
|
||||
wrapper_widget.add_widget_after_label(key_input_label_widget)
|
||||
wrapper_widget.add_widget_after_label(key_input)
|
||||
wrapper_widget.add_widget_after_label(key_label_input_label_widget)
|
||||
wrapper_widget.add_widget_after_label(key_label_input)
|
||||
wrapper_widget.add_widget_after_label(confirm_btn)
|
||||
wrapper_widget.hide_toolbox()
|
||||
|
||||
layout = QtWidgets.QVBoxLayout(self)
|
||||
|
|
@ -154,9 +239,12 @@ class ModifiableDictEmptyItem(QtWidgets.QWidget):
|
|||
key_input.returnPressed.connect(self._on_enter_press)
|
||||
key_label_input.returnPressed.connect(self._on_enter_press)
|
||||
|
||||
confirm_btn.clicked.connect(self._on_enter_press)
|
||||
|
||||
self.key_input = key_input
|
||||
self.key_label_input = key_label_input
|
||||
self.wrapper_widget = wrapper_widget
|
||||
self.confirm_btn = confirm_btn
|
||||
|
||||
|
||||
class ModifiableDictItem(QtWidgets.QWidget):
|
||||
|
|
@ -187,6 +275,8 @@ class ModifiableDictItem(QtWidgets.QWidget):
|
|||
|
||||
self.key_label_input = None
|
||||
|
||||
self.confirm_btn = None
|
||||
|
||||
if collapsible_key:
|
||||
self.create_collapsible_ui()
|
||||
else:
|
||||
|
|
@ -274,6 +364,9 @@ class ModifiableDictItem(QtWidgets.QWidget):
|
|||
edit_btn.setProperty("btn-type", "tool-item-icon")
|
||||
edit_btn.setFixedHeight(BTN_FIXED_SIZE)
|
||||
|
||||
confirm_btn = create_confirm_btn(self)
|
||||
confirm_btn.setVisible(False)
|
||||
|
||||
remove_btn = create_remove_btn(self)
|
||||
|
||||
key_input_label_widget = QtWidgets.QLabel("Key:")
|
||||
|
|
@ -283,6 +376,7 @@ class ModifiableDictItem(QtWidgets.QWidget):
|
|||
wrapper_widget.add_widget_after_label(key_input)
|
||||
wrapper_widget.add_widget_after_label(key_label_input_label_widget)
|
||||
wrapper_widget.add_widget_after_label(key_label_input)
|
||||
wrapper_widget.add_widget_after_label(confirm_btn)
|
||||
wrapper_widget.add_widget_after_label(remove_btn)
|
||||
|
||||
key_input.textChanged.connect(self._on_key_change)
|
||||
|
|
@ -292,6 +386,7 @@ class ModifiableDictItem(QtWidgets.QWidget):
|
|||
key_label_input.returnPressed.connect(self._on_enter_press)
|
||||
|
||||
edit_btn.clicked.connect(self.on_edit_pressed)
|
||||
confirm_btn.clicked.connect(self._on_enter_press)
|
||||
remove_btn.clicked.connect(self.on_remove_clicked)
|
||||
|
||||
# Hide edit inputs
|
||||
|
|
@ -307,6 +402,7 @@ class ModifiableDictItem(QtWidgets.QWidget):
|
|||
self.key_label_input_label_widget = key_label_input_label_widget
|
||||
self.wrapper_widget = wrapper_widget
|
||||
self.edit_btn = edit_btn
|
||||
self.confirm_btn = confirm_btn
|
||||
self.remove_btn = remove_btn
|
||||
|
||||
self.content_widget = content_widget
|
||||
|
|
@ -412,6 +508,14 @@ class ModifiableDictItem(QtWidgets.QWidget):
|
|||
self.temp_key, key, self
|
||||
)
|
||||
self.temp_key = key
|
||||
if self.confirm_btn is not None:
|
||||
conf_disabled = (
|
||||
key == ""
|
||||
or not self.key_is_valid
|
||||
or is_key_duplicated
|
||||
)
|
||||
self.confirm_btn.setEnabled(not conf_disabled)
|
||||
|
||||
if is_key_duplicated or not self.key_is_valid:
|
||||
return
|
||||
|
||||
|
|
@ -454,6 +558,7 @@ class ModifiableDictItem(QtWidgets.QWidget):
|
|||
self.key_input.setVisible(enabled)
|
||||
self.key_input_label_widget.setVisible(enabled)
|
||||
self.key_label_input.setVisible(enabled)
|
||||
self.confirm_btn.setVisible(enabled)
|
||||
if not self.is_required:
|
||||
self.remove_btn.setVisible(enabled)
|
||||
if enabled:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue