/// <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); }
/// <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(); }