/// <summary> /// 显示表格中的字段详情 /// Show field details in the table /// </summary> private void ShowConfigInfo() { _infoScollViewVec = GUILayout.BeginScrollView(_infoScollViewVec, false, false, GUIStyle.none, GUI.skin.verticalScrollbar); List <FieldConfig> removeList = new List <FieldConfig>(); for (int i = 0; i < _tempTableConfig.FieldList.Count; i++) { FieldConfig fieldConfig = _tempTableConfig.FieldList[i]; GUILayout.BeginHorizontal("GroupBox"); { GUILayout.BeginVertical(); { GUILayout.BeginHorizontal();//Name { GUILayout.Label(LanguageUtils.CreateInfoColumnName, GUILayout.Width(INFO_LABEL_WIDTH + 5)); fieldConfig.FieldName = GUILayout.TextField(fieldConfig.FieldName, GUILayout.Width(INFO_INPUT_WIDTH)); GUILayout.Label(LanguageUtils.CreateInfoDescription, GUILayout.Width(INFO_LABEL_WIDTH + 15)); fieldConfig.Description = GUILayout.TextField(fieldConfig.Description, GUILayout.Width(INFO_INPUT_WIDTH)); GUILayout.FlexibleSpace(); if (GUILayout.Button(LanguageUtils.CommonDelete, "OL Minus")) { removeList.Add(fieldConfig); } GUILayout.EndHorizontal(); } GUILayout.Space(5); GUILayout.BeginHorizontal();//Type { GUILayout.Label(LanguageUtils.CreateInfoType, GUILayout.Width(INFO_LABEL_WIDTH + 5)); int baseIndex = EditorGUILayout.Popup(fieldConfig.FieldIndex, TSDatabaseUtils.BaseType, GUILayout.Width(INFO_INPUT_WIDTH)); if (baseIndex != fieldConfig.FieldIndex) { fieldConfig.FieldIndex = baseIndex; fieldConfig.FieldType = TSDatabaseUtils.BaseType[baseIndex]; if (fieldConfig.FieldType == "enum" && !string.IsNullOrEmpty(fieldConfig.EnumName)) { for (int j = 0; j < _enumArray.Length; j++) { if (fieldConfig.EnumName == _enumArray[j]) { fieldConfig.EnumIndex = j; break; } } } } if (fieldConfig.FieldType == "List") { GUILayout.Label(LanguageUtils.CreateInfoItemType, GUILayout.Width(INFO_LABEL_WIDTH + 15)); int collectionIndex = EditorGUILayout.Popup(fieldConfig.GenericIndex, TSDatabaseUtils.GenericType, GUILayout.Width(INFO_INPUT_WIDTH)); if (collectionIndex != fieldConfig.GenericIndex) { fieldConfig.GenericIndex = collectionIndex; fieldConfig.GenericType = TSDatabaseUtils.GenericType[collectionIndex]; if (fieldConfig.GenericType == "enum" && !string.IsNullOrEmpty(fieldConfig.EnumName)) { for (int j = 0; j < _enumArray.Length; j++) { if (fieldConfig.EnumName == _enumArray[j]) { fieldConfig.EnumIndex = j; break; } } } } } if (fieldConfig.FieldType == "enum" || (fieldConfig.FieldType == "List" && fieldConfig.GenericType == "enum")) { GUILayout.Label(LanguageUtils.CreateInfoEnumType, GUILayout.Width(INFO_LABEL_WIDTH + 15)); if (_enumArray.Length == 0) { GUILayout.Label(LanguageUtils.CreateInfoNotEnum, GUILayout.Width(INFO_LABEL_WIDTH + 5)); fieldConfig.EnumName = ""; } else { fieldConfig.EnumIndex = EditorGUILayout.Popup(fieldConfig.EnumIndex, _enumArray, GUILayout.Width(INFO_INPUT_WIDTH)); fieldConfig.EnumName = _enumArray[fieldConfig.EnumIndex]; } } GUILayout.EndHorizontal(); } GUILayout.Space(5); GUILayout.BeginHorizontal();//Config { if ((fieldConfig.FieldType == "List" && (fieldConfig.GenericType == "int" || fieldConfig.GenericType == "string")) || (fieldConfig.FieldType == "int" || fieldConfig.FieldType == "string")) { GUILayout.Label(LanguageUtils.CreateInfoForeignKey, GUILayout.Width(INFO_LABEL_WIDTH - 20)); fieldConfig.HasForeignKey = GUILayout.Toggle(fieldConfig.HasForeignKey, "", GUILayout.Width(15)); if (fieldConfig.HasForeignKey) { GUILayout.Space(5); string[] keys = TSDatabaseUtils.GetForeignKey(_tempTableConfig, fieldConfig.GenericType); if (keys.Length == 1) { fieldConfig.ForeignKeyIndex = 0; fieldConfig.ForeignKey = ""; keys = new string[0]; EditorGUILayout.Popup(fieldConfig.ForeignKeyIndex, keys, GUILayout.Width(INFO_INPUT_WIDTH)); } else { fieldConfig.ForeignKeyIndex = EditorGUILayout.Popup(fieldConfig.ForeignKeyIndex, keys, GUILayout.Width(INFO_INPUT_WIDTH)); fieldConfig.ForeignKey = keys[fieldConfig.ForeignKeyIndex]; } } else { GUILayout.Space(INFO_INPUT_WIDTH + 9); } } else { fieldConfig.HasForeignKey = false; } GUILayout.Label(LanguageUtils.CreateInfoExport, GUILayout.Width(INFO_LABEL_WIDTH + 20)); fieldConfig.IsExport = GUILayout.Toggle(fieldConfig.IsExport, "", GUILayout.Width(20)); GUILayout.EndHorizontal(); } GUILayout.EndVertical(); } GUILayout.EndHorizontal(); } } if (removeList.Count > 0) { for (int i = 0; i < removeList.Count; i++) { _tempTableConfig.FieldList.Remove(removeList[i]); } WriteConfig(); } GUILayout.EndScrollView(); }
private void TypeInfoListDrawElementCallback(Rect rect, int index, bool isActive, bool isFocused) { if (index < _tempTableConfig.FieldList.Count) { FieldConfig fieldConfig = _tempTableConfig.FieldList[index]; //EditorGUI.DrawRect(rect,Color.black); #region 初始化几个Rect Rect guiRect = rect; guiRect.height -= 5; GUI.Label(guiRect, "", "OL box"); Rect oneRect = guiRect; oneRect.y += 10; oneRect.height -= 10; oneRect.x += 5; oneRect.width -= 5; Rect twoRect = guiRect; twoRect.y += 35; twoRect.height -= 35; twoRect.x += 5; twoRect.width -= 5; Rect threeRect = guiRect; threeRect.y += 55; threeRect.height -= 55; threeRect.x += 5; threeRect.width -= 5; #endregion #region 第一行 Rect columnLabelRect = new Rect(oneRect.xMin, oneRect.yMin, INFO_LABEL_WIDTH + 10, 15); EditorGUI.LabelField(columnLabelRect, LanguageUtils.CreateInfoColumnName); Rect columnTextFieldRect = new Rect(columnLabelRect.xMax, oneRect.yMin, INFO_INPUT_WIDTH, 15); fieldConfig.FieldName = EditorGUI.TextField(columnTextFieldRect, fieldConfig.FieldName); Rect desLabelRect = new Rect(columnTextFieldRect.xMax + 10, oneRect.yMin, INFO_LABEL_WIDTH + 10, 15); EditorGUI.LabelField(desLabelRect, LanguageUtils.CreateInfoDescription); Rect desTextFieldRect = new Rect(desLabelRect.xMax, oneRect.yMin, INFO_INPUT_WIDTH, 15); fieldConfig.Description = EditorGUI.TextField(desTextFieldRect, fieldConfig.Description); Rect exportLabelRect = new Rect(desTextFieldRect.xMax + 10, oneRect.yMin, INFO_LABEL_WIDTH + 10, 15); EditorGUI.LabelField(exportLabelRect, LanguageUtils.CreateInfoExport); Rect exportToggleRect = new Rect(exportLabelRect.xMax, oneRect.yMin, 20, 15); fieldConfig.IsExport = EditorGUI.Toggle(exportToggleRect, fieldConfig.IsExport); Rect deleteButtonRect = new Rect(oneRect.xMax - 25, oneRect.yMin, 30, 15); if (GUI.Button(deleteButtonRect, "", "OL Minus")) { if (EditorUtility.DisplayDialog("警告", "是否删除?", "是", "否")) { _tempTableConfig.FieldList.RemoveAt(index); Repaint(); } } #endregion #region 第二行 Rect mainTypeLabelRect = new Rect(twoRect.xMin, twoRect.yMin, INFO_LABEL_WIDTH + 10, 15); EditorGUI.LabelField(mainTypeLabelRect, LanguageUtils.CreateInfoType); Rect mainTypePopupRect = new Rect(mainTypeLabelRect.xMax, twoRect.yMin, INFO_INPUT_WIDTH, 15); int baseIndex = EditorGUI.Popup(mainTypePopupRect, fieldConfig.FieldIndex, TSDatabaseUtils.BaseType); if (baseIndex != fieldConfig.FieldIndex) { fieldConfig.FieldIndex = baseIndex; fieldConfig.FieldType = TSDatabaseUtils.BaseType[baseIndex]; if (fieldConfig.FieldType == "enum" && !string.IsNullOrEmpty(fieldConfig.EnumName)) { for (int j = 0; j < _enumArray.Length; j++) { if (fieldConfig.EnumName == _enumArray[j]) { fieldConfig.EnumIndex = j; break; } } } } if (fieldConfig.FieldType == "List") { Rect listTypeLabelRect = new Rect(mainTypePopupRect.xMax + 10, twoRect.yMin, INFO_LABEL_WIDTH + 10, 15); EditorGUI.LabelField(listTypeLabelRect, LanguageUtils.CreateInfoItemType); Rect listTypePopupRect = new Rect(listTypeLabelRect.xMax, twoRect.yMin, INFO_INPUT_WIDTH, 15); int collectionIndex = EditorGUI.Popup(listTypePopupRect, fieldConfig.GenericIndex, TSDatabaseUtils.GenericType); if (collectionIndex != fieldConfig.GenericIndex) { fieldConfig.GenericIndex = collectionIndex; fieldConfig.GenericType = TSDatabaseUtils.GenericType[collectionIndex]; if (fieldConfig.GenericType == "enum" && !string.IsNullOrEmpty(fieldConfig.EnumName)) { for (int j = 0; j < _enumArray.Length; j++) { if (fieldConfig.EnumName == _enumArray[j]) { fieldConfig.EnumIndex = j; break; } } } } if (fieldConfig.GenericType == "enum") { ShowEnum(listTypePopupRect, fieldConfig); } } else if (fieldConfig.FieldType == "enum") { ShowEnum(mainTypePopupRect, fieldConfig); } #endregion #region 第三行 if ((fieldConfig.FieldType == "List" && (fieldConfig.GenericType == "int" || fieldConfig.GenericType == "string")) || (fieldConfig.FieldType == "int" || fieldConfig.FieldType == "string")) { Rect foreignKeyLabelRect = new Rect(threeRect.xMin, threeRect.yMin, INFO_LABEL_WIDTH - 20, 15); EditorGUI.LabelField(foreignKeyLabelRect, LanguageUtils.CreateInfoForeignKey); Rect foreignKeyToggleRect = new Rect(foreignKeyLabelRect.xMax + 5, threeRect.yMin, 15, 15); fieldConfig.HasForeignKey = EditorGUI.Toggle(foreignKeyToggleRect, fieldConfig.HasForeignKey); if (fieldConfig.HasForeignKey) { Rect foreignKeyPopupRect = new Rect(foreignKeyToggleRect.xMax + 10, threeRect.yMin, INFO_INPUT_WIDTH, 15); string[] keys = TSDatabaseUtils.GetForeignKey(_tempTableConfig, fieldConfig.GenericType); //if (keys.Length == 1) //{ // fieldConfig.ForeignKeyIndex = 0; // fieldConfig.ForeignKey = ""; // keys = new string[0]; // EditorGUI.Popup(foreignKeyPopupRect,fieldConfig.ForeignKeyIndex, keys); //} //else //{ fieldConfig.ForeignKeyIndex = EditorGUI.Popup(foreignKeyPopupRect, fieldConfig.ForeignKeyIndex, keys); if (keys.Length > fieldConfig.ForeignKeyIndex && fieldConfig.ForeignKeyIndex >= 0) { fieldConfig.ForeignKey = keys[fieldConfig.ForeignKeyIndex]; } //} } else { GUILayout.Space(INFO_INPUT_WIDTH + 9); } } else { fieldConfig.HasForeignKey = false; } #endregion } }