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

Commit 7839904

Browse files
Merge remote-tracking branch 'remotes/origin/enhancements/branches-view-rollup' into fixes/branches-view-remove-serialized-texture2d
# Conflicts: # src/UnityExtension/Assets/Editor/GitHub.Unity/UI/TreeControl.cs
2 parents 9dc931a + 95586c5 commit 7839904

File tree

1 file changed

+40
-26
lines changed

1 file changed

+40
-26
lines changed

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

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88

99
namespace GitHub.Unity
1010
{
11+
[Serializable]
12+
public class TreeNodeDictionary : SerializableDictionary<string, TreeNode> { }
13+
1114
[Serializable]
1215
public abstract class Tree
1316
{
@@ -24,10 +27,9 @@ public abstract class Tree
2427
[SerializeField] private List<TreeNode> nodes = new List<TreeNode>();
2528
[SerializeField] private TreeNode selectedNode = null;
2629
[SerializeField] private TreeNode activeNode = null;
27-
[SerializeField] private List<string> foldersKeys = new List<string>();
30+
[SerializeField] private TreeNodeDictionary folders = new TreeNodeDictionary();
2831

2932
[NonSerialized] private Stack<bool> indents = new Stack<bool>();
30-
[NonSerialized] private Hashtable folders;
3133

3234
public bool IsInitialized { get { return nodes != null && nodes.Count > 0 && !String.IsNullOrEmpty(nodes[0].Name); } }
3335
public bool RequiresRepaint { get; private set; }
@@ -48,26 +50,12 @@ private set
4850

4951
public TreeNode ActiveNode { get { return activeNode; } }
5052

51-
private Hashtable Folders
52-
{
53-
get
54-
{
55-
if (folders == null)
56-
{
57-
folders = new Hashtable();
58-
for (int i = 0; i < foldersKeys.Count; i++)
59-
{
60-
folders.Add(foldersKeys[i], null);
61-
}
62-
}
63-
return folders;
64-
}
65-
}
66-
6753
public void Load(IEnumerable<ITreeData> data, string title)
6854
{
69-
foldersKeys.Clear();
70-
Folders.Clear();
55+
var collapsedFoldersEnumerable = folders.Where(pair => pair.Value.IsCollapsed).Select(pair => pair.Key);
56+
var collapsedFolders = new HashSet<string>(collapsedFoldersEnumerable);
57+
58+
folders.Clear();
7159
nodes.Clear();
7260

7361
var titleNode = new TreeNode()
@@ -80,23 +68,27 @@ public void Load(IEnumerable<ITreeData> data, string title)
8068
SetNodeIcon(titleNode);
8169
nodes.Add(titleNode);
8270

71+
var hideChildren = false;
72+
var hideChildrenBelowLevel = 0;
73+
8374
foreach (var d in data)
8475
{
8576
var parts = d.Name.Split('/');
8677
for (int i = 0; i < parts.Length; i++)
8778
{
8879
var label = parts[i];
89-
var name = String.Join("/", parts, 0, i + 1);
80+
var level = i + 1;
81+
var name = String.Join("/", parts, 0, level);
9082
var isFolder = i < parts.Length - 1;
91-
var alreadyExists = Folders.ContainsKey(name);
83+
var alreadyExists = folders.ContainsKey(name);
9284
if (!alreadyExists)
9385
{
94-
var node = new TreeNode()
86+
var node = new TreeNode
9587
{
9688
Name = name,
9789
IsActive = d.IsActive,
9890
Label = label,
99-
Level = i + 1,
91+
Level = level,
10092
IsFolder = isFolder
10193
};
10294

@@ -105,17 +97,39 @@ public void Load(IEnumerable<ITreeData> data, string title)
10597
activeNode = node;
10698
}
10799

100+
if (hideChildren)
101+
{
102+
if (level <= hideChildrenBelowLevel)
103+
{
104+
hideChildren = false;
105+
}
106+
else
107+
{
108+
node.IsHidden = true;
109+
}
110+
}
111+
108112
SetNodeIcon(node);
109113

110114
nodes.Add(node);
111115
if (isFolder)
112116
{
113-
Folders.Add(name, null);
117+
if (collapsedFolders.Contains(name))
118+
{
119+
node.IsCollapsed = true;
120+
121+
if (!hideChildren)
122+
{
123+
hideChildren = true;
124+
hideChildrenBelowLevel = level;
125+
}
126+
}
127+
128+
folders.Add(name, node);
114129
}
115130
}
116131
}
117132
}
118-
foldersKeys = Folders.Keys.Cast<string>().ToList();
119133
}
120134

121135
public Rect Render(Rect rect, Vector2 scroll, Action<TreeNode> singleClick = null, Action<TreeNode> doubleClick = null, Action<TreeNode> rightClick = null)

0 commit comments

Comments
 (0)