void OnEnable() { _enumArray = TSDatabaseUtils.GetEnums(); _typeList = new ReorderableList(TSDatabaseUtils.TableConfigSerializeData.TableConfigList, typeof(TableConfig), true, true, true, false); _typeList.elementHeight = 30; _typeList.onSelectCallback = TypeListSelectCallback; _typeList.drawHeaderCallback = TypeListDrawHeaderCallback; _typeList.drawElementCallback = TypeListDrawElementCallback; _typeList.onAddCallback = TypeListAddCallback; if (_selectConfigIndex >= 0) { if (_selectConfigIndex >= TSDatabaseUtils.TableConfigSerializeData.TableConfigList.Count) { _selectConfigIndex = 0; } else { _tempTableConfig = TSDatabaseUtils.TableConfigSerializeData.TableConfigList[_selectConfigIndex]; _typeInfoList = new ReorderableList(_tempTableConfig.FieldList, typeof(FieldConfig), true, true, true, false); _typeInfoList.drawHeaderCallback = TypeInfoListDrawHeaderCallback; _typeInfoList.drawElementCallback = TypeInfoListDrawElementCallback; _typeInfoList.elementHeight = 80; } } }
void OnDestroy() { try { TSDatabaseUtils.SavaGlobalData(); } catch (Exception ex) { throw ex; } }
private void OnDestroy() { try { EditorUtility.SetDirty(_excelConfig); TSDatabaseUtils.SavaGlobalData(); } catch (Exception ex) { throw ex; } }
/// <summary> /// 显示Title /// </summary> private void GUITitleInfo() { GUI.color = new Color(0.8f, 0.8f, 0.8f); GUILayout.BeginHorizontal("OL Title"); GUI.color = Color.white; GUILayout.Space(-5); if (GUILayout.Button(LanguageUtils.DataSave, EditorGUIStyle.MiddleButtonStyle, GUILayout.ExpandHeight(true), GUILayout.Width(100))) { this.ShowNotification(new GUIContent(LanguageUtils.DataSaving)); _primaryKeyInfo.Values.Clear(); for (int i = 0; i < _serializeData.DataList.Count; i++) { string value = _serializeData.DataList[i].Id.ToString(); if (!_primaryKeyInfo.Values.ContainsKey(value)) { _primaryKeyInfo.Values.Add(value, 1); } else { _primaryKeyInfo.Values[value]++; } } TSDatabaseUtils.SavaGlobalData(); EditorUtility.SetDirty(_serializeData); AssetDatabase.SaveAssets(); this.RemoveNotification(); EditorUtility.DisplayDialog(LanguageUtils.DataSave, "Success", "Ok"); } GUILayout.FlexibleSpace(); if (GUILayout.Button(LanguageUtils.CreateListAdd, EditorGUIStyle.MiddleButtonStyle, GUILayout.ExpandHeight(true), GUILayout.Width(100))) { Test data = new Test(); _serializeData.DataList.Add(data); if (_primaryKeyInfo.Values.ContainsKey(data.Id.ToString())) { _primaryKeyInfo.Values[data.Id.ToString()]++; } else { _primaryKeyInfo.Values.Add(data.Id.ToString(), 1); } _pageMaxNum = (_serializeData.DataList.Count / _excelConfig.ShowCount); if (_serializeData.DataList.Count % _excelConfig.ShowCount > 0) { _pageMaxNum++; } _pageNum = 1; } GUILayout.Space(-5); GUILayout.EndHorizontal(); }
private void HeadGUI() { GUI.color = new Color(0.8f, 0.8f, 0.8f); GUILayout.BeginHorizontal("OL Title"); GUI.color = Color.white; GUILayout.Label(LanguageUtils.SettingHead); GUILayout.FlexibleSpace(); if (GUILayout.Button(LanguageUtils.CommonSaveSetting)) { TSDatabaseUtils.SavaGlobalData(); } GUILayout.EndHorizontal(); }
void OnEnable() { if (_selectConfigIndex >= 0) { if (_selectConfigIndex >= TSDatabaseUtils.TableConfigSerializeData.TableConfigList.Count) { _selectConfigIndex = 0; } else { _tempTableConfig = TSDatabaseUtils.TableConfigSerializeData.TableConfigList[_selectConfigIndex]; } } _enumArray = TSDatabaseUtils.GetEnums(); }
private void ImportData(ExportDto dto) { string fileName = EditorUtility.OpenFilePanel("", "", "txt"); if (!string.IsNullOrEmpty(fileName)) { List <FieldConfig> importFieldConfigList = new List <FieldConfig>(); for (int i = 0; i < dto.CurrentConfig.FieldList.Count; i++) { if (dto.CurrentConfig.FieldList[i].FieldName == dto.CurrentConfig.PrimaryKey) { if (dto.CurrentConfig.FieldList[i].IsExport == false) { if (EditorUtility.DisplayDialog("Error", "PrimaryKey 没有导出", "OK")) { return; } } } if (dto.CurrentConfig.FieldList[i].IsExport) { importFieldConfigList.Add(dto.CurrentConfig.FieldList[i]); } } int count = importFieldConfigList.Count; string[] allLine = File.ReadAllLines(fileName); if (allLine.Length < 1) { if (EditorUtility.DisplayDialog("Error", "File Error", "OK")) { return; } } string[] fieldArray = allLine[0].Split(new char[] { '\t' }, StringSplitOptions.RemoveEmptyEntries); if (fieldArray.Length != count) { Debug.LogError("fieldArray.Length"); if (EditorUtility.DisplayDialog("Error", "File Error", "OK")) { return; } } ScriptableObject assetObj = AssetDatabase.LoadAssetAtPath <ScriptableObject>(dto.CurrentConfig.DataPath); object items = assetObj.GetType().GetField("DataList").GetValue(assetObj); if (items == null) { if (EditorUtility.DisplayDialog("Error", "Unity data is null", "OK")) { return; } } Assembly assembly = assetObj.GetType().Assembly; Type itemType = assembly.GetType(dto.CurrentConfig.TableName); object targetItems = Activator.CreateInstance(typeof(List <>).MakeGenericType(itemType)); MethodInfo addMethod = items.GetType().GetMethod("Add"); MethodInfo getMethod = items.GetType().GetMethod("get_Item"); int orginCount = (int)items.GetType().GetProperty("Count").GetValue(items, null); if (itemType == null) { if (EditorUtility.DisplayDialog("Error", "Table type Error", "OK")) { return; } } //清空所有主键重新键入 if (TSDatabaseUtils.PrimaryKeySerializeData.PrimaryKeyDic.ContainsKey(dto.CurrentConfig.TableName)) { TSDatabaseUtils.PrimaryKeySerializeData.PrimaryKeyDic[dto.CurrentConfig.TableName].Values.Clear(); } else { TSDatabaseUtils.PrimaryKeySerializeData.PrimaryKeyDic.Add(dto.CurrentConfig.TableName, new PrimaryKeyInfo()); TSDatabaseUtils.PrimaryKeySerializeData.PrimaryKeyDic[dto.CurrentConfig.TableName].TableName = dto.CurrentConfig.TableName; TSDatabaseUtils.PrimaryKeySerializeData.PrimaryKeyDic[dto.CurrentConfig.TableName].PrimaryKey = dto.CurrentConfig.PrimaryKey; TSDatabaseUtils.PrimaryKeySerializeData.PrimaryKeyDic[dto.CurrentConfig.TableName].PrimaryType = dto.CurrentConfig.PrimaryType; TSDatabaseUtils.PrimaryKeySerializeData.PrimaryKeyDic[dto.CurrentConfig.TableName].Values = new Dictionary <string, int>(); } string keyName = dto.CurrentConfig.PrimaryKey; int keyIndex = 0; for (int i = 0; i < count; i++) { if (fieldArray[i] == dto.CurrentConfig.PrimaryKey) { keyIndex = i; break; } } EditorUtility.DisplayProgressBar("开始导入", "正在导入0/" + (allLine.Length - 1), 0f); try { int begin = 1; for (; begin < allLine.Length; begin++) { string[] contentArray = allLine[begin].Split(new char[] { '\t' }, StringSplitOptions.RemoveEmptyEntries); if (contentArray.Length > count) { continue; } object o = null; object keyValue = null; //找到主键ID 一样的数据 for (int j = 0; j < orginCount; j++) { o = getMethod.Invoke(items, new object[] { j }); keyValue = o.GetType().GetField(keyName).GetValue(o); if (keyValue.ToString() == contentArray[keyIndex]) { break; } else { o = null; } } //如果原表中没有查询到,则创建新的 if (o == null) { o = assembly.CreateInstance(itemType.FullName); } for (int i = 0; i < importFieldConfigList.Count; i++) { FieldConfig fieldConfig = importFieldConfigList[i]; ///如果是Unity对象类型则不赋值 switch (fieldConfig.FieldType) { case "Sprite": case "Texture": case "GameObject": case "Texture2D": continue; case "List": switch (fieldConfig.GenericType) { case "Sprite": case "Texture": case "GameObject": case "Texture2D": continue; } break; } o.GetType().GetField(fieldConfig.FieldName).SetValue(o, GetObject(fieldConfig, contentArray[i], assembly, fieldConfig.FieldType)); if (keyName == fieldConfig.FieldName) { keyValue = o.GetType().GetField(fieldConfig.FieldName).GetValue(o); } } addMethod.Invoke(targetItems, new object[] { o }); if (TSDatabaseUtils.PrimaryKeySerializeData.PrimaryKeyDic[dto.CurrentConfig.TableName].Values.ContainsKey(keyValue.ToString())) { TSDatabaseUtils.PrimaryKeySerializeData.PrimaryKeyDic[dto.CurrentConfig.TableName].Values[keyValue.ToString()]++; } else { TSDatabaseUtils.PrimaryKeySerializeData.PrimaryKeyDic[dto.CurrentConfig.TableName].Values.Add(keyValue.ToString(), 1); } EditorUtility.DisplayProgressBar("开始导入", "正在导入" + (begin - 1) + "/" + (allLine.Length - 1), (begin - 1) * 1f / (allLine.Length - 1)); System.Threading.Thread.Sleep(10); } assetObj.GetType().GetField("DataList").SetValue(assetObj, targetItems); EditorUtility.SetDirty(assetObj); TSDatabaseUtils.SavaGlobalData(); EditorUtility.ClearProgressBar(); EditorUtility.DisplayDialog("成功", "导入成功!", "OK"); } catch (Exception ex) { EditorUtility.ClearProgressBar(); throw ex; } } else { if (EditorUtility.DisplayDialog("Error", "Path is Error", "OK")) { return; } } }
private void WriteConfig() { TSDatabaseUtils.SavaGlobalData(); AssetDatabase.SaveAssets(); }
/// <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(); }
/// <summary> /// 显示类型具体信息 /// Display the details of the form /// </summary> private void ShowTypeInfo() { if (_tempTableConfig != null) { GUILayout.BeginArea(new Rect(220, 10, 570, 480), "", "box"); GUI.color = new Color(0.8f, 0.8f, 0.8f);; GUILayout.BeginHorizontal("OL Title"); GUI.color = Color.white; GUILayout.Label(LanguageUtils.CreateInfoTitle); GUILayout.FlexibleSpace(); if (GUILayout.Button(LanguageUtils.CreateInfoAddField, "OL Plus")) { _tempTableConfig.FieldList.Add(new FieldConfig() { FieldIndex = 0, FieldType = "int", GenericIndex = 0, GenericType = "int" }); } GUILayout.EndHorizontal(); GUILayout.BeginVertical(); GUILayout.BeginArea(new Rect(10, 30, 550, 440), "", "box"); GUILayout.Space(5); GUILayout.BeginHorizontal(); GUILayout.Label(LanguageUtils.CreateInfoTableName, GUILayout.Width(INFO_LABEL_WIDTH)); _tempTableConfig.TableName = GUILayout.TextField(_tempTableConfig.TableName, GUILayout.Width(INFO_INPUT_WIDTH)); GUILayout.Label(LanguageUtils.CreateInfoDescription, GUILayout.Width(INFO_LABEL_WIDTH)); _tempTableConfig.Description = GUILayout.TextField(_tempTableConfig.Description, GUILayout.Width(INFO_INPUT_WIDTH)); GUILayout.Label(LanguageUtils.CreateInfoPrimaryKey, GUILayout.Width(INFO_LABEL_WIDTH)); string[] keys = TSDatabaseUtils.GetPrimaryKey(_tempTableConfig); if (keys.Length == 1) { EditorGUILayout.Popup(0, new string[0], GUILayout.Width(INFO_INPUT_WIDTH)); } else { _tempTableConfig.PrimaryIndex = EditorGUILayout.Popup(_tempTableConfig.PrimaryIndex, keys, GUILayout.Width(INFO_INPUT_WIDTH)); _tempTableConfig.PrimaryKey = keys[_tempTableConfig.PrimaryIndex]; for (int i = 0; i < _tempTableConfig.FieldList.Count; i++) { if (_tempTableConfig.FieldList[i].FieldName == _tempTableConfig.PrimaryKey) { _tempTableConfig.PrimaryType = _tempTableConfig.FieldList[i].FieldType; break; } } } //} GUILayout.FlexibleSpace(); if (GUILayout.Button(LanguageUtils.CommonSaveSetting)) { WriteConfig(); } GUILayout.Space(10); GUILayout.EndHorizontal(); GUILayout.Space(5); ShowConfigInfo(); GUILayout.FlexibleSpace(); GUILayout.BeginHorizontal(); if (GUILayout.Button(LanguageUtils.CreateInfoGenerateScript)) { GenerateCode(); } if (GUILayout.Button(LanguageUtils.CreateInfoSaveAs)) { _tempTableConfig.CodePath = ""; _tempTableConfig.DataPath = ""; GenerateCode(); } GUILayout.EndVertical(); GUILayout.EndArea(); GUILayout.EndVertical(); GUILayout.EndArea(); } }
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 } }
private void CheckPlayerData() { for (int i = 0; i < TSDatabaseUtils.TableConfigSerializeData.TableConfigList.Count; i++) { if (TSDatabaseUtils.TableConfigSerializeData.TableConfigList[i].TableName == "Test") { _tableConfig = TSDatabaseUtils.TableConfigSerializeData.TableConfigList[i]; break; } } if (string.IsNullOrEmpty(_tableConfig.DataPath)) { string path = EditorUtility.SaveFilePanelInProject(LanguageUtils.CommonSaveFile, _tableConfig.TableName + ".asset", "asset", ""); if (string.IsNullOrEmpty(path)) { if (EditorUtility.DisplayDialog(LanguageUtils.CommonSaveFailed, LanguageUtils.CommonNullPath, "OK")) { return; } } _tableConfig.DataPath = path; _serializeData = ScriptableObject.CreateInstance <TestSerializeData>(); TSDatabaseUtils.PrimaryKeySerializeData.PrimaryKeyDic.Add(_tableConfig.TableName, new PrimaryKeyInfo()); _primaryKeyInfo = TSDatabaseUtils.PrimaryKeySerializeData.PrimaryKeyDic[_tableConfig.TableName]; _primaryKeyInfo.TableName = _tableConfig.TableName; _primaryKeyInfo.PrimaryKey = _tableConfig.PrimaryKey; _primaryKeyInfo.PrimaryType = _tableConfig.PrimaryType; _primaryKeyInfo.Values = new Dictionary <string, int>(); TSDatabaseUtils.SavaGlobalData(); AssetDatabase.CreateAsset(_serializeData, path); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); } else { _serializeData = AssetDatabase.LoadAssetAtPath <TestSerializeData>(_tableConfig.DataPath); _primaryKeyInfo = TSDatabaseUtils.PrimaryKeySerializeData.PrimaryKeyDic[_tableConfig.TableName]; if (_tableConfig.PrimaryKey != _primaryKeyInfo.PrimaryKey) { //更换主键 _primaryKeyInfo.TableName = _tableConfig.TableName; _primaryKeyInfo.PrimaryKey = _tableConfig.PrimaryKey; _primaryKeyInfo.PrimaryType = _tableConfig.PrimaryType; _primaryKeyInfo.Values = new Dictionary <string, int>(); for (int i = 0; i < _serializeData.DataList.Count; i++) { string value = _serializeData.DataList[i].Id.ToString(); if (!_primaryKeyInfo.Values.ContainsKey(value)) { _primaryKeyInfo.Values.Add(value, 1); } else { _primaryKeyInfo.Values[value]++; } } TSDatabaseUtils.SavaGlobalData(); } } _dataList = new List <Test>(); _dataList.AddRange(_serializeData.DataList); }
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(); Test 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.GroupBoxStyle, GUILayout.Width(_areaWidht + 50), GUILayout.MinHeight(30)); GUILayout.BeginHorizontal(EditorGUIStyle.GroupBoxStyle, GUILayout.Width(50), GUILayout.ExpandHeight(true)); GUILayout.BeginVertical(); if (GUILayout.Button("", EditorGUIStyle.TableMinusButtonStyle)) { removeData = _dataList[i]; } GUILayout.Label((i + 1).ToString(), EditorGUIStyle.TableNumberStyle, GUILayout.MaxWidth(50)); GUILayout.EndVertical(); GUILayout.EndHorizontal(); float columnsWidth = 0; if (_primaryKeyInfo.Values.ContainsKey(_dataList[i].Id.ToString())) { if (_primaryKeyInfo.Values[_dataList[i].Id.ToString()] > 1) { GUI.color = Color.red; } } columnsWidth = _excelConfig.ColumnsWidth[0]; GUILayout.BeginHorizontal(EditorGUIStyle.GroupBoxStyle, GUILayout.Width(columnsWidth), GUILayout.MaxWidth(columnsWidth), GUILayout.ExpandHeight(true)); int key = (int)TSDatabaseUtils.RenderFieldInfoControl(columnsWidth, _tableConfig.FieldList[0].FieldType, _dataList[i].Id); if (key != _dataList[i].Id) { _primaryKeyInfo.Values[_dataList[i].Id.ToString()]--; if (_primaryKeyInfo.Values.ContainsKey(key.ToString())) { _primaryKeyInfo.Values[key.ToString()]++; } else { _primaryKeyInfo.Values.Add(key.ToString(), 1); } _dataList[i].Id = key; } GUILayout.EndHorizontal(); GUI.color = Color.white; columnsWidth = _excelConfig.ColumnsWidth[1]; GUILayout.BeginHorizontal(EditorGUIStyle.GroupBoxStyle, GUILayout.Width(columnsWidth), GUILayout.MaxWidth(columnsWidth), GUILayout.ExpandHeight(true)); _dataList[i].Str = (string)TSDatabaseUtils.RenderFieldInfoControl(columnsWidth, _tableConfig.FieldList[1].FieldType, _dataList[i].Str); GUILayout.EndHorizontal(); columnsWidth = _excelConfig.ColumnsWidth[2]; GUILayout.BeginHorizontal(EditorGUIStyle.GroupBoxStyle, GUILayout.Width(columnsWidth), GUILayout.MaxWidth(columnsWidth), GUILayout.ExpandHeight(true)); _dataList[i].Vec2 = (Vector2)TSDatabaseUtils.RenderFieldInfoControl(columnsWidth, _tableConfig.FieldList[2].FieldType, _dataList[i].Vec2); GUILayout.EndHorizontal(); columnsWidth = _excelConfig.ColumnsWidth[3]; GUILayout.BeginHorizontal(EditorGUIStyle.GroupBoxStyle, GUILayout.Width(columnsWidth), GUILayout.MaxWidth(columnsWidth), GUILayout.ExpandHeight(true)); _dataList[i].Quat = (Quaternion)TSDatabaseUtils.RenderFieldInfoControl(columnsWidth, _tableConfig.FieldList[3].FieldType, _dataList[i].Quat); GUILayout.EndHorizontal(); columnsWidth = _excelConfig.ColumnsWidth[4]; GUILayout.BeginHorizontal(EditorGUIStyle.GroupBoxStyle, GUILayout.Width(columnsWidth), GUILayout.MaxWidth(columnsWidth), GUILayout.ExpandHeight(true)); _dataList[i].ListTest = (List <int>)TSDatabaseUtils.RenderFieldInfoControl(columnsWidth, _tableConfig.FieldList[4].FieldType, _dataList[i].ListTest); GUILayout.EndHorizontal(); columnsWidth = _excelConfig.ColumnsWidth[5]; GUILayout.BeginHorizontal(EditorGUIStyle.GroupBoxStyle, GUILayout.Width(columnsWidth), GUILayout.MaxWidth(columnsWidth), GUILayout.ExpandHeight(true)); _dataList[i].Obj = (GameObject)TSDatabaseUtils.RenderFieldInfoControl(columnsWidth, _tableConfig.FieldList[5].FieldType, _dataList[i].Obj); GUILayout.EndHorizontal(); columnsWidth = _excelConfig.ColumnsWidth[6]; GUILayout.BeginHorizontal(EditorGUIStyle.GroupBoxStyle, GUILayout.Width(columnsWidth), GUILayout.MaxWidth(columnsWidth), GUILayout.ExpandHeight(true)); _dataList[i].EnumList = (List <TestEnum>)TSDatabaseUtils.RenderFieldInfoControl(columnsWidth, _tableConfig.FieldList[6].FieldType, _dataList[i].EnumList); GUILayout.EndHorizontal(); for (int index = _tableConfig.FieldList.Count; index < _excelConfig.ColumnsWidth.Count; index++) { GUILayout.BeginHorizontal(EditorGUIStyle.GroupBoxStyle, GUILayout.Width(_excelConfig.ColumnsWidth[index]), 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.Id.ToString()]--; } GUILayout.Space(100); GUILayout.EndVertical(); GUILayout.EndScrollView(); GUILayout.EndArea(); }