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

Commit 994ba2c

Browse files
Merge branch 'enhancements/skip-render-hidden-nodes' into enhancements/tree-improvements
# Conflicts: # src/UnityExtension/Assets/Editor/GitHub.Unity/UI/BranchesView.cs # src/UnityExtension/Assets/Editor/GitHub.Unity/UI/TreeControl.cs
2 parents 19386b8 + 5b67ea1 commit 994ba2c

File tree

3 files changed

+45
-13
lines changed

3 files changed

+45
-13
lines changed

src/GitHub.Api/UI/TreeLoader.cs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,29 @@ namespace GitHub.Unity
66
{
77
public interface ITree
88
{
9-
void AddNode(string path, string label, int level, bool isFolder, bool isActive, bool isHidden, bool isCollapsed);
9+
void AddNode(string path, string label, int level, bool isFolder, bool isActive, bool isHidden, bool isCollapsed, bool isSelected);
1010
void Clear();
1111
HashSet<string> GetCollapsedFolders();
1212
string Title { get; }
1313
bool DisplayRootNode { get; }
1414
bool IsCheckable { get; }
1515
string PathSeparator { get; }
16+
string SelectedNodeName { get; }
1617
}
1718

1819
public static class TreeLoader
1920
{
2021
public static void Load(ITree tree, IEnumerable<ITreeData> treeDatas)
2122
{
2223
var collapsedFolders = tree.GetCollapsedFolders();
23-
24+
var selectedNodeName = tree.SelectedNodeName;
25+
2426
tree.Clear();
2527

2628
var displayRootLevel = tree.DisplayRootNode ? 1 : 0;
2729

28-
tree.AddNode(path: tree.Title, label: tree.Title, level: -1 + displayRootLevel, isFolder: true, isActive: false, isHidden: false, isCollapsed: false);
30+
var isSelected = selectedNodeName != null && tree.Title == selectedNodeName;
31+
tree.AddNode(path: tree.Title, label: tree.Title, level: -1 + displayRootLevel, isFolder: true, isActive: false, isHidden: false, isCollapsed: false, isSelected: isSelected);
2932

3033
var hideChildren = false;
3134
var hideChildrenBelowLevel = 0;
@@ -72,14 +75,13 @@ public static void Load(ITree tree, IEnumerable<ITreeData> treeDatas)
7275
hideChildrenBelowLevel = level;
7376
}
7477
}
75-
7678
}
7779

78-
tree.AddNode(path: nodePath, label: label, level: i + displayRootLevel, isFolder: isFolder, isActive: treeData.IsActive, isHidden: nodeIsHidden, isCollapsed: nodeIsCollapsed);
80+
isSelected = selectedNodeName != null && nodePath == selectedNodeName;
81+
tree.AddNode(path: nodePath, label: label, level: i + displayRootLevel, isFolder: isFolder, isActive: treeData.IsActive, isHidden: nodeIsHidden, isCollapsed: nodeIsCollapsed, isSelected: isSelected);
7982
}
8083
}
8184
}
8285
}
83-
8486
}
8587
}

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -319,12 +319,15 @@ private void OnTreeGUI(Rect rect)
319319
var initialRect = rect;
320320
var treeHadFocus = treeLocals.SelectedNode != null;
321321

