public DataHelper( Type targetType, EditorLSDatabase sourceEditor, LSDatabase sourceDatabase, string displayName, string dataFieldName, SortInfo[] sorts, out bool valid) { Sorts = sorts; this.TargetType = targetType; SourceEditor = sourceEditor; this.DisplayName = displayName; SourceDatabase = sourceDatabase; _dataFieldName = dataFieldName; FieldInfo info = sourceDatabase.GetType().GetField(_dataFieldName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); if (info == null) { Debug.Log (string.Format ("Field with fieldName of {0} not found.", dataFieldName)); valid = false; return; } _getData = () => (DataItem[])info.GetValue(sourceDatabase); _setData = (value) => info.SetValue(sourceDatabase, value); if (Data == null) Data = (DataItem[])Array.CreateInstance (TargetType,0); DataItemAttribute dataAttribute = (DataItemAttribute)Attribute.GetCustomAttribute(targetType, typeof (DataItemAttribute)); _dataAttribute = dataAttribute ?? new DataItemAttribute (); valid = true; }
public DataHelper( Type targetType, EditorLSDatabase sourceEditor, LSDatabase sourceDatabase, string displayName, string dataCodeName, string dataFieldName, SortInfo[] sorts) { Sorts = sorts; this.TargetType = targetType; SourceEditor = sourceEditor; this.DisplayName = displayName; SourceDatabase = sourceDatabase; DataCodeName = dataCodeName; _dataFieldName = dataFieldName; FieldInfo info = sourceDatabase.GetType().GetField(_dataFieldName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); _getData = () => (DataItem[])info.GetValue(sourceDatabase); _setData = (value) => info.SetValue(sourceDatabase, value); if (Data == null) Data = (DataItem[])Array.CreateInstance (TargetType,0); DataItemAttribute dataAttribute = (DataItemAttribute)Attribute.GetCustomAttribute(targetType, typeof (DataItemAttribute)); _dataAttribute = dataAttribute ?? new DataItemAttribute (); }
private static void DrawDatabase(DataHelper dataHelper) { dataHelper.serializedObject.Update(); EditorGUI.BeginChangeCheck(); LSEditorUtility.ListField(dataHelper.DataProperty, dataHelper.ListFlags); if (EditorGUI.EndChangeCheck()) { dataHelper.serializedObject.ApplyModifiedProperties(); } GUILayout.FlexibleSpace(); EditorGUILayout.BeginHorizontal(); //folding all foldAllBufferBuffer = foldAllBuffer; foldAllBuffer = false; if (GUILayout.Button("Fold All", GUILayout.MaxWidth(50))) { FoldAll(); } //Search EditorGUILayout.LabelField("Filter: ", GUILayout.MaxWidth(35)); searchString = EditorGUILayout.TextField(searchString, GUILayout.ExpandWidth(true)); if (GUILayout.Button("X", GUILayout.MaxWidth(20))) { searchString = ""; } if (lastSearchString != searchString) { if (string.IsNullOrEmpty(searchString) == false) { dataHelper.FilterWithString(searchString); } lastSearchString = searchString; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Order Alphabetically")) { dataHelper.Sort((a1, a2) => a1.Name.CompareTo(a2.Name)); } SortInfo[] sorts = dataHelper.Sorts; for (int i = 0; i < sorts.Length; i++) { SortInfo sort = sorts [i]; if (GUILayout.Button(sort.sortName)) { dataHelper.Sort((a1, a2) => sort.degreeGetter(a1) - sort.degreeGetter(a2)); } } EditorGUILayout.EndHorizontal(); dataHelper.Manage(); dataHelper.serializedObject.Update(); EditorGUILayout.Space(); }