@@ -11,23 +11,33 @@ namespace GitHub.Unity
11
11
[ Serializable ]
12
12
public class Tree
13
13
{
14
- [ SerializeField ] private List < TreeNode > nodes = new List < TreeNode > ( ) ;
15
- [ SerializeField ] private TreeNode selectedNode = null ;
16
- [ SerializeField ] private TreeNode activeNode = null ;
17
14
[ SerializeField ] public float ItemHeight = EditorGUIUtility . singleLineHeight ;
18
15
[ SerializeField ] public float ItemSpacing = EditorGUIUtility . standardVerticalSpacing ;
19
16
[ SerializeField ] public float Indentation = 12f ;
20
17
[ SerializeField ] public Rect Margin = new Rect ( ) ;
21
18
[ SerializeField ] public Rect Padding = new Rect ( ) ;
22
- [ SerializeField ] private List < string > foldersKeys = new List < string > ( ) ;
23
- [ SerializeField ] public Texture2D ActiveNodeIcon ;
24
- [ SerializeField ] public Texture2D NodeIcon ;
25
- [ SerializeField ] public Texture2D FolderIcon ;
26
- [ SerializeField ] public Texture2D RootFolderIcon ;
19
+
20
+ [ SerializeField ] private SerializableTexture2D activeNodeIcon = new SerializableTexture2D ( ) ;
21
+ public Texture2D ActiveNodeIcon { get { return activeNodeIcon . Texture ; } set { activeNodeIcon . Texture = value ; } }
22
+
23
+ [ SerializeField ] private SerializableTexture2D nodeIcon = new SerializableTexture2D ( ) ;
24
+ public Texture2D NodeIcon { get { return nodeIcon . Texture ; } set { nodeIcon . Texture = value ; } }
25
+
26
+ [ SerializeField ] private SerializableTexture2D folderIcon = new SerializableTexture2D ( ) ;
27
+ public Texture2D FolderIcon { get { return folderIcon . Texture ; } set { folderIcon . Texture = value ; } }
28
+
29
+ [ SerializeField ] private SerializableTexture2D rootFolderIcon = new SerializableTexture2D ( ) ;
30
+ public Texture2D RootFolderIcon { get { return rootFolderIcon . Texture ; } set { rootFolderIcon . Texture = value ; } }
31
+
27
32
[ SerializeField ] public GUIStyle FolderStyle ;
28
33
[ SerializeField ] public GUIStyle TreeNodeStyle ;
29
34
[ SerializeField ] public GUIStyle ActiveTreeNodeStyle ;
30
35
36
+ [ SerializeField ] private List < TreeNode > nodes = new List < TreeNode > ( ) ;
37
+ [ SerializeField ] private TreeNode selectedNode = null ;
38
+ [ SerializeField ] private TreeNode activeNode = null ;
39
+ [ SerializeField ] private List < string > foldersKeys = new List < string > ( ) ;
40
+
31
41
[ NonSerialized ] private Stack < bool > indents = new Stack < bool > ( ) ;
32
42
[ NonSerialized ] private Hashtable folders ;
33
43
@@ -105,20 +115,10 @@ public void Load(IEnumerable<ITreeData> data, string title)
105
115
if ( node . IsActive )
106
116
{
107
117
activeNode = node ;
108
- node . Icon = ActiveNodeIcon ;
109
- }
110
- else if ( node . IsFolder )
111
- {
112
- if ( node . Level == 1 )
113
- node . Icon = RootFolderIcon ;
114
- else
115
- node . Icon = FolderIcon ;
116
- }
117
- else
118
- {
119
- node . Icon = NodeIcon ;
120
118
}
121
119
120
+ ResetNodeIcons ( node ) ;
121
+
122
122
node . Load ( ) ;
123
123
124
124
nodes . Add ( node ) ;
@@ -142,6 +142,7 @@ public Rect Render(Rect rect, Vector2 scroll, Action<TreeNode> singleClick = nul
142
142
rect = new Rect ( 0f , rect . y , rect . width , ItemHeight ) ;
143
143
144
144
var titleNode = nodes [ 0 ] ;
145
+ ResetNodeIcons ( titleNode ) ;
145
146
bool selectionChanged = titleNode . Render ( rect , 0f , selectedNode == titleNode , FolderStyle , TreeNodeStyle , ActiveTreeNodeStyle ) ;
146
147
147
148
if ( selectionChanged )
@@ -159,6 +160,7 @@ public Rect Render(Rect rect, Vector2 scroll, Action<TreeNode> singleClick = nul
159
160
for ( ; i < nodes . Count ; i ++ )
160
161
{
161
162
var node = nodes [ i ] ;
163
+ ResetNodeIcons ( node ) ;
162
164
163
165
if ( node . Level > level && ! node . IsHidden )
164
166
{
@@ -374,6 +376,26 @@ private void Unindent()
374
376
{
375
377
indents . Pop ( ) ;
376
378
}
379
+
380
+ private void ResetNodeIcons ( TreeNode node )
381
+ {
382
+ if ( node . IsActive )
383
+ {
384
+ node . Icon = ActiveNodeIcon ;
385
+ }
386
+ else if ( node . IsFolder )
387
+ {
388
+ if ( node . Level == 1 )
389
+ node . Icon = RootFolderIcon ;
390
+ else
391
+ node . Icon = FolderIcon ;
392
+ }
393
+ else
394
+ {
395
+ node . Icon = NodeIcon ;
396
+ }
397
+ node . Load ( ) ;
398
+ }
377
399
}
378
400
379
401
[ Serializable ]
0 commit comments