322-
rect = treeLocals.Render(rect, scroll,
322+
rect = treeLocals.Render(initialRect, rect, scroll,
323323
node =>{ },
324324
node => {
325325
if (node.IsFolder)
326326
return;
327327

328+
if(node.IsActive)
329+
return;
330+
328331
SwitchBranch(node.Path);
329332
},
330333
node => {
@@ -347,7 +350,7 @@ private void OnTreeGUI(Rect rect)
347350

348351
rect.y += Styles.TreePadding;
349352

350-
rect = treeRemotes.Render(rect, scroll,
353+
rect = treeRemotes.Render(initialRect, rect, scroll,
351354
node => { },
352355
node => {
353356
if (node.IsFolder)
@@ -357,7 +360,7 @@ private void OnTreeGUI(Rect rect)
357360
},
358361
node => {
359362
if (node.IsFolder)
360-
return;
363+
return;
361364

362365
var menu = CreateContextMenuForRemoteBranchNode(node);
363366
menu.ShowAsContext();

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

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@ private set
5555
}
5656
}
5757

58+
public string SelectedNodeName
59+
{
60+
get { return SelectedNode != null ? SelectedNode.Path : null; }
61+
}
62+
5863
public string Title
5964
{
6065
get { return title; }
@@ -79,7 +84,7 @@ public string PathSeparator
7984
set { pathSeparator = value; }
8085
}
8186

82-
public void AddNode(string path, string label, int level, bool isFolder, bool isActive, bool isHidden, bool isCollapsed)
87+
public void AddNode(string path, string label, int level, bool isFolder, bool isActive, bool isHidden, bool isCollapsed, bool isSelected)
8388
{
8489
var node = new TreeNode
8590
{
@@ -101,6 +106,11 @@ public void AddNode(string path, string label, int level, bool isFolder, bool is
101106
activeNode = node;
102107
}
103108

109+
if (isSelected)
110+
{
111+
SelectedNode = node;
112+
}
113+
104114
if (isFolder)
105115
{
106116
folders.Add(node.Path, node);
@@ -111,6 +121,7 @@ public void Clear()
111121
{
112122
folders.Clear();
113123
nodes.Clear();
124+
SelectedNode = null;
114125
}
115126

116127
public HashSet<string> GetCollapsedFolders()
@@ -119,7 +130,7 @@ public HashSet<string> GetCollapsedFolders()
119130
return new HashSet<string>(collapsedFoldersEnumerable);
120131
}
121132

122-
public Rect Render(Rect rect, Vector2 scroll, Action<TreeNode> singleClick = null, Action<TreeNode> doubleClick = null, Action<TreeNode> rightClick = null)
133+
public Rect Render(Rect containingRect, Rect rect, Vector2 scroll, Action<TreeNode> singleClick = null, Action<TreeNode> doubleClick = null, Action<TreeNode> rightClick = null)
123134
{
124135
if (Event.current.type != EventType.Repaint)
125136
{
@@ -131,6 +142,9 @@ public Rect Render(Rect rect, Vector2 scroll, Action<TreeNode> singleClick = nul
131142
}
132143
}
133144

145+
var startDisplay = scroll.y;
146+
var endDisplay = scroll.y + containingRect.height;
147+
134148
RequiresRepaint = false;
135149
rect = new Rect(0f, rect.y, rect.width, ItemHeight);
136150

@@ -139,7 +153,13 @@ public Rect Render(Rect rect, Vector2 scroll, Action<TreeNode> singleClick = nul
139153
if (DisplayRootNode)
140154
{
141155
var titleNode = nodes[0];
142-
var renderResult = titleNode.Render(rect, Styles.TreeIndentation, selectedNode == titleNode, FolderStyle, TreeNodeStyle, ActiveTreeNodeStyle);
156+
var renderResult = TreeNodeRenderResult.None;
157+
158+
var titleDisplay = !(rect.y > endDisplay || rect.yMax < startDisplay);
159+
if (titleDisplay)
160+
{
161+
renderResult = titleNode.Render(rect, Styles.TreeIndentation, selectedNode == titleNode, FolderStyle, TreeNodeStyle, ActiveTreeNodeStyle);
162+
}
143163

144164
if (renderResult == TreeNodeRenderResult.VisibilityChange)
145165
{
@@ -165,7 +185,14 @@ public Rect Render(Rect rect, Vector2 scroll, Action<TreeNode> singleClick = nul
165185
{
166186
Indent();
167187
}
168-
var renderResult = node.Render(rect, Styles.TreeIndentation, selectedNode == node, FolderStyle, TreeNodeStyle, ActiveTreeNodeStyle);
188+
189+
var renderResult = TreeNodeRenderResult.None;
190+
191+
var display = !(rect.y > endDisplay || rect.yMax < startDisplay);
192+
if (display)
193+
{
194+
renderResult = node.Render(rect, Styles.TreeIndentation, selectedNode == node, FolderStyle, TreeNodeStyle, ActiveTreeNodeStyle);
195+
}
169196

170197
if (renderResult == TreeNodeRenderResult.VisibilityChange)
171198
{

0 commit comments

Comments
 (0)