Merge branch 'develop' into enhancement/add-placeholder-to-enum

This commit is contained in:
Jakub Trllo 2025-02-12 13:08:34 +01:00 committed by GitHub
commit 4102b44815
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 27 additions and 7 deletions

View file

@ -570,17 +570,18 @@ class EnumDef(AbstractAttrDef):
placeholder: Optional[str] = None, placeholder: Optional[str] = None,
**kwargs **kwargs
): ):
if not items: if multiselection is None:
raise ValueError(( multiselection = False
"Empty 'items' value. {} must have"
if not items and not multiselection:
raise ValueError(
f"Empty 'items' value. {self.__class__.__name__} must have"
" defined values on initialization." " defined values on initialization."
).format(self.__class__.__name__)) )
items = self.prepare_enum_items(items) items = self.prepare_enum_items(items)
item_values = [item["value"] for item in items] item_values = [item["value"] for item in items]
item_values_set = set(item_values) item_values_set = set(item_values)
if multiselection is None:
multiselection = False
if multiselection: if multiselection:
if default is None: if default is None:

View file

@ -2,7 +2,7 @@ import copy
import typing import typing
from typing import Optional from typing import Optional
from qtpy import QtWidgets, QtCore from qtpy import QtWidgets, QtCore, QtGui
from ayon_core.lib.attribute_definitions import ( from ayon_core.lib.attribute_definitions import (
AbstractAttrDef, AbstractAttrDef,
@ -659,6 +659,9 @@ class EnumAttrWidget(_BaseAttrDefWidget):
for item in self.attr_def.items: for item in self.attr_def.items:
input_widget.addItem(item["label"], item["value"]) input_widget.addItem(item["label"], item["value"])
if not self.attr_def.items:
self._add_empty_item(input_widget)
idx = input_widget.findData(self.attr_def.default) idx = input_widget.findData(self.attr_def.default)
if idx >= 0: if idx >= 0:
input_widget.setCurrentIndex(idx) input_widget.setCurrentIndex(idx)
@ -675,6 +678,20 @@ class EnumAttrWidget(_BaseAttrDefWidget):
input_widget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) input_widget.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
input_widget.customContextMenuRequested.connect(self._on_context_menu) input_widget.customContextMenuRequested.connect(self._on_context_menu)
def _add_empty_item(self, input_widget):
model = input_widget.model()
if not isinstance(model, QtGui.QStandardItemModel):
return
root_item = model.invisibleRootItem()
empty_item = QtGui.QStandardItem()
empty_item.setData("< No items to select >", QtCore.Qt.DisplayRole)
empty_item.setData("", QtCore.Qt.UserRole)
empty_item.setFlags(QtCore.Qt.NoItemFlags)
root_item.appendRow(empty_item)
def _on_context_menu(self, pos): def _on_context_menu(self, pos):
menu = QtWidgets.QMenu(self) menu = QtWidgets.QMenu(self)

View file

@ -85,6 +85,8 @@ class AttributesWidget(QtWidgets.QWidget):
layout.setContentsMargins(0, 0, 0, 0) layout.setContentsMargins(0, 0, 0, 0)
layout.setHorizontalSpacing(INPUTS_LAYOUT_HSPACING) layout.setHorizontalSpacing(INPUTS_LAYOUT_HSPACING)
layout.setVerticalSpacing(INPUTS_LAYOUT_VSPACING) layout.setVerticalSpacing(INPUTS_LAYOUT_VSPACING)
layout.setColumnStretch(0, 0)
layout.setColumnStretch(1, 1)
self._layout = layout self._layout = layout