mirror of
https://github.com/ynput/ayon-core.git
synced 2026-01-02 00:44:52 +01:00
lsit widget can add and show items in right order
This commit is contained in:
parent
9372736c48
commit
6e55bda056
3 changed files with 67 additions and 26 deletions
|
|
@ -170,7 +170,6 @@ class DictMutableKeysEntity(ItemEntity):
|
|||
self.on_value_change()
|
||||
|
||||
def on_change(self):
|
||||
self.update_current_metadata()
|
||||
for callback in self.on_change_callbacks:
|
||||
callback()
|
||||
self.parent.on_child_change(self)
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import copy
|
||||
from .item_entities import ItemEntity
|
||||
from . import BaseEntity, ItemEntity
|
||||
# from .item_entities import
|
||||
from .constants import OverrideState
|
||||
from .lib import (
|
||||
NOT_SET,
|
||||
|
|
@ -14,8 +15,15 @@ class ListEntity(ItemEntity):
|
|||
for item in self.children:
|
||||
yield item
|
||||
|
||||
def __bool__(self):
|
||||
"""Returns true because len may return 0."""
|
||||
return True
|
||||
|
||||
def __len__(self):
|
||||
return len(self.children)
|
||||
|
||||
def append(self, item):
|
||||
child_obj = self.add_new_item()
|
||||
child_obj = self._add_new_item()
|
||||
child_obj.set_override_state(self.override_state)
|
||||
child_obj.set_value(item)
|
||||
self.on_change()
|
||||
|
|
@ -35,18 +43,25 @@ class ListEntity(ItemEntity):
|
|||
|
||||
def remove(self, item):
|
||||
for idx, child_obj in enumerate(self.children):
|
||||
if child_obj.value == item:
|
||||
found = False
|
||||
if isinstance(item, BaseEntity):
|
||||
if child_obj is item:
|
||||
found = True
|
||||
elif child_obj.value == item:
|
||||
found = True
|
||||
|
||||
if found:
|
||||
self.pop(idx)
|
||||
return
|
||||
raise ValueError("ListEntity.remove(x): x not in ListEntity")
|
||||
|
||||
def insert(self, idx, item):
|
||||
child_obj = self.add_new_item(idx)
|
||||
child_obj = self._add_new_item(idx)
|
||||
child_obj.set_override_state(self.override_state)
|
||||
child_obj.set_value(item)
|
||||
self.on_change()
|
||||
|
||||
def add_new_item(self, idx=None):
|
||||
def _add_new_item(self, idx=None):
|
||||
child_obj = self.create_schema_object(self.item_schema, self, True)
|
||||
if idx is None:
|
||||
self.children.append(child_obj)
|
||||
|
|
@ -54,9 +69,16 @@ class ListEntity(ItemEntity):
|
|||
self.children.insert(idx, child_obj)
|
||||
return child_obj
|
||||
|
||||
def add_new_item(self, idx=None):
|
||||
child_obj = self._add_new_item(idx)
|
||||
child_obj.set_override_state(self.override_state)
|
||||
self.on_change()
|
||||
return child_obj
|
||||
|
||||
def item_initalization(self):
|
||||
self.valid_value_types = (list, )
|
||||
self.children = []
|
||||
self.value_on_not_set = []
|
||||
|
||||
self.ignore_child_changes = False
|
||||
|
||||
|
|
@ -157,7 +179,7 @@ class ListEntity(ItemEntity):
|
|||
value = self.value_on_not_set
|
||||
|
||||
for item in value:
|
||||
child_obj = self.add_new_item()
|
||||
child_obj = self._add_new_item()
|
||||
child_obj.update_default_value(item)
|
||||
if self.override_state is OverrideState.PROJECT:
|
||||
if self.had_project_override:
|
||||
|
|
@ -307,7 +329,7 @@ class ListEntity(ItemEntity):
|
|||
self.children.pop(0)
|
||||
|
||||
for item in value:
|
||||
child_obj = self.add_new_item()
|
||||
child_obj = self._add_new_item()
|
||||
child_obj.update_default_value(item)
|
||||
if self.override_state is OverrideState.PROJECT:
|
||||
if self.had_project_override:
|
||||
|
|
@ -351,7 +373,7 @@ class ListEntity(ItemEntity):
|
|||
self.children.pop(0)
|
||||
|
||||
for item in value:
|
||||
child_obj = self.add_new_item()
|
||||
child_obj = self._add_new_item()
|
||||
child_obj.update_default_value(item)
|
||||
child_obj.set_override_state(self.override_state)
|
||||
|
||||
|
|
@ -382,10 +404,11 @@ class ListEntity(ItemEntity):
|
|||
self.ignore_child_changes = True
|
||||
|
||||
for item in value:
|
||||
child_obj = self.add_new_item()
|
||||
child_obj = self._add_new_item()
|
||||
child_obj.update_default_value(item)
|
||||
if self._has_studio_override:
|
||||
child_obj.update_studio_values(item)
|
||||
child_obj.set_override_state(self.override_state)
|
||||
|
||||
self.ignore_child_changes = False
|
||||
|
||||
|
|
|
|||
|
|
@ -245,20 +245,40 @@ class ListWidget(InputWidget):
|
|||
return invalid
|
||||
|
||||
def _on_entity_change(self):
|
||||
in_input_fields = list()
|
||||
# TODO do less inefficient
|
||||
current_entities = []
|
||||
for input_field in self.input_fields:
|
||||
in_input_fields.append(input_field.entity)
|
||||
current_entities.append(input_field.entity)
|
||||
|
||||
for child_entity in self.entity:
|
||||
if child_entity not in in_input_fields:
|
||||
self.add_row(child_entity)
|
||||
else:
|
||||
in_input_fields.remove(child_entity)
|
||||
for idx, child_entity in enumerate(self.entity):
|
||||
found = False
|
||||
for input_field in self.input_fields:
|
||||
if input_field.entity is child_entity:
|
||||
found = True
|
||||
break
|
||||
|
||||
if in_input_fields:
|
||||
for input_field in tuple(self.input_fields):
|
||||
if input_field.entity in in_input_fields:
|
||||
self.remove_row(input_field)
|
||||
if not found:
|
||||
self.add_row(child_entity, idx)
|
||||
|
||||
child_len = len(self.entity)
|
||||
for idx, child_entity in enumerate(tuple(self.entity)):
|
||||
if self.input_fields[idx].entity is child_entity:
|
||||
continue
|
||||
|
||||
for _idx in range(idx, child_len):
|
||||
input_field = self.input_fields[_idx]
|
||||
if input_field.entity is not child_entity:
|
||||
continue
|
||||
|
||||
self.content_layout.insertWidget(idx, input_field)
|
||||
break
|
||||
|
||||
input_field_len = len(self.input_fields)
|
||||
if child_len != input_field_len:
|
||||
for idx in range(child_len, input_field_len):
|
||||
self.remove_row(self.input_fields[idx])
|
||||
|
||||
self.empty_row.setVisible(self.count() == 0)
|
||||
|
||||
def count(self):
|
||||
return len(self.input_fields)
|
||||
|
|
@ -283,11 +303,7 @@ class ListWidget(InputWidget):
|
|||
field_2.order_changed()
|
||||
|
||||
def add_new_item(self, row=None):
|
||||
child_entity = self.entity.add_new_item()
|
||||
child_entity.set_override_state(self.entity.override_state)
|
||||
|
||||
self.add_row(child_entity)
|
||||
self.empty_row.setVisible(self.count() == 0)
|
||||
self.entity.add_new_item(row)
|
||||
|
||||
def add_row(self, child_entity, row=None):
|
||||
# Create new item
|
||||
|
|
@ -345,6 +361,9 @@ class ListWidget(InputWidget):
|
|||
item_widget.setParent(None)
|
||||
item_widget.deleteLater()
|
||||
|
||||
if item_widget.entity in self.entity.children:
|
||||
self.entity.remove(item_widget.entity)
|
||||
|
||||
if previous_field:
|
||||
previous_field.order_changed()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue