private void GUIShowTableBody()
    {
        GUILayout.BeginArea(new Rect(3, 85, position.width - 20, position.height - 150));
        _tableScrollView = GUILayout.BeginScrollView(_tableScrollView, false, false, GUI.skin.horizontalScrollbar, GUIStyle.none);// );
        GUILayout.BeginVertical();
        Test2 removeData = null;
        int   begin      = (_pageNum - 1) * _excelConfig.ShowCount;
        int   end        = Mathf.Min(_pageNum * _excelConfig.ShowCount, _dataList.Count);

        for (int i = begin; i < end; i++)
        {
            GUILayout.BeginHorizontal(EditorGUIStyle.GetGroupBoxStyle(), GUILayout.Width(_areaWidht + 30), GUILayout.MinHeight(30));

            GUILayout.BeginHorizontal(EditorGUIStyle.GetGroupBoxStyle(), GUILayout.Width(30), GUILayout.ExpandHeight(true));
            GUILayout.Space(5);
            if (GUILayout.Button("", "OL Minus"))
            {
                removeData = _dataList[i];
            }
            GUILayout.EndHorizontal();

            float columnsWidth = 0;


            if (_primaryKeyInfo.Values.ContainsKey(_dataList[i].T2.ToString()))
            {
                if (_primaryKeyInfo.Values[_dataList[i].T2.ToString()] > 1)
                {
                    GUI.color = Color.red;
                }
            }
            columnsWidth = _excelConfig.ColumnsWidth[0];
            GUILayout.BeginHorizontal(EditorGUIStyle.GetGroupBoxStyle(), GUILayout.Width(columnsWidth), GUILayout.MaxWidth(columnsWidth), GUILayout.ExpandHeight(true));
            int key = (int)TableDatabaseUtils.RenderFieldInfoControl(columnsWidth, _tableConfig.FieldList[0].FieldType, _dataList[i].T2);
            if (key != _dataList[i].T2)
            {
                _primaryKeyInfo.Values[_dataList[i].T2.ToString()]--;
                if (_primaryKeyInfo.Values.ContainsKey(key.ToString()))
                {
                    _primaryKeyInfo.Values[key.ToString()]++;
                }
                else
                {
                    _primaryKeyInfo.Values.Add(key.ToString(), 1);
                }
                _dataList[i].T2 = key;
            }
            GUILayout.EndHorizontal();
            GUI.color = Color.white;



            //GUILayout.BeginHorizontal(EditorGUIStyle.GetGroupBoxStyle(), GUILayout.Width(_excelConfig.ColumnsWidth[8]), GUILayout.ExpandHeight(true));
            //GUILayout.Label("");
            //GUILayout.EndHorizontal();

            GUILayout.EndHorizontal();
        }
        if (removeData != null)
        {
            _dataList.Remove(removeData);
            if (_serializeData.DataList.Contains(removeData))
            {
                _serializeData.DataList.Remove(removeData);
            }
            _primaryKeyInfo.Values[removeData.T2.ToString()]--;
        }
        GUILayout.EndVertical();
        GUILayout.EndScrollView();
        GUILayout.EndArea();
    }
    private void GUIShowTableHead()
    {
        _areaWidht = 0;
        for (int i = 0; i < _divisionSlider.Count; i++)
        {
            _areaWidht += _excelConfig.ColumnsWidth[i];
        }
        Rect areaRect = new Rect(35, 55, _areaWidht, 30);

        rectList = new List <Rect>(_divisionSlider.HorizontalLayoutRects(areaRect));
        GUILayout.BeginArea(new Rect(3, 50, position.width - 20, 50));
        GUILayout.BeginScrollView(new Vector2(_tableScrollView.x, 0), GUIStyle.none, GUIStyle.none);
        GUILayout.BeginHorizontal(EditorGUIStyle.GetGroupBoxStyle(), GUILayout.Width(_areaWidht), GUILayout.Height(30));
        int index = 0;

        GUILayout.BeginHorizontal(EditorGUIStyle.GetGroupBoxStyle(), GUILayout.Width(30), GUILayout.MaxHeight(30));
        GUILayout.Space(2);
        GUILayout.BeginVertical();
        GUILayout.Space(5);
        if (GUILayout.Button("R", EditorGUIStyle.GetTitleButton, GUILayout.Height(20), GUILayout.ExpandWidth(true)))
        {
            for (int i = 0; i < _excelConfig.ColumnsWidth.Count; i++)
            {
                _divisionSlider.SetSize(i, TableDatabaseUtils.TableConfigSerializeData.Setting.ColumnWidth);
                _excelConfig.ColumnsWidth[i] = TableDatabaseUtils.TableConfigSerializeData.Setting.ColumnWidth;
            }
        }
        GUILayout.EndVertical();
        GUILayout.Space(2);
        GUILayout.EndHorizontal();

        for (index = 0; index < _tableConfig.FieldList.Count; index++)
        {
            GUILayout.BeginHorizontal(EditorGUIStyle.GetGroupBoxStyle(), GUILayout.Width(rectList[index].width), GUILayout.MaxHeight(30));
            string name = string.IsNullOrEmpty(_tableConfig.FieldList[index].ShowName) ? _tableConfig.FieldList[index].Name : _tableConfig.FieldList[index].ShowName;
            GUILayout.Space(5);
            GUILayout.BeginVertical();
            GUILayout.Space(5);
            if (GUILayout.Button(name, EditorGUIStyle.GetTitleButton, GUILayout.Height(20)))
            {
                _dataList.Clear();
                _dataList.AddRange(_serializeData.DataList.OrderBy(a => a.T2));
                _isSort = true;
            }
            _excelConfig.ColumnsWidth[index] = rectList[index].width;
            GUILayout.EndVertical();
            GUILayout.Space(5);
            GUILayout.EndHorizontal();
        }
        GUILayout.BeginHorizontal(EditorGUIStyle.GetGroupBoxStyle(), GUILayout.Width(rectList[index].width), GUILayout.MaxHeight(30));
        GUILayout.Space(5);
        GUILayout.BeginVertical();
        GUILayout.Space(5);
        GUILayout.Button("", EditorGUIStyle.GetTitleButton, GUILayout.Height(20));
        GUILayout.Space(5);
        GUILayout.EndVertical();
        GUILayout.Space(5);
        GUILayout.EndHorizontal();
        GUILayout.Space(5);
        GUILayout.EndHorizontal();
        GUILayout.EndScrollView();
        GUILayout.EndArea();
        float f = 0;

        if (_areaWidht > position.width)
        {
            float diff = _areaWidht - position.width + 20;
            f = diff * Mathf.Clamp(_tableScrollView.x / diff, 0f, 1f);
        }

        _divisionSlider.DoHorizontalSliders(areaRect, f);
        _divisionSlider.Resize(areaRect.width, DivisionSlider.ResizeMode.PrioritizeOuter);
    }
    public static object RenderFieldInfoControl(float width, string fieldType, object value, string otherType = "")
    {
        object result = null;

        switch (fieldType)
        {
        case "int":
        case "Int32":
            result = EditorGUILayout.IntField((int)value, GUILayout.MaxWidth(width - 10));
            break;

        case "string":
            result = EditorGUILayout.TextArea(value == null ? "" : value.ToString(), GUILayout.MaxWidth(width - 10));
            break;

        case "Vector2":
            result = EditorGUILayout.Vector3Field("", (Vector2)value, GUILayout.MaxWidth(width - 10));
            break;

        case "Vector3":
            result = EditorGUILayout.Vector3Field("", (Vector3)value, GUILayout.MaxWidth(width - 10));
            break;

        case "Quaternion":
            Quaternion quaternion = (Quaternion)value;
            Vector4    vector4    = new Vector4(quaternion.x, quaternion.y, quaternion.z, quaternion.w);
            vector4 = EditorGUILayout.Vector4Field("", vector4, GUILayout.MaxWidth(width - 10));
            result  = new Quaternion(vector4.x, vector4.y, vector4.z, vector4.w);
            break;

        case "Sprite":
            result = EditorGUILayout.ObjectField((Sprite)value, typeof(Sprite), false, GUILayout.MaxWidth(width - 10));
            if (((Sprite)value) != null)
            {
                GUILayout.Label(new GUIContent(image: ((Sprite)value).texture), GUILayout.Width(32), GUILayout.Height(32));
            }
            break;

        case "Texture":
            result = EditorGUILayout.ObjectField((Texture)value, typeof(Texture), false, GUILayout.MaxWidth(width - 10));
            if (((Texture)value) != null)
            {
                GUILayout.Label(new GUIContent(image: ((Texture)value)), GUILayout.Width(32), GUILayout.Height(32));
            }
            break;

        case "Texture2D":
            result = EditorGUILayout.ObjectField((Texture2D)value, typeof(Texture2D), false, GUILayout.MaxWidth(width - 10));
            if (((Texture2D)value) != null)
            {
                GUILayout.Label(new GUIContent(image: ((Texture2D)value)), GUILayout.Width(32), GUILayout.Height(32));
            }
            break;

        case "GameObject":
            result = EditorGUILayout.ObjectField((GameObject)value, typeof(GameObject), false, GUILayout.MaxWidth(width - 10));
            break;

        case "enum":
            result = EditorGUILayout.EnumPopup((Enum)value, GUILayout.MaxWidth(width - 10));
            break;

        case "List":
            GUILayout.BeginVertical(EditorGUIStyle.GetFieldBoxStyle(), GUILayout.Width(width), GUILayout.MaxWidth(width), GUILayout.ExpandHeight(true));
            Type         listType         = value.GetType();
            Type         elementType      = listType.GetGenericArguments()[0];
            int          count            = (int)listType.GetProperty("Count").GetValue(value, null);
            PropertyInfo itemPropertyInfo = value.GetType().GetProperty("Item");
            int          removeAt         = -1;
            for (int i = 0; i < count; i++)
            {
                GUILayout.BeginHorizontal();
                object item = itemPropertyInfo.GetValue(value, new object[] { i });
                item = RenderFieldInfoControl(width - 20, elementType.Name, item);
                itemPropertyInfo.SetValue(value, item, new object[] { i });
                if (GUILayout.Button("", "OL Minus"))
                {
                    removeAt = i;
                }
                GUILayout.EndHorizontal();
            }
            if (removeAt >= 0)
            {
                listType.GetMethod("RemoveAt").Invoke(value, new object[] { removeAt });
            }
            if (GUILayout.Button("Add"))
            {
                object o = elementType.IsValueType ? Activator.CreateInstance(elementType) : null;
                value.GetType().GetMethod("Add").Invoke(value, new object[] { o });
            }
            result = value;
            GUILayout.EndVertical();
            break;

        default:
            EditorGUILayout.LabelField(value == null ? "" : value.ToString(), GUILayout.MaxWidth(width - 10));
            result = null;
            break;
        }
        //GUILayout.EndHorizontal();

        return(result);
    }
