/// <summary>
    /// 绘制可拖拽改变区域
    /// </summary>
    /// <param name="dragScreenRect">拖拽区域</param>
    /// <param name="maxScreenRect">最大区域</param>
    /// <param name="drawCallBack">在区域内绘制GUI</param>
    /// <param name="canDragAreaSide">哪条边可拖拽,默认全部可拖拽</param>
    /// <returns></returns>
    public static Rect DrawCanDragArea(Rect dragScreenRect, Rect maxScreenRect, CallBack drawCallBack, EditorCanDragAreaSide canDragAreaSide = EditorCanDragAreaSide.Top | EditorCanDragAreaSide.Bottom | EditorCanDragAreaSide.Left | EditorCanDragAreaSide.Right, string style = "")
    {
        dragScreenRect.xMin = Mathf.Clamp(dragScreenRect.xMin, maxScreenRect.xMin, dragScreenRect.xMax - 5);
        dragScreenRect.xMax = Mathf.Clamp(dragScreenRect.xMax, maxScreenRect.xMin + 1, maxScreenRect.xMax);
        dragScreenRect.yMin = Mathf.Clamp(dragScreenRect.yMin, maxScreenRect.yMin, dragScreenRect.yMax - 5);
        dragScreenRect.yMax = Mathf.Clamp(dragScreenRect.yMax, maxScreenRect.yMin + 1, maxScreenRect.yMax);

        if ((canDragAreaSide & EditorCanDragAreaSide.Left) > 0)
        {
            dragScreenRect.xMin = EditorDrawGUIUtility.DrawHorizontalDragSplitter(dragScreenRect.xMin, maxScreenRect.xMin, dragScreenRect.yMin, 0, 5, maxScreenRect.width, dragScreenRect.height);
        }
        else
        {
            dragScreenRect.xMin = maxScreenRect.xMin;
        }

        if ((canDragAreaSide & EditorCanDragAreaSide.Right) > 0)
        {
            dragScreenRect.xMax = EditorDrawGUIUtility.DrawHorizontalDragSplitter(dragScreenRect.xMax, dragScreenRect.xMin, dragScreenRect.yMin, 5, 0, maxScreenRect.width, dragScreenRect.height);
        }
        else
        {
            dragScreenRect.xMax = maxScreenRect.xMax;
        }

        if ((canDragAreaSide & EditorCanDragAreaSide.Top) > 0)
        {
            dragScreenRect.yMin = EditorDrawGUIUtility.DrawVerticalDragSplitter(dragScreenRect.yMin, maxScreenRect.yMin, dragScreenRect.xMin, 0, 5, maxScreenRect.height, dragScreenRect.width);
        }
        else
        {
            dragScreenRect.yMin = maxScreenRect.yMin;
        }

        if ((canDragAreaSide & EditorCanDragAreaSide.Bottom) > 0)
        {
            dragScreenRect.yMax = EditorDrawGUIUtility.DrawVerticalDragSplitter(dragScreenRect.yMax, dragScreenRect.yMin, dragScreenRect.xMin, 5, 0, maxScreenRect.height, dragScreenRect.width);
        }
        else
        {
            dragScreenRect.yMax = maxScreenRect.yMax;
        }

        if (string.IsNullOrEmpty(style))
        {
            GUILayout.BeginArea(dragScreenRect, "");
        }
        else
        {
            GUILayout.BeginArea(dragScreenRect, "", style);
        }
        if (drawCallBack != null)
        {
            drawCallBack();
        }
        GUILayout.EndArea();

        return(dragScreenRect);
    }
