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

Commit 33b8780

Browse files
Maintaining collapsed folder nodes appropriately during reload
1 parent 6a7631b commit 33b8780

File tree

1 file changed

+33
-3
lines changed

1 file changed

+33
-3
lines changed

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

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ private set
6464

6565
public void Load(IEnumerable<ITreeData> data, string title)
6666
{
67+
var collapsedFoldersEnumerable = folders.Where(pair => pair.Value.IsCollapsed).Select(pair => pair.Key);
68+
var collapsedFolders = new HashSet<string>(collapsedFoldersEnumerable);
69+
6770
folders.Clear();
6871
nodes.Clear();
6972

@@ -77,23 +80,27 @@ public void Load(IEnumerable<ITreeData> data, string title)
7780
titleNode.Load();
7881
nodes.Add(titleNode);
7982

83+
var hideChildren = false;
84+
var hideChildrenBelowLevel = 0;
85+
8086
foreach (var d in data)
8187
{
8288
var parts = d.Name.Split('/');
8389
for (int i = 0; i < parts.Length; i++)
8490
{
8591
var label = parts[i];
86-
var name = String.Join("/", parts, 0, i + 1);
92+
var level = i + 1;
93+
var name = String.Join("/", parts, 0, level);
8794
var isFolder = i < parts.Length - 1;
8895
var alreadyExists = folders.ContainsKey(name);
8996
if (!alreadyExists)
9097
{
91-
var node = new TreeNode()
98+
var node = new TreeNode
9299
{
93100
Name = name,
94101
IsActive = d.IsActive,
95102
Label = label,
96-
Level = i + 1,
103+
Level = level,
97104
IsFolder = isFolder
98105
};
99106

@@ -102,13 +109,36 @@ public void Load(IEnumerable<ITreeData> data, string title)
102109
activeNode = node;
103110
}
104111

112+
if (hideChildren)
113+
{
114+
if (level <= hideChildrenBelowLevel)
115+
{
116+
hideChildren = false;
117+
}
118+
else
119+
{
120+
node.IsHidden = true;
121+
}
122+
}
123+
105124
ResetNodeIcons(node);
106125

107126
node.Load();
108127

109128
nodes.Add(node);
110129
if (isFolder)
111130
{
131+
if (collapsedFolders.Contains(name))
132+
{
133+
node.IsCollapsed = true;
134+
135+
if (!hideChildren)
136+
{
137+
hideChildren = true;
138+
hideChildrenBelowLevel = level;
139+
}
140+
}
141+
112142
folders.Add(name, node);
113143
}
114144
}

0 commit comments

Comments
 (0)