/// <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();
    }
示例#2
0
    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
        }
    }