@@ -9,6 +9,8 @@ namespace GitHub.Unity
99 [ Serializable ]
1010 public class TreeNodeDictionary : SerializableDictionary < string , TreeNode > { }
1111
12+ public class TreeSelection : ScriptableObject { }
13+
1214 [ Serializable ]
1315 public abstract class Tree < TNode , TData > : TreeBase < TNode , TData >
1416 where TNode : TreeNode
@@ -39,6 +41,8 @@ public abstract class Tree<TNode, TData>: TreeBase<TNode, TData>
3941 [ NonSerialized ] private TNode rightClickNextRenderNode ;
4042 [ NonSerialized ] private int controlId ;
4143
44+ [ SerializeField ] private TreeSelection selectionObject = ScriptableObject . CreateInstance < TreeSelection > ( ) ;
45+
4246 public bool IsInitialized { get { return Nodes != null && Nodes . Count > 0 && ! String . IsNullOrEmpty ( Nodes [ 0 ] . Path ) ; } }
4347 public bool RequiresRepaint { get ; private set ; }
4448
@@ -53,7 +57,7 @@ public override TNode SelectedNode
5357 set
5458 {
5559 selectedNode = value ;
56- Selection . activeObject = value ;
60+ Selection . activeObject = selectionObject ;
5761 }
5862 }
5963
@@ -89,7 +93,7 @@ protected override List<TNode> Nodes
8993 public Rect Render ( Rect containingRect , Rect rect , Vector2 scroll , Action < TNode > singleClick = null , Action < TNode > doubleClick = null , Action < TNode > rightClick = null )
9094 {
9195 controlId = GUIUtility . GetControlID ( FocusType . Keyboard ) ;
92- var treeHasFocus = GUIUtility . keyboardControl == controlId && Selection . activeObject == selectedNode ;
96+ var treeHasFocus = GUIUtility . keyboardControl == controlId && Selection . activeObject == selectionObject ;
9397
9498 if ( ! Nodes . Any ( ) )
9599 return new Rect ( 0f , rect . y , 0f , 0f ) ;
@@ -373,7 +377,7 @@ protected void LoadNodeIcons()
373377 }
374378
375379 [ Serializable ]
376- public class TreeNode : ScriptableObject , ITreeNode
380+ public class TreeNode : ITreeNode
377381 {
378382 public string path ;
379383 public string label ;
@@ -606,15 +610,16 @@ protected Texture GetNodeIcon(TreeNode node)
606610
607611 protected override TreeNode CreateTreeNode ( string path , string label , int level , bool isFolder , bool isActive , bool isHidden , bool isCollapsed , GitBranchTreeData ? treeData )
608612 {
609- var node = ScriptableObject . CreateInstance < TreeNode > ( ) ;
610- node . Path = path ;
611- node . Label = label ;
612- node . Level = level ;
613- node . IsFolder = isFolder ;
614- node . IsActive = isActive ;
615- node . IsHidden = isHidden ;
616- node . IsCollapsed = isCollapsed ;
617- node . TreeIsCheckable = IsCheckable ;
613+ var node = new TreeNode {
614+ Path = path ,
615+ Label = label ,
616+ Level = level ,
617+ IsFolder = isFolder ,
618+ IsActive = isActive ,
619+ IsHidden = isHidden ,
620+ IsCollapsed = isCollapsed ,
621+ TreeIsCheckable = IsCheckable
622+ } ;
618623
619624 if ( isFolder )
620625 {
0 commit comments