public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { DictionaryViewAttribute viewAttr = GetViewAttr(); if (viewAttr == null) { EditorGUI.PropertyField(position, property, label, true); return; } position.height = 18; if (!TryValidate(property, out string message)) { if (message != null && viewAttr.ShowUnsupportedBox) { EditorGUI.HelpBox(position, message, MessageType.Error); } return; } int fieldToken = fieldInfo.MetadataToken; if (!Foldouts.ContainsKey(fieldToken)) { Foldouts[fieldToken] = false; } IEditorDictionary dict = GetDict(property); if (DrawFoldout(position, label, dict, viewAttr.DefaultKey, viewAttr.DefaultValue)) { DrawBody(position, dict); } }
private bool ValidateDefaultConstructors(SerializedProperty property, out string message) { DictionaryViewAttribute viewAttr = GetViewAttr(); IEditorDictionary dict = GetDict(property); if (viewAttr.DefaultKey == null) { try { CreateInstance(dict !.KeyType); } catch (MissingMethodException) { message = "Invalid key constructor. Use DictionaryView(defaultKey: ...)"; return(false); } } if (viewAttr.DefaultValue == null) { try { CreateInstance(dict !.ValueType); } catch (MissingMethodException) { message = "Invalid value constructor. Use DictionaryView(defaultValue: ...)"; return(false); } } message = null; return(true); }
public override float GetPropertyHeight(SerializedProperty property, GUIContent label) { DictionaryViewAttribute viewAttr = GetViewAttr(); if (viewAttr == null) { return(property.CountInProperty() * 20); } if (!TryValidate(property, out string message)) { return(viewAttr.ShowUnsupportedBox && message != null ? 18 : 0); } int fieldToken = fieldInfo.MetadataToken; if (!Foldouts.ContainsKey(fieldToken) || !Foldouts[fieldToken]) { return(18); } const float space = 2; return(18 + GetDict(property).GetEntries().Count() * (18 + space) + space); }