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