private void OnGUI() { BuildDataConfig config = Config; relativePath = Path.GetDirectoryName(config.FileName); using (EditorBuildData.EditorLocalizationValues.BeginScope()) { // config.Enabled = EditorGUILayout.Toggle(new GUIContent("Enabled", "开启"), config.Enabled); // GUI.enabled = config.Enabled; using (var sv = new GUILayout.ScrollViewScope(scrollPos)) { using (new GUILayout.HorizontalScope()) { if (GUILayout.Button("Build Code".Localization())) { EditorBuildData.BuildCode(); } if (GUILayout.Button("Build Data".Localization())) { EditorBuildData.BuildData(); } if (GUILayout.Button("Build".Localization())) { EditorBuildData.Build(); } } GUIUserSettings(); using (var checker = new EditorGUI.ChangeCheckScope()) { scrollPos = sv.scrollPosition; if (config.Input == null) { config.Input = new InputDataConfig(); } DrawInputConfig(config.Input); if (config.OutputCode == null) { config.OutputCode = new BuildCodeConfig(); } DrawCodeConfig(config.OutputCode); if (config.Output == null) { config.Output = new OutputDataConfig(); } DrawOutputConfig(config.Output); if (checker.changed) { Save(); } } } } }
void DrawInputConfig(InputDataConfig inputConfig) { int selectedindex; BuildDataConfig config = Config; if (OutputDataFormats == null) { OutputDataFormats = new GUIContent[] { new GUIContent("json") } } ; GUILayout.Label("Input".Localization()); using (new EditorGUILayoutx.Scopes.IndentLevelVerticalScope()) { using (new GUILayout.HorizontalScope()) { EditorGUILayout.PrefixLabel("Provider".Localization()); inputConfig.Provider = EditorGUILayoutx.ProviderTypeName(inputConfig.Provider, EditorBuildData.PackageDir, "^Build\\.Data\\.Provider\\.(.*)\\.dll$|BuildData\\.exe", "Build.Data.DataReader"); } inputConfig.Directory = new GUIContent("Directory".Localization(), "").FolderField(inputConfig.Directory, "Data Source Folder", relativePath: relativePath); inputConfig.FileInclude = EditorGUILayout.TextField(new GUIContent("File Include".Localization(), "Regex, excel(\\.xlsx?$)"), inputConfig.FileInclude ?? string.Empty); inputConfig.FileExclude = EditorGUILayout.TextField(new GUIContent("File Exclude".Localization(), "Regex, excel(~\\$)"), inputConfig.FileExclude ?? string.Empty); EditorGUILayout.LabelField("Table".Localization()); using (new EditorGUILayoutx.Scopes.IndentLevelVerticalScope()) { inputConfig.TableName = EditorGUILayout.TextField(new GUIContent("Table Name".Localization()), inputConfig.TableName ?? string.Empty); using (new GUILayout.HorizontalScope()) { EditorGUILayout.PrefixLabel("Offset".Localization().Localization()); GUILayout.Label(new GUIContent("Row".Localization().Localization()), GUILayout.ExpandWidth(false)); inputConfig.OffsetRow = EditorGUILayout.IntField(inputConfig.OffsetRow); GUILayout.Label(new GUIContent("Column".Localization().Localization()), GUILayout.ExpandWidth(false)); inputConfig.OffsetColumn = EditorGUILayout.IntField(inputConfig.OffsetColumn); } } EditorGUILayout.LabelField("Field".Localization()); using (new EditorGUILayoutx.Scopes.IndentLevelVerticalScope()) { inputConfig.TagInclude = EditorGUILayout.DelayedTextField(new GUIContent("Tag Include".Localization()), inputConfig.TagInclude ?? string.Empty); inputConfig.TagExclude = EditorGUILayout.DelayedTextField(new GUIContent("Tag Exclude".Localization()), inputConfig.TagExclude ?? string.Empty); } EditorGUILayout.LabelField("Data".Localization()); using (new EditorGUILayoutx.Scopes.IndentLevelVerticalScope()) { inputConfig.ArraySeparator = new GUIContent("Array Separator".Localization()).DelayedPlaceholderField(inputConfig.ArraySeparator ?? string.Empty, new GUIContent(InputDataConfig.DefaultArraySeparator)); inputConfig.ObjectSeparator = new GUIContent("Object Separator".Localization()).DelayedPlaceholderField(inputConfig.ObjectSeparator ?? string.Empty, new GUIContent(InputDataConfig.DefaultObjectSeparator)); } if (inputConfig.Rows == null) { inputConfig.Rows = new DataRowConfig[0]; } Rect rect = GUILayoutUtility.GetRect(GUIContent.none, GUIStyle.none); if (GUI.Button(new Rect(rect.xMax - 16, rect.y, 16, rect.height), "+", GUIStyle.none)) { GenericMenu menu = new GenericMenu(); foreach (DataRowType rowType in Enum.GetValues(typeof(DataRowType))) { if (inputConfig.Rows.FirstOrDefault(o => o.Type == rowType) == null) { menu.AddItem(new GUIContent(rowType.ToString()), false, (userData) => { addRowType = (DataRowType)userData; rowsFoldout = true; }, rowType); } } menu.ShowAsContext(); } if (addRowType != 0) { //Undo.undoRedoPerformed += () => //{ // Debug.Log(" Undo.undoRedoPerformed " + addRowType); //}; //Undo.willFlushUndoRecord += () => //{ // Debug.Log(" Undo.willFlushUndoRecord " + addRowType); //}; var dataRow = new DataRowConfig() { Type = addRowType }; var rows = inputConfig.Rows; ArrayUtility.Insert(ref inputConfig.Rows, inputConfig.Rows.Length, dataRow); GUI.changed = true; //Undo.IncrementCurrentGroup(); //Undo.SetCurrentGroupName("addRowType"); addRowType = 0; } rowsFoldout = EditorGUI.BeginFoldoutHeaderGroup(new Rect(rect.x, rect.y, rect.width - 20, rect.height), rowsFoldout, new GUIContent("Row Declaration".Localization())); //rowsFoldout=EditorGUILayout.BeginToggleGroup( new GUIContent("Rows"),rowsFoldout); EditorGUI.indentLevel++; if (rowsFoldout) { foreach (var row in inputConfig.Rows.OrderBy(o => o.Index).ToArray()) { int index = Array.FindIndex(inputConfig.Rows, o => o == row); DrawDataRowConfig(inputConfig, row, index); } } EditorGUI.indentLevel--; EditorGUI.EndFoldoutHeaderGroup(); //EditorGUILayout.EndToggleGroup(); } } bool rowsFoldout; DataRowType addRowType; int deleteRowIndex = -1; void DrawDataRowConfig(InputDataConfig inputConfig, DataRowConfig row, int index) { using (new GUILayout.HorizontalScope()) { GUILayout.Space(16 * EditorGUI.indentLevel); var oldIndentLevel = EditorGUI.indentLevel; EditorGUI.indentLevel = 0; using (new GUILayout.VerticalScope("box")) { using (new GUILayout.HorizontalScope()) { EditorGUILayout.LabelField(row.Type.ToString().Localization()); GUIStyle style = new GUIStyle("label"); style.fontSize = (int)(style.fontSize * 1.2f); style.padding.top = 0; style.padding.right = 0; style.margin.right = 0; if (GUILayout.Button("◥", style, GUILayout.ExpandWidth(false))) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("Delete".Localization()), false, () => { deleteRowIndex = index; }); menu.ShowAsContext(); } GUILayout.Space(10); } EditorGUI.indentLevel++; row.Index = EditorGUILayout.DelayedIntField("Index".Localization(), row.Index); row.Pattern = EditorGUILayout.DelayedTextField("Pattern".Localization(), row.Pattern); row.ValuePattern = EditorGUILayout.DelayedTextField("Value Pattern".Localization(), row.ValuePattern); EditorGUI.indentLevel--; } EditorGUI.indentLevel = oldIndentLevel; } if (deleteRowIndex >= 0 && deleteRowIndex < inputConfig.Rows.Length) { ArrayUtility.RemoveAt(ref inputConfig.Rows, deleteRowIndex); deleteRowIndex = -1; GUI.changed = true; } } void DrawCodeConfig(BuildCodeConfig codeConfig) { EditorGUILayout.LabelField("Generate Code".Localization()); EditorGUI.indentLevel++; codeConfig.Path = new GUIContent("Path".Localization(), "").FileField(codeConfig.Path ?? string.Empty, "dll", "Build Code File", relativePath: relativePath); codeConfig.Namespace = EditorGUILayout.TextField(new GUIContent("Namespace".Localization()), codeConfig.Namespace ?? string.Empty); codeConfig.TypeName = EditorGUILayout.TextField(new GUIContent("TypeName".Localization()), codeConfig.TypeName ?? string.Empty); EditorGUI.indentLevel--; }