void OnEnable() { if (build == null || !IsDirty()) { if (File.Exists(kXmlPath)) { build = Build.FromXML(File.ReadAllText(kXmlPath)); } else { build = new Build(); Version v = new Version(); v.build = 1; v.date = DateTime.Now; build.versions.Add(v); } } expanded.Clear(); }
void OnGUI() { float buttonWidth = 100f; float padding = 10f; GUILayout.BeginArea(new Rect(padding, padding, position.width - padding * 2f, position.height - padding * 2f)); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Version"); if (GUILayout.Button("+", EditorStyles.miniButton)) { Version v = new Version(); v.major = build.CurrentVersion.major; v.minor = build.CurrentVersion.minor; v.build = build.CurrentVersion.build + 1; v.date = DateTime.Now; build.versions.Add(v); build.versions = build.versions.OrderByDescending(ver => ver.major) .OrderByDescending(ver => ver.minor) .OrderByDescending(ver => ver.build) .OrderByDescending(ver => ver.date).ToList(); } GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); scrollPos = EditorGUILayout.BeginScrollView(scrollPos); foreach (Version v in build.versions) { if (!expanded.ContainsKey(v)) { expanded[v] = v == build.CurrentVersion; } EditorGUILayout.BeginHorizontal(); expanded[v] = EditorGUILayout.Foldout(expanded[v], v.ToString()); if (expanded[v] && build.versions.Count > 0 && GUILayout.Button("Delete", EditorStyles.miniButton)) { if (EditorUtility.DisplayDialog("Remove Version?", "Are you sure you want to delete this version?", "Yes", "No")) { build.versions.Remove(v); GUIUtility.ExitGUI(); } } EditorGUILayout.EndHorizontal(); if (expanded[v]) { EditorGUI.indentLevel++; EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Version"); v.major = EditorGUILayout.IntField(v.major); GUILayout.Label("."); v.minor = EditorGUILayout.IntField(v.minor); GUILayout.Label("."); v.build = EditorGUILayout.IntField(v.build); v.revision = EditorGUILayout.TextField(v.revision); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Date / Time"); int dateValue; dateValue = EditorGUILayout.IntField(v.date.Year); if (GUI.changed) { v.date = v.date.AddYears(dateValue - v.date.Year); GUI.changed = false; } dateValue = EditorGUILayout.IntField(v.date.Month); if (GUI.changed) { v.date = v.date.AddMonths(dateValue - v.date.Month); GUI.changed = false; } dateValue = EditorGUILayout.IntField(v.date.Day); if (GUI.changed) { v.date = v.date.AddDays(dateValue - v.date.Day); GUI.changed = false; } dateValue = EditorGUILayout.IntField(v.date.Hour); if (GUI.changed) { v.date = v.date.AddHours(dateValue - v.date.Hour); GUI.changed = false; } dateValue = EditorGUILayout.IntField(v.date.Minute); if (GUI.changed) { v.date = v.date.AddMinutes(dateValue - v.date.Minute); GUI.changed = false; } if (GUILayout.Button("Now", EditorStyles.miniButton)) { v.date = DateTime.Now; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Notes"); if (GUILayout.Button("+", EditorStyles.miniButton)) { v.notes.Add(new Note()); } GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); EditorGUI.indentLevel++; foreach (Note n in v.notes) { EditorGUILayout.BeginHorizontal(); GUI.changed = false; n.category = (Note.Category)EditorGUILayout.EnumPopup(n.category, GUILayout.Width(100f)); if (GUI.changed) { v.notes = v.notes.OrderBy(note => note.category).ToList(); EditorGUIUtility.keyboardControl = -1; GUI.changed = false; GUIUtility.ExitGUI(); } n.description = EditorGUILayout.TextArea(n.description, GUILayout.MaxWidth(400f)); if (GUILayout.Button("-", EditorStyles.miniButton, GUILayout.Width(20f))) { v.notes.Remove(n); GUIUtility.ExitGUI(); } EditorGUILayout.EndHorizontal(); } EditorGUI.indentLevel--; EditorGUI.indentLevel--; } } EditorGUILayout.EndScrollView(); GUILayout.FlexibleSpace(); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Export ReleaseNotes.txt", GUILayout.Width(buttonWidth * 2f))) { ExportReleaseNotes(); } GUILayout.FlexibleSpace(); if (GUILayout.Button("Save", GUILayout.Width(buttonWidth))) { Save(); } if (GUILayout.Button("Build", GUILayout.Width(buttonWidth))) { DoBuild(); GUIUtility.ExitGUI(); } EditorGUILayout.EndHorizontal(); GUILayout.EndArea(); }