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

Commit fd144fa

Browse files
A less intrusive way of supporting tree selection
1 parent 8ffecb0 commit fd144fa

File tree

2 files changed

+30
-23
lines changed

2 files changed

+30
-23
lines changed

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

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -94,17 +94,19 @@ protected Texture GetNodeIconBadge(ChangesTreeNode node)
9494

9595
protected override ChangesTreeNode CreateTreeNode(string path, string label, int level, bool isFolder, bool isActive, bool isHidden, bool isCollapsed, GitStatusEntryTreeData? treeData)
9696
{
97-
var node = ScriptableObject.CreateInstance<ChangesTreeNode>();
98-
node.Path = path;
99-
node.Label = label;
100-
node.Level = level;
101-
node.IsFolder = isFolder;
102-
node.IsActive = isActive;
103-
node.IsHidden = isHidden;
104-
node.IsCollapsed = isCollapsed;
105-
node.TreeIsCheckable = IsCheckable;
106-
node.GitFileStatus = treeData.HasValue ? treeData.Value.FileStatus : GitFileStatus.None;
107-
node.ProjectPath = treeData.HasValue ? treeData.Value.ProjectPath : null;
97+
var node = new ChangesTreeNode
98+
{
99+
Path = path,
100+
Label = label,
101+
Level = level,
102+
IsFolder = isFolder,
103+
IsActive = isActive,
104+
IsHidden = isHidden,
105+
IsCollapsed = isCollapsed,
106+
TreeIsCheckable = IsCheckable,
107+
GitFileStatus = treeData.HasValue ? treeData.Value.FileStatus : GitFileStatus.None,
108+
ProjectPath = treeData.HasValue ? treeData.Value.ProjectPath : null
109+
};
108110

109111
if (isFolder)
110112
{

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

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)