Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit cbe019b

Browse files
Merge pull request #525 from github-for-unity/enhancements/history-detail-tree-view
History detail tree view
2 parents d6df408 + b4d23e1 commit cbe019b

File tree

4 files changed

+52
-34
lines changed

4 files changed

+52
-34
lines changed

src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ class BranchesView : Subview
3939
[NonSerialized] private int listID = -1;
4040
[NonSerialized] private BranchesMode targetMode;
4141

42-
[SerializeField] private BranchesTree treeLocals;
43-
[SerializeField] private BranchesTree treeRemotes;
42+
[SerializeField] private BranchesTree treeLocals = new BranchesTree { Title = LocalTitle };
43+
[SerializeField] private BranchesTree treeRemotes = new BranchesTree { Title = RemoteTitle, IsRemote = true };
4444
[SerializeField] private BranchesMode mode = BranchesMode.Default;
4545
[SerializeField] private string newBranchName;
4646
[SerializeField] private Vector2 scroll;
@@ -155,18 +155,6 @@ private void Render()
155155

156156
private void BuildTree()
157157
{
158-
if (treeLocals == null)
159-
{
160-
treeLocals = new BranchesTree();
161-
treeLocals.Title = LocalTitle;
162-
163-
treeRemotes = new BranchesTree();
164-
treeRemotes.Title = RemoteTitle;
165-
treeRemotes.IsRemote = true;
166-
167-
TreeOnEnable();
168-
}
169-
170158
localBranches.Sort(CompareBranches);
171159
remoteBranches.Sort(CompareBranches);
172160

src/UnityExtension/Assets/Editor/GitHub.Unity/UI/ChangesView.cs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class ChangesView : Subview
2828
[SerializeField] private string currentBranch = "[unknown]";
2929

3030
[SerializeField] private Vector2 treeScroll;
31-
[SerializeField] private ChangesTree treeChanges;
31+
[SerializeField] private ChangesTree treeChanges = new ChangesTree { DisplayRootNode = false, IsCheckable = true };
3232

3333
[SerializeField] private HashSet<string> gitLocks;
3434
[SerializeField] private List<GitStatusEntry> gitStatusEntries;
@@ -212,17 +212,7 @@ private void MaybeUpdateData()
212212

213213
private void BuildTree()
214214
{
215-
if (treeChanges == null)
216-
{
217-
treeChanges = new ChangesTree();
218-
treeChanges.Title = "Changes";
219-
treeChanges.DisplayRootNode = false;
220-
treeChanges.IsCheckable = true;
221-
treeChanges.PathSeparator = Environment.FileSystem.DirectorySeparatorChar.ToString();
222-
223-
TreeOnEnable();
224-
}
225-
215+
treeChanges.PathSeparator = Environment.FileSystem.DirectorySeparatorChar.ToString();
226216
treeChanges.Load(gitStatusEntries.Select(entry => new GitStatusEntryTreeData(entry, gitLocks.Contains(entry.Path))));
227217
Redraw();
228218
}

src/UnityExtension/Assets/Editor/GitHub.Unity/UI/HistoryView.cs

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,8 @@ class HistoryView : Subview
341341

342342
[SerializeField] private int statusAhead;
343343
[SerializeField] private int statusBehind;
344+
345+
[SerializeField] private ChangesTree treeChanges = new ChangesTree { IsSelectable = false, DisplayRootNode = false };
344346

345347
[SerializeField] private CacheUpdateEvent lastCurrentRemoteChangedEvent;
346348
[SerializeField] private CacheUpdateEvent lastLogChangedEvent;
@@ -349,6 +351,7 @@ class HistoryView : Subview
349351
public override void OnEnable()
350352
{
351353
base.OnEnable();
354+
TreeOnEnable();
352355
AttachHandlers(Repository);
353356

354357
if (Repository != null)
@@ -372,11 +375,6 @@ public override void OnDataUpdate()
372375
}
373376

374377
public override void OnGUI()
375-
{
376-
OnEmbeddedGUI();
377-
}
378-
379-
public void OnEmbeddedGUI()
380378
{
381379
// History toolbar
382380
GUILayout.BeginHorizontal(EditorStyles.toolbar);
@@ -448,6 +446,7 @@ public void OnEmbeddedGUI()
448446
var requiresRepaint = historyControl.Render(historyControlRect,
449447
entry => {
450448
selectedEntry = entry;
449+
BuildTree();
451450
},
452451
entry => { },
453452
entry => { });
@@ -482,10 +481,35 @@ public void OnEmbeddedGUI()
482481
GUILayout.Label("Files changed", EditorStyles.boldLabel);
483482
GUILayout.Space(-5);
484483

484+
rect = GUILayoutUtility.GetLastRect();
485485
GUILayout.BeginHorizontal(Styles.HistoryFileTreeBoxStyle);
486+
GUILayout.BeginVertical();
486487
{
487-
//changesetTree.OnGUI();
488+
var borderLeft = Styles.Label.margin.left;
489+
var treeControlRect = new Rect(rect.x + borderLeft, rect.y, Position.width - borderLeft * 2, Position.height - rect.height + Styles.CommitAreaPadding);
490+
var treeRect = Rect.zero;
491+
if (treeChanges != null)
492+
{
493+
treeChanges.FolderStyle = Styles.Foldout;
494+
treeChanges.TreeNodeStyle = Styles.TreeNode;
495+
treeChanges.ActiveTreeNodeStyle = Styles.ActiveTreeNode;
496+
treeChanges.FocusedTreeNodeStyle = Styles.FocusedTreeNode;
497+
treeChanges.FocusedActiveTreeNodeStyle = Styles.FocusedActiveTreeNode;
498+
499+
treeRect = treeChanges.Render(treeControlRect, detailsScroll,
500+
node => { },
501+
node => {
502+
},
503+
node => {
504+
});
505+
506+
if (treeChanges.RequiresRepaint)
507+
Redraw();
508+
}
509+
510+
GUILayout.Space(treeRect.y - treeControlRect.y);
488511
}
512+
GUILayout.EndVertical();
489513
GUILayout.EndHorizontal();
490514

491515
GUILayout.Space(EditorGUIUtility.standardVerticalSpacing);
@@ -497,7 +521,7 @@ public void OnEmbeddedGUI()
497521
private void HistoryDetailsEntry(GitLogEntry entry)
498522
{
499523
GUILayout.BeginVertical(Styles.HeaderBoxStyle);
500-
GUILayout.Label(entry.Summary, Styles.HistoryDetailsTitleStyle, GUILayout.Width(Position.width));
524+
GUILayout.Label(entry.Summary, Styles.HistoryDetailsTitleStyle);
501525

502526
GUILayout.Space(-5);
503527

@@ -690,6 +714,22 @@ private void Fetch()
690714
.Start();
691715
}
692716

717+
private void BuildTree()
718+
{
719+
treeChanges.PathSeparator = Environment.FileSystem.DirectorySeparatorChar.ToString();
720+
treeChanges.Load(selectedEntry.changes.Select(entry => new GitStatusEntryTreeData(entry)));
721+
Redraw();
722+
}
723+
724+
private void TreeOnEnable()
725+
{
726+
if (treeChanges != null)
727+
{
728+
treeChanges.OnEnable();
729+
treeChanges.UpdateIcons(Styles.FolderIcon);
730+
}
731+
}
732+
693733
public override bool IsBusy
694734
{
695735
get { return false; }

src/UnityExtension/Assets/Editor/GitHub.Unity/UI/TreeControl.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -424,7 +424,7 @@ public TreeNodeRenderResult Render(Rect rect, float indentation, bool isSelected
424424
return renderResult;
425425

426426
var fillRect = rect;
427-
var nodeStartX = Level * indentation;
427+
var nodeStartX = Level * indentation + rect.x;
428428
nodeStartX += 2 * level;
429429

430430
var nodeRect = new Rect(nodeStartX, rect.y, fillRect.width - nodeStartX, rect.height);

0 commit comments

Comments
 (0)