Example #4
0
    /// <summary>
    /// Draw a line between two points with the specified color and thickness
    /// Inspired by code posted by Sylvan
    /// http://forum.unity3d.com/threads/17066-How-to-draw-a-GUI-2D-quot-line-quot?p=407005&viewfull=1#post407005
    /// </summary>
    /// <param name="lineStart">The start of the line</param>
    /// <param name="lineEnd">The end of the line</param>
    /// <param name="color">The color of the line</param>
    /// <param name="thickness">The thickness of the line</param>
    public static void DrawLine(Vector2 lineStart, Vector2 lineEnd, Color color, int thickness)
    {
        Texture2D texture = EditorGUIStyle.GetTexture(color);

        DrawLineStretched(lineStart, lineEnd, texture, thickness);
    }
    /// <summary>
    /// 显示搜索
    /// </summary>
    private void GUISearchInfo()
    {
        if (_searchFieldArray.Length <= 0)
        {
            return;
        }
        GUILayout.BeginHorizontal(EditorGUIStyle.GetPageLabelGuiStyle(), GUILayout.Height(25));
        GUI.color         = new Color(1, 1, 1, 0);
        _searchFieldIndex = EditorGUI.Popup(new Rect(15, 25, 10, 14), _searchFieldIndex, _searchFieldArray);
        GUI.color         = Color.white;
        GUI.SetNextControlName("SearchText");
        string str = GUILayout.TextField(_searchValue, "ToolbarSeachTextFieldPopup");

        if (string.IsNullOrEmpty(str) && !_isMouseInSearch)
        {
            GUI.color = new Color(0.8f, 0.8f, 0.8f);
            GUI.Label(new Rect(25, 28, 90, 12), _searchFieldArray[_searchFieldIndex], "RL Element");
            GUI.color = Color.white;
        }
        if (str != _searchValue)
        {
            _searchValue = str;
            if (!_isAdvancedSearch)
            {
                _dataList.Clear();
                _isSort = false;
                if (!string.IsNullOrEmpty(str))
                {
                    _dataList = SearchTableData.Search <Test>(_searchFieldArray[_searchFieldIndex], _searchValue, _serializeData.DataList);
                }
                else
                {
                    _dataList.Clear();
                    _dataList.AddRange(_serializeData.DataList);
                }
            }
            else
            {
                if (string.IsNullOrEmpty(_searchValue))
                {
                    SearchTableData.Hide();
                }
                else
                {
                    SearchTableData.Show(_searchValue, (a) =>
                    {
                        _searchValue = a + ":";
                        SearchTableData.Hide();
                        this.Focus();
                        GUI.FocusControl("SearchText");
                        this.Repaint();
                    });
                }
            }
        }
        else if (string.IsNullOrEmpty(str) && !_isSort)
        {
            _searchValue = str;
            _dataList.Clear();
            _dataList.AddRange(_serializeData.DataList);
        }

        if (string.IsNullOrEmpty(_searchValue))
        {
            GUILayout.Button("", "ToolbarSeachCancelButtonEmpty", GUILayout.Width(20));
        }
        else
        {
            if (GUILayout.Button("", "ToolbarSeachCancelButton", GUILayout.Width(20)))
            {
                _searchValue = "";
                SearchTableData.Hide();
                GUI.FocusControl("GUIArea");
            }
        }
        _isAdvancedSearch = GUILayout.Toggle(_isAdvancedSearch, "", GUILayout.Height(10), GUILayout.Width(10));
        if (GUILayout.Button("高级搜索", EditorGUIStyle.GetMiddleButton, GUILayout.Width(60)))
        {
            if (_isAdvancedSearch)
            {
                _dataList = SearchTableData.AdvancedSearch <Test>(this, _searchFieldArray[_searchFieldIndex], _searchValue, _serializeData.DataList);
            }
        }
        GUILayout.EndHorizontal();
    }