mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-27 14:22:37 +01:00
attr defs widget can have multivalue
This commit is contained in:
parent
696bdb94c6
commit
672f124252
1 changed files with 66 additions and 20 deletions
|
|
@ -65,7 +65,7 @@ class _BaseAttrDefWidget(QtWidgets.QWidget):
|
|||
)
|
||||
)
|
||||
|
||||
def set_value(self, value):
|
||||
def set_value(self, value, multivalue=False):
|
||||
raise NotImplementedError(
|
||||
"Method 'current_value' is not implemented. {}".format(
|
||||
self.__class__.__name__
|
||||
|
|
@ -102,7 +102,18 @@ class NumberAttrWidget(_BaseAttrDefWidget):
|
|||
def current_value(self):
|
||||
return self._input_widget.value()
|
||||
|
||||
def set_value(self, value):
|
||||
def set_value(self, value, multivalue=False):
|
||||
if multivalue:
|
||||
set_value = set(value)
|
||||
if None in set_value:
|
||||
set_value.remove(None)
|
||||
set_value.add(self.attr_def.default)
|
||||
|
||||
if len(set_value) > 1:
|
||||
self._input_widget.setSpecialValueText("Multiselection")
|
||||
return
|
||||
value = tuple(set_value)[0]
|
||||
|
||||
if self.current_value != value:
|
||||
self._input_widget.setValue(value)
|
||||
|
||||
|
|
@ -137,7 +148,10 @@ class TextAttrWidget(_BaseAttrDefWidget):
|
|||
self.main_layout.addWidget(input_widget, 0)
|
||||
|
||||
def _on_value_change(self):
|
||||
new_value = self._input_widget.toPlainText()
|
||||
if self.multiline:
|
||||
new_value = self._input_widget.toPlainText()
|
||||
else:
|
||||
new_value = self._input_widget.text()
|
||||
self.value_changed.emit(new_value, self.attr_def.id)
|
||||
|
||||
def current_value(self):
|
||||
|
|
@ -145,13 +159,23 @@ class TextAttrWidget(_BaseAttrDefWidget):
|
|||
return self._input_widget.toPlainText()
|
||||
return self._input_widget.text()
|
||||
|
||||
def set_value(self, value):
|
||||
if value == self.current_value():
|
||||
return
|
||||
if self.multiline:
|
||||
self._input_widget.setPlainText(value)
|
||||
else:
|
||||
self._input_widget.setText(value)
|
||||
def set_value(self, value, multivalue=False):
|
||||
if multivalue:
|
||||
set_value = set(value)
|
||||
if None in set_value:
|
||||
set_value.remove(None)
|
||||
set_value.add(self.attr_def.default)
|
||||
|
||||
if len(set_value) == 1:
|
||||
value = tuple(set_value)[0]
|
||||
else:
|
||||
value = "< Multiselection >"
|
||||
|
||||
if value != self.current_value():
|
||||
if self.multiline:
|
||||
self._input_widget.setPlainText(value)
|
||||
else:
|
||||
self._input_widget.setText(value)
|
||||
|
||||
|
||||
class BoolAttrWidget(_BaseAttrDefWidget):
|
||||
|
|
@ -172,7 +196,18 @@ class BoolAttrWidget(_BaseAttrDefWidget):
|
|||
def current_value(self):
|
||||
return self._input_widget.isChecked()
|
||||
|
||||
def set_value(self, value):
|
||||
def set_value(self, value, multivalue=False):
|
||||
if multivalue:
|
||||
set_value = set(value)
|
||||
if None in set_value:
|
||||
set_value.remove(None)
|
||||
set_value.add(self.attr_def.default)
|
||||
|
||||
if len(set_value) > 1:
|
||||
self._input_widget.setCheckState(QtCore.Qt.PartiallyChecked)
|
||||
return
|
||||
value = tuple(set_value)[0]
|
||||
|
||||
if value != self.current_value():
|
||||
self._input_widget.setChecked(value)
|
||||
|
||||
|
|
@ -206,13 +241,15 @@ class EnumAttrWidget(_BaseAttrDefWidget):
|
|||
idx = self._input_widget.currentIndex()
|
||||
return self._input_widget.itemData(idx)
|
||||
|
||||
def set_value(self, value):
|
||||
idx = self._input_widget.findData(value)
|
||||
cur_idx = self._input_widget.currentIndex()
|
||||
if idx == cur_idx:
|
||||
return
|
||||
if idx >= 0:
|
||||
self._input_widget.setCurrentIndex(idx)
|
||||
def set_value(self, value, multivalue=False):
|
||||
if not multivalue:
|
||||
idx = self._input_widget.findData(value)
|
||||
cur_idx = self._input_widget.currentIndex()
|
||||
if idx != cur_idx and idx >= 0:
|
||||
self._input_widget.setCurrentIndex(idx)
|
||||
|
||||
else:
|
||||
self._input_widget.lineEdit().setText("Multiselection")
|
||||
|
||||
|
||||
class UnknownAttrWidget(_BaseAttrDefWidget):
|
||||
|
|
@ -226,9 +263,18 @@ class UnknownAttrWidget(_BaseAttrDefWidget):
|
|||
self.main_layout.addWidget(input_widget, 0)
|
||||
|
||||
def current_value(self):
|
||||
return self._input_widget.text()
|
||||
raise ValueError(
|
||||
"{} can't hold real value.".format(self.__class__.__name__)
|
||||
)
|
||||
|
||||
def set_value(self, value, multivalue=False):
|
||||
if multivalue:
|
||||
set_value = set(value)
|
||||
if len(set_value) == 1:
|
||||
value = tuple(set_value)[0]
|
||||
else:
|
||||
value = "< Multiselection >"
|
||||
|
||||
def set_value(self, value):
|
||||
str_value = str(value)
|
||||
if str_value != self._value:
|
||||
self._value = str_value
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue