From 8ee7353d5ef6c325a18c6cc9e8ff6cf6ea8d15a7 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 12 Dec 2017 11:01:27 -0500 Subject: [PATCH 1/8] Integrating tree control into history view --- .../Editor/GitHub.Unity/UI/HistoryView.cs | 63 +++++++++++++++++-- 1 file changed, 57 insertions(+), 6 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs index 45fe2908e..c4f46fcfd 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs @@ -349,6 +349,9 @@ class HistoryView : Subview [SerializeField] private int statusAhead; [SerializeField] private int statusBehind; + + [SerializeField] private Vector2 treeScroll; + [SerializeField] private ChangesTree treeChanges; [SerializeField] private CacheUpdateEvent lastCurrentRemoteChangedEvent; [SerializeField] private CacheUpdateEvent lastLogChangedEvent; @@ -357,6 +360,7 @@ class HistoryView : Subview public override void OnEnable() { base.OnEnable(); + TreeOnEnable(); AttachHandlers(Repository); if (Repository != null) @@ -380,11 +384,6 @@ public override void OnDataUpdate() } public override void OnGUI() - { - OnEmbeddedGUI(); - } - - public void OnEmbeddedGUI() { // History toolbar GUILayout.BeginHorizontal(EditorStyles.toolbar); @@ -456,6 +455,7 @@ public void OnEmbeddedGUI() var requiresRepaint = historyControl.Render(historyControlRect, entry => { selectedEntry = entry; + BuildTree(); }, entry => { }, entry => { }); @@ -490,9 +490,35 @@ public void OnEmbeddedGUI() GUILayout.Label("Files changed", EditorStyles.boldLabel); GUILayout.Space(-5); + rect = GUILayoutUtility.GetLastRect(); GUILayout.BeginHorizontal(Styles.HistoryFileTreeBoxStyle); { - //changesetTree.OnGUI(); + treeScroll = GUILayout.BeginScrollView(treeScroll); + { + var treeControlRect = new Rect(0f, 0f, Position.width, Position.height - rect.height + Styles.CommitAreaPadding); + var treeRect = Rect.zero; + if (treeChanges != null) + { + treeChanges.FolderStyle = Styles.Foldout; + treeChanges.TreeNodeStyle = Styles.TreeNode; + treeChanges.ActiveTreeNodeStyle = Styles.ActiveTreeNode; + treeChanges.FocusedTreeNodeStyle = Styles.FocusedTreeNode; + treeChanges.FocusedActiveTreeNodeStyle = Styles.FocusedActiveTreeNode; + + treeRect = treeChanges.Render(treeControlRect, treeControlRect, treeScroll, + node => { }, + node => { + }, + node => { + }); + + if (treeChanges.RequiresRepaint) + Redraw(); + } + + GUILayout.Space(treeRect.y - treeControlRect.y); + } + GUILayout.EndScrollView(); } GUILayout.EndHorizontal(); @@ -698,6 +724,31 @@ private void Fetch() .Start(); } + private void BuildTree() + { + if (treeChanges == null) + { + treeChanges = new ChangesTree(); + treeChanges.Title = "Changes"; + treeChanges.DisplayRootNode = false; + treeChanges.PathSeparator = Environment.FileSystem.DirectorySeparatorChar.ToString(); + + TreeOnEnable(); + } + + treeChanges.Load(selectedEntry.changes.Select(entry => new GitStatusEntryTreeData(entry))); + Redraw(); + } + + private void TreeOnEnable() + { + if (treeChanges != null) + { + treeChanges.OnEnable(); + treeChanges.UpdateIcons(Styles.FolderIcon); + } + } + public override bool IsBusy { get { return false; } From ff03fe293c7b0662fe6e387135f3fdb29ad4f8b1 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 12 Dec 2017 11:20:45 -0500 Subject: [PATCH 2/8] Setting value --- src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs index c4f46fcfd..99874580d 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs @@ -730,6 +730,7 @@ private void BuildTree() { treeChanges = new ChangesTree(); treeChanges.Title = "Changes"; + treeChanges.IsSelectable = false; treeChanges.DisplayRootNode = false; treeChanges.PathSeparator = Environment.FileSystem.DirectorySeparatorChar.ToString(); From 5c5074a0489ad6181126423694586fce30f7d0bd Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 12 Dec 2017 14:41:11 -0500 Subject: [PATCH 3/8] Realizing the extra scrollView --- .../Editor/GitHub.Unity/UI/HistoryView.cs | 45 +++++++++---------- 1 file changed, 20 insertions(+), 25 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs index 99874580d..25d8c5a9a 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs @@ -350,7 +350,6 @@ class HistoryView : Subview [SerializeField] private int statusAhead; [SerializeField] private int statusBehind; - [SerializeField] private Vector2 treeScroll; [SerializeField] private ChangesTree treeChanges; [SerializeField] private CacheUpdateEvent lastCurrentRemoteChangedEvent; @@ -493,32 +492,28 @@ public override void OnGUI() rect = GUILayoutUtility.GetLastRect(); GUILayout.BeginHorizontal(Styles.HistoryFileTreeBoxStyle); { - treeScroll = GUILayout.BeginScrollView(treeScroll); + var treeControlRect = new Rect(0f, 0f, Position.width, Position.height - rect.height + Styles.CommitAreaPadding); + var treeRect = Rect.zero; + if (treeChanges != null) { - var treeControlRect = new Rect(0f, 0f, Position.width, Position.height - rect.height + Styles.CommitAreaPadding); - var treeRect = Rect.zero; - if (treeChanges != null) - { - treeChanges.FolderStyle = Styles.Foldout; - treeChanges.TreeNodeStyle = Styles.TreeNode; - treeChanges.ActiveTreeNodeStyle = Styles.ActiveTreeNode; - treeChanges.FocusedTreeNodeStyle = Styles.FocusedTreeNode; - treeChanges.FocusedActiveTreeNodeStyle = Styles.FocusedActiveTreeNode; - - treeRect = treeChanges.Render(treeControlRect, treeControlRect, treeScroll, - node => { }, - node => { - }, - node => { - }); - - if (treeChanges.RequiresRepaint) - Redraw(); - } - - GUILayout.Space(treeRect.y - treeControlRect.y); + treeChanges.FolderStyle = Styles.Foldout; + treeChanges.TreeNodeStyle = Styles.TreeNode; + treeChanges.ActiveTreeNodeStyle = Styles.ActiveTreeNode; + treeChanges.FocusedTreeNodeStyle = Styles.FocusedTreeNode; + treeChanges.FocusedActiveTreeNodeStyle = Styles.FocusedActiveTreeNode; + + treeRect = treeChanges.Render(treeControlRect, treeControlRect, detailsScroll, + node => { }, + node => { + }, + node => { + }); + + if (treeChanges.RequiresRepaint) + Redraw(); } - GUILayout.EndScrollView(); + + GUILayout.Space(treeRect.y - treeControlRect.y); } GUILayout.EndHorizontal(); From 13b06b86939bbcba00d610886761ed0144f050f9 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 12 Dec 2017 20:18:20 -0500 Subject: [PATCH 4/8] Fix needed after merge --- src/UnityExtension/Assets/Editor/GitHub.Unity/UI/ChangesView.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/ChangesView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/ChangesView.cs index 61c86d035..3bf1f1674 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/ChangesView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/ChangesView.cs @@ -114,7 +114,7 @@ private void OnTreeGUI(Rect rect) treeChanges.FocusedTreeNodeStyle = Styles.FocusedTreeNode; treeChanges.FocusedActiveTreeNodeStyle = Styles.FocusedActiveTreeNode; - var treeRenderRect = treeChanges.Render(rect, scroll, + var treeRenderRect = treeChanges.Render(rect, treeScroll, node => { }, node => { }, node => { }); From a1c2d2cda4de6b9f104d14bebfb0027c19049ab0 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Tue, 12 Dec 2017 20:19:31 -0500 Subject: [PATCH 5/8] Another after merge fix --- src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs index e5d2d14a0..be3dfbfe6 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs @@ -494,7 +494,7 @@ public override void OnGUI() treeChanges.FocusedTreeNodeStyle = Styles.FocusedTreeNode; treeChanges.FocusedActiveTreeNodeStyle = Styles.FocusedActiveTreeNode; - treeRect = treeChanges.Render(treeControlRect, treeControlRect, detailsScroll, + treeRect = treeChanges.Render(treeControlRect, detailsScroll, node => { }, node => { }, From 06dd54e549abfe374bb55a1b86f06201aca88376 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 13 Dec 2017 08:04:41 -0500 Subject: [PATCH 6/8] Trying to set the position of the tree control --- src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs index be3dfbfe6..f344b1db9 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs @@ -484,7 +484,7 @@ public override void OnGUI() rect = GUILayoutUtility.GetLastRect(); GUILayout.BeginHorizontal(Styles.HistoryFileTreeBoxStyle); { - var treeControlRect = new Rect(0f, 0f, Position.width, Position.height - rect.height + Styles.CommitAreaPadding); + var treeControlRect = new Rect(rect.x, rect.y, Position.width, Position.height - rect.height + Styles.CommitAreaPadding); var treeRect = Rect.zero; if (treeChanges != null) { From d0ac82e9a0819e58f42d33eee4b9b8a7ac06c972 Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 13 Dec 2017 08:44:45 -0500 Subject: [PATCH 7/8] Correcting the scroll and setting the padding on the tree view --- .../Assets/Editor/GitHub.Unity/UI/HistoryView.cs | 7 +++++-- .../Assets/Editor/GitHub.Unity/UI/TreeControl.cs | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs index f344b1db9..432de0463 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs @@ -483,8 +483,10 @@ public override void OnGUI() rect = GUILayoutUtility.GetLastRect(); GUILayout.BeginHorizontal(Styles.HistoryFileTreeBoxStyle); + GUILayout.BeginVertical(); { - var treeControlRect = new Rect(rect.x, rect.y, Position.width, Position.height - rect.height + Styles.CommitAreaPadding); + var borderLeft = Styles.Label.margin.left; + var treeControlRect = new Rect(rect.x + borderLeft, rect.y, Position.width - borderLeft * 2, Position.height - rect.height + Styles.CommitAreaPadding); var treeRect = Rect.zero; if (treeChanges != null) { @@ -507,6 +509,7 @@ public override void OnGUI() GUILayout.Space(treeRect.y - treeControlRect.y); } + GUILayout.EndVertical(); GUILayout.EndHorizontal(); GUILayout.Space(EditorGUIUtility.standardVerticalSpacing); @@ -518,7 +521,7 @@ public override void OnGUI() private void HistoryDetailsEntry(GitLogEntry entry) { GUILayout.BeginVertical(Styles.HeaderBoxStyle); - GUILayout.Label(entry.Summary, Styles.HistoryDetailsTitleStyle, GUILayout.Width(Position.width)); + GUILayout.Label(entry.Summary, Styles.HistoryDetailsTitleStyle); GUILayout.Space(-5); diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/TreeControl.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/TreeControl.cs index b458f8d44..2c64f6c0d 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/TreeControl.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/TreeControl.cs @@ -424,7 +424,7 @@ public TreeNodeRenderResult Render(Rect rect, float indentation, bool isSelected return renderResult; var fillRect = rect; - var nodeStartX = Level * indentation; + var nodeStartX = Level * indentation + rect.x; nodeStartX += 2 * level; var nodeRect = new Rect(nodeStartX, rect.y, fillRect.width - nodeStartX, rect.height); From b4d23e183ae506616b50ddfb92fac6370c5b1ece Mon Sep 17 00:00:00 2001 From: Stanley Goldman Date: Wed, 13 Dec 2017 18:44:55 -0500 Subject: [PATCH 8/8] Initializing and setting Tree properties in field initializers After a domain reload null Tree objects will not be null. So we need to set their properties as soon as possible --- .../Editor/GitHub.Unity/UI/BranchesView.cs | 16 ++-------------- .../Assets/Editor/GitHub.Unity/UI/ChangesView.cs | 14 ++------------ .../Assets/Editor/GitHub.Unity/UI/HistoryView.cs | 14 ++------------ 3 files changed, 6 insertions(+), 38 deletions(-) diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs index 49a13bb6b..4ae3c6e17 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs @@ -39,8 +39,8 @@ class BranchesView : Subview [NonSerialized] private int listID = -1; [NonSerialized] private BranchesMode targetMode; - [SerializeField] private BranchesTree treeLocals; - [SerializeField] private BranchesTree treeRemotes; + [SerializeField] private BranchesTree treeLocals = new BranchesTree { Title = LocalTitle }; + [SerializeField] private BranchesTree treeRemotes = new BranchesTree { Title = RemoteTitle, IsRemote = true }; [SerializeField] private BranchesMode mode = BranchesMode.Default; [SerializeField] private string newBranchName; [SerializeField] private Vector2 scroll; @@ -155,18 +155,6 @@ private void Render() private void BuildTree() { - if (treeLocals == null) - { - treeLocals = new BranchesTree(); - treeLocals.Title = LocalTitle; - - treeRemotes = new BranchesTree(); - treeRemotes.Title = RemoteTitle; - treeRemotes.IsRemote = true; - - TreeOnEnable(); - } - localBranches.Sort(CompareBranches); remoteBranches.Sort(CompareBranches); diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/ChangesView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/ChangesView.cs index 5649be92e..f6b31fa54 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/ChangesView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/ChangesView.cs @@ -28,7 +28,7 @@ class ChangesView : Subview [SerializeField] private string currentBranch = "[unknown]"; [SerializeField] private Vector2 treeScroll; - [SerializeField] private ChangesTree treeChanges; + [SerializeField] private ChangesTree treeChanges = new ChangesTree { DisplayRootNode = false, IsCheckable = true }; [SerializeField] private HashSet gitLocks; [SerializeField] private List gitStatusEntries; @@ -212,17 +212,7 @@ private void MaybeUpdateData() private void BuildTree() { - if (treeChanges == null) - { - treeChanges = new ChangesTree(); - treeChanges.Title = "Changes"; - treeChanges.DisplayRootNode = false; - treeChanges.IsCheckable = true; - treeChanges.PathSeparator = Environment.FileSystem.DirectorySeparatorChar.ToString(); - - TreeOnEnable(); - } - + treeChanges.PathSeparator = Environment.FileSystem.DirectorySeparatorChar.ToString(); treeChanges.Load(gitStatusEntries.Select(entry => new GitStatusEntryTreeData(entry, gitLocks.Contains(entry.Path)))); Redraw(); } diff --git a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs index 432de0463..5eb16a078 100644 --- a/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs +++ b/src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs @@ -342,7 +342,7 @@ class HistoryView : Subview [SerializeField] private int statusAhead; [SerializeField] private int statusBehind; - [SerializeField] private ChangesTree treeChanges; + [SerializeField] private ChangesTree treeChanges = new ChangesTree { IsSelectable = false, DisplayRootNode = false }; [SerializeField] private CacheUpdateEvent lastCurrentRemoteChangedEvent; [SerializeField] private CacheUpdateEvent lastLogChangedEvent; @@ -716,17 +716,7 @@ private void Fetch() private void BuildTree() { - if (treeChanges == null) - { - treeChanges = new ChangesTree(); - treeChanges.Title = "Changes"; - treeChanges.IsSelectable = false; - treeChanges.DisplayRootNode = false; - treeChanges.PathSeparator = Environment.FileSystem.DirectorySeparatorChar.ToString(); - - TreeOnEnable(); - } - + treeChanges.PathSeparator = Environment.FileSystem.DirectorySeparatorChar.ToString(); treeChanges.Load(selectedEntry.changes.Select(entry => new GitStatusEntryTreeData(entry))); Redraw(); }