void DrawTypeNode(XmlElement typeNode) { XmlAttribute attr; string typeName; typeName = typeNode.GetAttributeValue("type", string.Empty); attr = typeNode.GetOrAddAttribute("name", string.Empty); Type type = null; if (!string.IsNullOrEmpty(typeName)) { type = FindType(typeName); } object obj = null; using (new EditorGUILayout.HorizontalScope()) { EditorGUILayoutx.MenuButton(new GUIContent(typeName), "label", () => { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("Delete".Localization()), false, () => { using (EditorOneBuild.EditorLocalizationValues.BeginScope()) { if (EditorUtility.DisplayDialog("Delete".Localization(), string.Format("msg_del_type_content".Localization(), typeName), "ok", "cancel")) { typeNode.ParentNode.RemoveChild(typeNode); DirtyConfig(); } } }); return(menu); }); attr.Value = EditorGUILayoutx.DelayedPlaceholderField(attr.Value ?? string.Empty, new GUIContent("Alias".Localization()), GUILayout.Width(120)); EditorGUILayoutx.MenuButton(new GUIContent("+"), "label", () => { GenericMenu menu = new GenericMenu(); var members = new Dictionary <string, MemberInfo>(EditorOneBuild.GetSetMembers(type)); foreach (XmlNode itemNode in typeNode.SelectNodes("ns:*", nsMgr)) { if (itemNode.NodeType == XmlNodeType.Element) { members.Remove(itemNode.Name); } } foreach (var member in members.Values.OrderBy(o => o.Name)) { if (member.IsDefined(typeof(System.ObsoleteAttribute), true)) { continue; } MethodInfo method1 = member as MethodInfo; if (method1 != null) { if (member.Name.StartsWith("Get") && method1.ReturnType != typeof(void)) { continue; } } menu.AddItem(new GUIContent(member.Name), false, (data) => { MemberInfo mInfo = (MemberInfo)data; XmlNode memberNode = typeNode.OwnerDocument.CreateElement(mInfo.Name, EditorOneBuild.XMLNS); if (mInfo.MemberType == MemberTypes.Field || mInfo.MemberType == MemberTypes.Property) { Type valueType; if (mInfo.MemberType == MemberTypes.Field) { FieldInfo fInfo = (FieldInfo)mInfo; valueType = fInfo.FieldType; } else { PropertyInfo pInfo = (PropertyInfo)mInfo; valueType = pInfo.PropertyType; } memberNode.InnerText = valueType.GetDefaultValue().ToStringOrEmpty(); } else if (mInfo.MemberType == MemberTypes.Method) { MethodInfo method = (MethodInfo)mInfo; foreach (var p in method.GetParameters()) { XmlNode paramNode = memberNode.OwnerDocument.CreateElement(p.Name, EditorOneBuild.XMLNS); paramNode.InnerText = p.ParameterType.GetDefaultValue().ToStringOrEmpty(); memberNode.AppendChild(paramNode); } } typeNode.AppendChild(memberNode); DirtyConfig(); }, member); } return(menu); }, GUILayout.ExpandWidth(false)); } if (string.IsNullOrEmpty(typeName)) { //EditorGUILayout.HelpBox("type name empty", MessageType.Error); // GUIUtility.ExitGUI(); } if (type == null) { //if (Event.current.type == EventType.Repaint) //EditorGUILayout.HelpBox($"type null, <{typeName}>", MessageType.Error); return; } using (new EditorGUILayoutx.Scopes.IndentLevelVerticalScope()) { foreach (var itemNode in ToEnumerable(typeNode.SelectNodes("*"))) { DrawConfigItem(type, itemNode); } } }