private void SetupReorder(DictionaryAttribute dictionaryAttribute, DictionaryField field, SerializedProperty property, Type declaringType) { if (field.AllowReorder) { if (!string.IsNullOrEmpty(dictionaryAttribute.ReorderCallback)) { var reorderCallback = ReflectionHelper.CreateActionCallback(dictionaryAttribute.ReorderCallback, declaringType, property); if (reorderCallback != null) { field.RegisterCallback <DictionaryField.ItemReorderedEvent>(evt => reorderCallback.Invoke()); } else { var reorderCallbackFromTo = ReflectionHelper.CreateActionCallback <int, int>(dictionaryAttribute.ReorderCallback, declaringType, property); if (reorderCallbackFromTo != null) { field.RegisterCallback <DictionaryField.ItemReorderedEvent>(evt => reorderCallbackFromTo.Invoke(evt.FromIndex, evt.ToIndex)); } else { Debug.LogWarningFormat(_invalidReorderCallbackWarning, property.propertyPath); } } } } }
private void SetupAdd(DictionaryAttribute dictionaryAttribute, PropertyDictionaryProxy proxy, DictionaryField field, SerializedProperty property, Type declaringType, bool isReference) { if (field.AllowAdd) { if (!string.IsNullOrEmpty(dictionaryAttribute.AllowAdd)) { proxy.CanAddKeyCallback = ReflectionHelper.CreateFunctionCallback <string, bool>(dictionaryAttribute.AllowAdd, declaringType, property); if (proxy.CanAddKeyCallback == null) { var canAdd = ReflectionHelper.CreateValueSourceFunction(dictionaryAttribute.AllowAdd, property, field, declaringType, true); proxy.CanAddKeyCallback = index => canAdd(); } } if (!string.IsNullOrEmpty(dictionaryAttribute.AddCallback)) { if (!isReference) { var addCallback = ReflectionHelper.CreateActionCallback(dictionaryAttribute.AddCallback, declaringType, property); if (addCallback != null) { field.RegisterCallback <DictionaryField.ItemAddedEvent>(evt => addCallback.Invoke()); } else { var addCallbackKey = ReflectionHelper.CreateActionCallback <string>(dictionaryAttribute.AddCallback, declaringType, property); if (addCallbackKey != null) { field.RegisterCallback <DictionaryField.ItemAddedEvent>(evt => addCallbackKey.Invoke(evt.Key)); } else { Debug.LogWarningFormat(_invalidAddCallbackWarning, property.propertyPath); } } } else { var addCallback = ReflectionHelper.CreateActionCallback(dictionaryAttribute.AddCallback, declaringType, property); if (addCallback != null) { field.RegisterCallback <DictionaryField.ItemAddedEvent>(evt => addCallback.Invoke()); } else { var addCallbackKey = ReflectionHelper.CreateActionCallback <string>(dictionaryAttribute.AddCallback, declaringType, property); if (addCallbackKey != null) { field.RegisterCallback <DictionaryField.ItemAddedEvent>(evt => addCallbackKey.Invoke(evt.Key)); } else { Debug.LogWarningFormat(_invalidAddReferenceCallbackWarning, property.propertyPath); } } } } } }
private void SetupChange(DictionaryAttribute dictionaryAttribute, DictionaryField field, SerializedProperty property, Type declaringType) { if (!string.IsNullOrEmpty(dictionaryAttribute.ChangeCallback)) { var changeCallback = ReflectionHelper.CreateActionCallback(dictionaryAttribute.ChangeCallback, declaringType, property); if (changeCallback != null) { field.RegisterCallback <DictionaryField.ItemsChangedEvent>(evt => changeCallback.Invoke()); } else { Debug.LogWarningFormat(_invalidChangeCallbackWarning, property.propertyPath); } } }