private void whenImport() { int row = 1, col = 1; int length = GetInt(row++, col); paramlist.Clear(); for (int i = 0; i < length; i++) { FixClassCircle.ParamMore paramData = new FixClassCircle.ParamMore(); paramData.desc = GetString(row, col++); int leng = GetInt(row, col++); for (int j = 0; j < leng; j++) { FixClassCircle.UseParam useParam = new FixClassCircle.UseParam(); useParam.NameCh = GetString(row, col++); useParam.NameEng = GetString(row, col++); useParam.type = (FixClassCircle.ParamType)GetInt(row, col++); useParam.EnumDesc = GetString(row, col++); paramData.Detail.Add(useParam); } paramlist.Add(paramData); row++; col = 1; } length = GetInt(row++, col); serializedNodes.Clear(); for (int i = 0; i < length; i++) { FixClassCircle.SerializableNode seriNode = new FixClassCircle.SerializableNode(); seriNode.tagCh = GetString(row, col++); seriNode.tag = GetString(row, col++); seriNode.paramIndex = GetInt(row, col++); int leng = GetInt(row, col++); for (int j = 0; j < leng; j++) { seriNode.otherParamValues.Add(GetString(row, col++)); } seriNode.childCount = GetInt(row, col++); seriNode.indexOfFirstChild = GetInt(row, col++); serializedNodes.Add(seriNode); row++; col = 1; } OnAfterDeserialize(); }
//draw data part bool Display(FixClassCircleNoGo.Node node) //return if Display should do next time { Rect titleRect = EditorGUILayout.BeginHorizontal(); string titlename = node.tagCh; if (!string.IsNullOrEmpty(node.tagCh)) { titlename += " / "; } titlename += node.tag; if (_target.ShowSize) { titlename += " / size:" + node.children.Count; } if (node.forSearch) { node.foldout = EditorGUILayout.Foldout(node.foldout, titlename, EditorStyles.foldoutPreDrop); } else { node.foldout = EditorGUILayout.Foldout(node.foldout, titlename); } if (node.editMode) { if (GUILayout.Button(forbutton6_2, EditorStyles.toolbarButton, GUILayout.Width(20))) { node.editMode = false; //重置搜索 node.searchStr = ""; foreach (var child in node.children) { child.forSearch = false; } _target.Record2SerializeOnce(); } } else { if (GUILayout.Button(forbutton6, GUILayout.Width(20))) { node.editMode = true; } } if (Event.current.isMouse && Event.current.button == 1 && titleRect.Contains(Event.current.mousePosition)) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("Copy Node"), false, copyNode, node); if (node.father != null) { menu.AddItem(new GUIContent("Cut Node"), false, cutNode, node); } menu.AddItem(new GUIContent("Paste Node as a child"), false, pasteNode, node); menu.AddItem(new GUIContent("Empty clipboard"), false, emptyClipboard, null); menu.ShowAsContext(); Event.current.Use(); } if (GUILayout.Button(forbutton1, GUILayout.Width(20))) { node.children.Add(new FixClassCircleNoGo.Node(_target) { father = node }); _target.Record2SerializeOnce(); node.foldout = true; } /* * if (GUILayout.Button(forbutton2, GUILayout.Width(20))) * { * node.children.Clear(); * _target.Record2SerializeOnce(); * }*/ if (node.father != null) { if (GUILayout.Button(forbutton5, GUILayout.Width(22))) { FixClassCircleNoGo.Node nodetmp = FixClassCircleNoGo.DuplicateNode(node); nodetmp.father = node.father; int index = node.father.children.IndexOf(node); node.father.children.Insert(index, nodetmp); _target.Record2SerializeOnce(); return(true); } if (GUILayout.Button(forbutton3, GUILayout.Width(20))) { node.father.children.Remove(node); _target.Record2SerializeOnce(); return(true); } } EditorGUILayout.EndHorizontal(); if (!node.foldout) { EditorGUIUtility.labelWidth -= indentation; } if (node.editMode) { GUILayout.BeginHorizontal(); GUI.color = color_Edit; GUILayout.Space(indentation); node.tagCh = EditorGUILayout.TextField(node.tagCh, GUILayout.Width(90)); node.tag = EditorGUILayout.TextField(node.tag, GUILayout.Width(95)); if (GUILayout.Button(forbutton4, EditorStyles.radioButton, GUILayout.Width(20))) { FixClassCircle.ParamMore temp = _target.paramlist[node.paramIndex]; if (temp.Detail.Count > 0 && temp.Detail[0].type == FixClassCircle.ParamType.IntEnum) { string[] ss = temp.Detail[0].EnumDesc.Split(','); int index = 0; int.TryParse(node.otherParamValues[0], out index); node.tag = ss[index]; _target.Record2SerializeOnce(); } } //EditorGUILayout.LabelField("Struct", GUILayout.Width(40)); node.paramIndex = EditorGUILayout.Popup(node.paramIndex, getParamlistEnumStrArr(), GUILayout.Width(70)); if (node.paramIndex < 0) { node.paramIndex = 0; } node.searchStr = EditorGUILayout.TextField(node.searchStr, GUILayout.Width(70)); if (GUILayout.Button(forbutton7, GUILayout.Width(20))) { foreach (var child in node.children) { if (node.searchStr.Length > 0 && (child.tag.Contains(node.searchStr) || child.tagCh.Contains(node.searchStr))) { child.forSearch = true; } else { child.forSearch = false; child.foldout = false; } } } GUI.color = color_normal; GUILayout.EndHorizontal(); } if (!node.foldout) { return(false); } if (_target.paramlist.Count - 1 < node.paramIndex) { EditorGUIUtility.labelWidth -= indentation; return(false); //wait until list count is enough } for (int i = 0; i < _target.paramlist[node.paramIndex].Detail.Count && i < node.otherParamValues.Count; i++) { FixClassCircle.ParamType tempT = _target.paramlist[node.paramIndex].Detail[i].type; if (hidebelowparam && tempT != FixClassCircle.ParamType.BoolHideBelow && tempT != FixClassCircle.ParamType.BoolShowBelow) { continue; } GUILayout.BeginHorizontal(); GUILayout.Space(indentation + 13); drawParams(node, i); GUILayout.EndHorizontal(); } hidebelowparam = false; //--------------------------------------------------- GUILayout.BeginHorizontal(); GUILayout.Space(indentation); EditorGUIUtility.labelWidth -= indentation; GUILayout.BeginVertical(); foreach (var child in node.children) { if (Display(child) || forceQuitDraw) { forceQuitDraw = false; GUILayout.EndVertical(); GUILayout.EndHorizontal(); return(true); } EditorGUIUtility.labelWidth += indentation; // not plus not reduce } GUILayout.EndVertical(); GUILayout.EndHorizontal(); return(false); }
void DrawParamList() { if (_target == null) { return; } EditorGUILayout.BeginHorizontal(); ParamListFoldOut = EditorGUILayout.Foldout(ParamListFoldOut, "Struct List" + (_target.ShowSize ? (" / size:" + _target.paramlist.Count) : "")); if (ParamListEditMode) { if (GUILayout.Button(forbutton6_2, EditorStyles.toolbarButton, GUILayout.Width(20))) { ParamListEditMode = false; } } else { if (GUILayout.Button(forbutton6, GUILayout.Width(20))) { ParamListEditMode = true; } } if (GUILayout.Button(forbutton1, GUILayout.Width(20))) { _target.paramlist.Add(new FixClassCircle.ParamMore()); ParamListFoldOut = true; } EditorGUILayout.EndHorizontal(); if (ParamListEditMode) { EditorGUILayout.BeginHorizontal(); GUI.color = color_Edit; GUILayout.Space(indentation); ParamListSize = EditorGUILayout.IntField("size:", ParamListSize); if (GUILayout.Button("SetSize")) { if (ParamListSize < 1) { ParamListSize = 1; } if (ParamListSize < _target.paramlist.Count) { _target.paramlist.RemoveRange(ParamListSize, _target.paramlist.Count - ParamListSize); } else if (ParamListSize > _target.paramlist.Count) { for (int tempi = _target.paramlist.Count; tempi < ParamListSize; tempi++) { _target.paramlist.Add(new FixClassCircle.ParamMore()); } } } GUI.color = color_normal; EditorGUILayout.EndHorizontal(); } if (!ParamListFoldOut) { return; } for (int i = 0; i < _target.paramlist.Count; i++) { FixClassCircle.ParamMore paramnode = _target.paramlist[i]; EditorGUILayout.BeginHorizontal(); GUILayout.Space(indentation); EditorGUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); fixFoldoutPos(paramnode.foldout); paramnode.foldout = EditorGUILayout.Foldout(paramnode.foldout, i + "-" + paramnode.desc + (_target.ShowSize ? (" / size:" + paramnode.Detail.Count) : "")); if (paramnode.EditMode) { if (GUILayout.Button(forbutton6_2, EditorStyles.toolbarButton, GUILayout.Width(20))) { paramnode.EditMode = false; } } else { if (GUILayout.Button(forbutton6, GUILayout.Width(20))) { paramnode.EditMode = true; } } if (GUILayout.Button(forbutton1, GUILayout.Width(20))) { string defaultName = "Member_" + (paramnode.Detail.Count + 1); paramnode.Detail.Add(new FixClassCircle.UseParam() { NameCh = defaultName, NameEng = defaultName }); paramnode.foldout = true; } if (GUILayout.Button(forbutton3, GUILayout.Width(20))) { _target.paramlist.Remove(paramnode); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); return; } EditorGUILayout.EndHorizontal(); if (paramnode.EditMode) { EditorGUILayout.BeginHorizontal(); GUI.color = color_Edit; GUILayout.Space(indentation); paramnode.desc = EditorGUILayout.TextField("Desc", paramnode.desc); GUI.color = color_normal; EditorGUILayout.EndHorizontal(); } if (paramnode.foldout) { for (int j = 0; j < paramnode.Detail.Count; j++) { FixClassCircle.UseParam useParam = paramnode.Detail[j]; EditorGUILayout.BeginHorizontal(); GUILayout.Space(indentation); EditorGUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); fixFoldoutPos(useParam.foldout); useParam.foldout = EditorGUILayout.Foldout(useParam.foldout, useParam.NameCh); if (GUILayout.Button(forbutton5, GUILayout.Width(22))) { FixClassCircle.UseParam newUse = new FixClassCircle.UseParam(); newUse.NameCh = useParam.NameCh; newUse.NameEng = useParam.NameEng; newUse.type = useParam.type; newUse.EnumDesc = useParam.EnumDesc; paramnode.Detail.Insert(j, newUse); resync(i, j, 0); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); break; } if (GUILayout.Button(forbutton3, GUILayout.Width(20))) { paramnode.Detail.Remove(useParam); resync(i, j, 1); EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); break; } EditorGUILayout.EndHorizontal(); if (useParam.foldout) { EditorGUILayout.BeginHorizontal(); GUILayout.Space(indentation + 13); EditorGUILayout.BeginVertical(); useParam.NameCh = EditorGUILayout.TextField("Name Ch", useParam.NameCh); useParam.NameEng = EditorGUILayout.TextField("Name Eng", useParam.NameEng); useParam.type = (FixClassCircle.ParamType)EditorGUILayout.EnumPopup("Type", useParam.type); if (useParam.type == FixClassCircle.ParamType.IntEnum || useParam.type == FixClassCircle.ParamType.IntEnumMap) { useParam.EnumDesc = EditorGUILayout.TextField("Enum Desc", useParam.EnumDesc); } else if (!string.IsNullOrEmpty(useParam.EnumDesc)) { useParam.EnumDesc = ""; } EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); } } EditorGUILayout.EndVertical(); EditorGUILayout.EndHorizontal(); } }