示例#2
0
    /// <summary>
    /// 绘制所有格子
    /// </summary>
    void DrawTableDataGUI()
    {
        if (m_currentData == null)
        {
            return;
        }
        if (buttonStyle == null)
        {
            buttonStyle  = "Button";
            helpBoxStyle = "HelpBox";
        }

        GUILayout.BeginHorizontal();
        if (GUILayout.Button("添加一行数据", GUILayout.Width(90)))
        {
            AddLineDataGUI();
        }
        GUILayout.FlexibleSpace();
        if (GUILayout.Button("加载上一次保存", GUILayout.Width(90)))
        {
            DataManager.CleanCache();
            LoadData(chooseFileName);
        }
        GUILayout.FlexibleSpace();
        if (GUILayout.Button("添加字段", GUILayout.Width(90)))
        {
            Add2FieldGUI();
        }
        GUILayout.FlexibleSpace();

        //字体大小调节
        helpBoxStyle.fontSize = helpBoxStyle.font.fontSize;
        oldButtonFontSize     = helpBoxStyle.fontSize;
        if (nowButtonFontSize == 0)
        {
            nowButtonFontSize = oldButtonFontSize;
        }

        nowButtonFontSize = EditorGUILayout.IntSlider("字体大小", nowButtonFontSize, oldButtonFontSize / 2, MaxButtonFontSize);
        GUILayout.FlexibleSpace();
        searchValue = EditorDrawGUIUtil.DrawSearchField(searchValue);
        GUILayout.EndHorizontal();
        GUILayout.Space(5);

        Rect r = new Rect(0, 60, Screen.width, 18);

        Rect    svPos_temp = new Rect(new Vector2(0, r.y), new Vector2(Screen.width, Screen.height - r.y - 120));
        Vector2 v          = GetCententSize();

        svPos = GUI.BeginScrollView(svPos_temp, svPos, new Rect(r.x, r.y, v.x, v.y));


        float tempWith = wWith;


        GUI.Label(new Rect(r.position, new Vector2(wWith, wHeight)), "", "SelectionRect");
        for (int i = 0; i < withItemList.Count; i++)
        {
            Rect dragR = new Rect(tempWith, r.y, withItemList[i], wHeight);
            Rect maxR  = new Rect(tempWith, r.y, Screen.width * 5, wHeight);
            dragR = EditorDrawGUIUtility.DrawCanDragArea(dragR, maxR, null, EditorCanDragAreaSide.Right);
            if (dragR.width < minItem)
            {
                dragR.width = minItem;
            }
            withItemList[i] = dragR.width;

            tempWith += withItemList[i];

            if (GUI.Button(new Rect(dragR.position, new Vector2(dragR.width, dragR.height / 3)), "▼"))
            {
                if (selectColumnIndexs.Contains(i))
                {
                    selectColumnIndexs.Remove(i);
                }
                else
                {
                    selectColumnIndexs.Add(i);
                }
            }
            if (GUI.Button(new Rect(dragR.x, dragR.y + dragR.height / 3, dragR.width, dragR.height * 2 / 3), i.ToString()))
            {
                if (i == 0)
                {
                    continue;
                }

                List <string> keys = m_currentData.TableKeys;
                string        key  = keys[i];
                if (EditorUtility.DisplayDialog("警告", "是否删除字段[" + key + "]", "确定", "取消"))
                {
                    DeleteField(m_currentData, key);
                    withItemList.RemoveAt(i);
                    return;
                }
            }
        }

        float tempHeight = r.y + wHeight;

        for (int i = 0; i < heightItemList.Count; i++)
        {
            Rect dragR = new Rect(r.x, tempHeight, wWith, heightItemList[i]);
            Rect maxR  = new Rect(r.x, tempHeight, wWith, position.height);
            dragR = EditorDrawGUIUtility.DrawCanDragArea(dragR, maxR, null, EditorCanDragAreaSide.Bottom);
            if (dragR.height < minItem)
            {
                dragR.height = minItem;
            }
            heightItemList[i] = dragR.height;

            tempHeight += heightItemList[i];
            string vStr = "";
            if (i == 0)
            {
                vStr = "D";
                GUI.Label(dragR, vStr, buttonStyle);
            }
            else if (i == 1)
            {
                vStr = "description";
                GUI.Label(dragR, vStr, buttonStyle);
            }
            else if (i == 2)
            {
                vStr = "default";
                GUI.Label(dragR, vStr, buttonStyle);
            }
            else
            {
                int num = i - 3;
                vStr = num.ToString();
                if (GUI.Button(new Rect(dragR.position, new Vector2(dragR.width / 4, dragR.height)), "►"))
                {
                    if (selectRowIndexs.Contains(i))
                    {
                        selectRowIndexs.Remove(i);
                    }
                    else
                    {
                        selectRowIndexs.Add(i);
                    }
                }
                if (GUI.Button(new Rect(dragR.x + dragR.width / 4, dragR.y, dragR.width * 3 / 4, dragR.height), vStr))
                {
                    if (EditorUtility.DisplayDialog("警告", "是否删除第[" + num + "]行数据", "确定", "取消"))
                    {
                        m_currentData.Remove(m_currentData.TableIDs[num]);
                        m_currentData.TableIDs.RemoveAt(num);


                        heightItemList.RemoveAt(i);
                        return;
                    }
                }
            }
        }
        DrawGridItem(r.position + new Vector2(wWith, wHeight));

        GUI.EndScrollView();
    }