mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-02 00:44:52 +01:00
added few new attribute definitions and their widgets
This commit is contained in:
parent
f28b4242c8
commit
396bdfde8a
9 changed files with 919 additions and 7 deletions
|
|
@ -1,14 +1,20 @@
|
|||
import os
|
||||
import uuid
|
||||
|
||||
from Qt import QtWidgets, QtCore
|
||||
|
||||
from openpype.pipeline.lib import (
|
||||
AbtractAttrDef,
|
||||
UnknownDef,
|
||||
NumberDef,
|
||||
TextDef,
|
||||
EnumDef,
|
||||
BoolDef
|
||||
BoolDef,
|
||||
FileDef,
|
||||
UISeparatorDef,
|
||||
UILabelDef
|
||||
)
|
||||
from openpype.widgets.nice_checkbox import NiceCheckbox
|
||||
from Qt import QtWidgets, QtCore
|
||||
|
||||
|
||||
def create_widget_for_attr_def(attr_def, parent=None):
|
||||
|
|
@ -32,12 +38,22 @@ def create_widget_for_attr_def(attr_def, parent=None):
|
|||
if isinstance(attr_def, UnknownDef):
|
||||
return UnknownAttrWidget(attr_def, parent)
|
||||
|
||||
if isinstance(attr_def, FileDef):
|
||||
return FileAttrWidget(attr_def, parent)
|
||||
|
||||
if isinstance(attr_def, UISeparatorDef):
|
||||
return SeparatorAttrWidget(attr_def, parent)
|
||||
|
||||
if isinstance(attr_def, UILabelDef):
|
||||
return LabelAttrWidget(attr_def, parent)
|
||||
|
||||
raise ValueError("Unknown attribute definition \"{}\"".format(
|
||||
str(type(attr_def))
|
||||
))
|
||||
|
||||
|
||||
class _BaseAttrDefWidget(QtWidgets.QWidget):
|
||||
# Type 'object' may not work with older PySide versions
|
||||
value_changed = QtCore.Signal(object, uuid.UUID)
|
||||
|
||||
def __init__(self, attr_def, parent):
|
||||
|
|
@ -68,12 +84,36 @@ class _BaseAttrDefWidget(QtWidgets.QWidget):
|
|||
|
||||
def set_value(self, value, multivalue=False):
|
||||
raise NotImplementedError(
|
||||
"Method 'current_value' is not implemented. {}".format(
|
||||
"Method 'set_value' is not implemented. {}".format(
|
||||
self.__class__.__name__
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
class SeparatorAttrWidget(_BaseAttrDefWidget):
|
||||
def _ui_init(self):
|
||||
input_widget = QtWidgets.QWidget(self)
|
||||
input_widget.setObjectName("Separator")
|
||||
input_widget.setMinimumHeight(2)
|
||||
input_widget.setMaximumHeight(2)
|
||||
|
||||
self._input_widget = input_widget
|
||||
|
||||
self.main_layout.addWidget(input_widget, 0)
|
||||
|
||||
|
||||
class LabelAttrWidget(_BaseAttrDefWidget):
|
||||
def _ui_init(self):
|
||||
input_widget = QtWidgets.QLabel(self)
|
||||
label = self.attr_def.label
|
||||
if label:
|
||||
input_widget.setText(str(label))
|
||||
|
||||
self._input_widget = input_widget
|
||||
|
||||
self.main_layout.addWidget(input_widget, 0)
|
||||
|
||||
|
||||
class NumberAttrWidget(_BaseAttrDefWidget):
|
||||
def _ui_init(self):
|
||||
decimals = self.attr_def.decimals
|
||||
|
|
@ -83,6 +123,9 @@ class NumberAttrWidget(_BaseAttrDefWidget):
|
|||
else:
|
||||
input_widget = QtWidgets.QSpinBox(self)
|
||||
|
||||
if self.attr_def.tooltip:
|
||||
input_widget.setToolTip(self.attr_def.tooltip)
|
||||
|
||||
input_widget.setMinimum(self.attr_def.minimum)
|
||||
input_widget.setMaximum(self.attr_def.maximum)
|
||||
input_widget.setValue(self.attr_def.default)
|
||||
|
|
@ -136,6 +179,9 @@ class TextAttrWidget(_BaseAttrDefWidget):
|
|||
):
|
||||
input_widget.setPlaceholderText(self.attr_def.placeholder)
|
||||
|
||||
if self.attr_def.tooltip:
|
||||
input_widget.setToolTip(self.attr_def.tooltip)
|
||||
|
||||
if self.attr_def.default:
|
||||
if self.multiline:
|
||||
input_widget.setPlainText(self.attr_def.default)
|
||||
|
|
@ -184,6 +230,9 @@ class BoolAttrWidget(_BaseAttrDefWidget):
|
|||
input_widget = NiceCheckbox(parent=self)
|
||||
input_widget.setChecked(self.attr_def.default)
|
||||
|
||||
if self.attr_def.tooltip:
|
||||
input_widget.setToolTip(self.attr_def.tooltip)
|
||||
|
||||
input_widget.stateChanged.connect(self._on_value_change)
|
||||
|
||||
self._input_widget = input_widget
|
||||
|
|
@ -220,6 +269,9 @@ class EnumAttrWidget(_BaseAttrDefWidget):
|
|||
combo_delegate = QtWidgets.QStyledItemDelegate(input_widget)
|
||||
input_widget.setItemDelegate(combo_delegate)
|
||||
|
||||
if self.attr_def.tooltip:
|
||||
input_widget.setToolTip(self.attr_def.tooltip)
|
||||
|
||||
items = self.attr_def.items
|
||||
for key, label in items.items():
|
||||
input_widget.addItem(label, key)
|
||||
|
|
@ -281,3 +333,40 @@ class UnknownAttrWidget(_BaseAttrDefWidget):
|
|||
if str_value != self._value:
|
||||
self._value = str_value
|
||||
self._input_widget.setText(str_value)
|
||||
|
||||
|
||||
class FileAttrWidget(_BaseAttrDefWidget):
|
||||
def _ui_init(self):
|
||||
self.multipath = self.attr_def.multipath
|
||||
if self.multipath:
|
||||
from .files_widget import MultiFilesWidget
|
||||
|
||||
input_widget = MultiFilesWidget(self)
|
||||
|
||||
else:
|
||||
from .files_widget import SingleFileWidget
|
||||
|
||||
input_widget = SingleFileWidget(self)
|
||||
|
||||
if self.attr_def.tooltip:
|
||||
input_widget.setToolTip(self.attr_def.tooltip)
|
||||
|
||||
input_widget.set_filters(
|
||||
self.attr_def.folders, self.attr_def.extensions
|
||||
)
|
||||
|
||||
input_widget.value_changed.connect(self._on_value_change)
|
||||
|
||||
self._input_widget = input_widget
|
||||
|
||||
self.main_layout.addWidget(input_widget, 0)
|
||||
|
||||
def _on_value_change(self):
|
||||
new_value = self.current_value()
|
||||
self.value_changed.emit(new_value, self.attr_def.id)
|
||||
|
||||
def current_value(self):
|
||||
return self._input_widget.current_value()
|
||||
|
||||
def set_value(self, value, multivalue=False):
|
||||
self._input_widget.set_value(value, multivalue)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue