private void UpdateMediaQueries(SerializedProperty declaration) { var mediaQueries = declaration.FindPropertyRelative("MediaQueries"); var oldCount = mediaQueries.arraySize; List <SerializedProperty> oldProps = new List <SerializedProperty>(); for (int i = 0; i < oldCount; i++) { var prop = mediaQueries.GetArrayElementAtIndex(i); oldProps.Add(prop); } List <string> newQueryIDs = new List <string>(); StringBuilder sb = new StringBuilder(); foreach (MediaQuery query in MediaQueries) { var id = query.Name; newQueryIDs.Add(id); sb.AppendLine(id); } // Remove non-existing (reverse loop) for (int i = mediaQueries.arraySize - 1; i >= 0; i--) { var query = mediaQueries.GetArrayElementAtIndex(i).FindPropertyRelative("Name").stringValue; if (!newQueryIDs.Contains(query)) { mediaQueries.DeleteArrayElementAtIndex(i); } } //Debug.Log("New size after deletion: " + properties.arraySize); // walk through new properties // if no corresponding property found in the old serialized array: // 1) make room for the property // 2) copy new name and type var newCount = MediaQueries.Count; for (int i = 0; i < newCount; i++) { var name = MediaQueries[i].Name; var type = MediaQueries[i].Type; bool shouldInsertOrAddNewElement = i > mediaQueries.arraySize - 1; if (!shouldInsertOrAddNewElement) { string oldQueryId = mediaQueries.GetArrayElementAtIndex(i).FindPropertyRelative("Name").stringValue; if (oldQueryId != name) { shouldInsertOrAddNewElement = true; } } if (shouldInsertOrAddNewElement) { if (i == mediaQueries.arraySize) { mediaQueries.arraySize++; } else { mediaQueries.InsertArrayElementAtIndex(i); } //Debug.Log(" --> " + properties.arraySize); var prop = mediaQueries.GetArrayElementAtIndex(i); prop.FindPropertyRelative("Name").stringValue = name; // apply type, value etc. SerializedPropertyHelper.Apply(prop, MediaQueries[i]); } } }
private void UpdateProperties(SerializedProperty declaration) { var properties = declaration.FindPropertyRelative("Properties"); var oldCount = properties.arraySize; List <SerializedProperty> oldProps = new List <SerializedProperty>(); for (int i = 0; i < oldCount; i++) { SerializedProperty prop = properties.GetArrayElementAtIndex(i); oldProps.Add(prop); } List <string> newPropertyNames = new List <string>(); StringBuilder sb = new StringBuilder(); foreach (StyleProperty styleProperty in StyleProperties) { var name = styleProperty.Name; newPropertyNames.Add(name); sb.AppendLine(name); } // Remove non-existing (reverse loop) for (int i = properties.arraySize - 1; i >= 0; i--) { var propName = properties.GetArrayElementAtIndex(i).FindPropertyRelative("Name").stringValue; if (!newPropertyNames.Contains(propName)) { properties.DeleteArrayElementAtIndex(i); } } //Debug.Log("New size after deletion: " + properties.arraySize); // walk through new properties // if no corresponding property found in the old serialized array: // 1) make room for the property // 2) copy new name and type var newCount = StyleProperties.Count; for (int i = 0; i < newCount; i++) { var name = StyleProperties[i].Name; bool shouldInsertOrAddNewElement = i > properties.arraySize - 1; if (!shouldInsertOrAddNewElement) { string oldPropName = properties.GetArrayElementAtIndex(i).FindPropertyRelative("Name").stringValue; if (oldPropName != name) { shouldInsertOrAddNewElement = true; } } if (shouldInsertOrAddNewElement) { if (i == properties.arraySize) { properties.arraySize++; } else { properties.InsertArrayElementAtIndex(i); } //Debug.Log(" --> " + properties.arraySize); var prop = properties.GetArrayElementAtIndex(i); prop.FindPropertyRelative("Name").stringValue = name; SerializedPropertyHelper.Apply(prop, StyleProperties[i]); } } }