mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/PCK-Studio.git
synced 2026-05-22 20:45:11 +00:00
47 lines
1.4 KiB
C#
47 lines
1.4 KiB
C#
using System.Collections.Generic;
|
|
using System.Windows.Forms;
|
|
|
|
namespace PckStudio.Core.Extensions
|
|
{
|
|
public static class TreeNodeExtensions
|
|
{
|
|
public static bool IsTagOfType<T>(this TreeNode node) where T : class
|
|
{
|
|
return node?.Tag is T;
|
|
}
|
|
|
|
public static bool TryGetTagData<TOut>(this TreeNode node, out TOut tagData) where TOut : class
|
|
{
|
|
if (node?.Tag is TOut data)
|
|
{
|
|
tagData = data;
|
|
return true;
|
|
}
|
|
tagData = default;
|
|
return false;
|
|
}
|
|
|
|
public static bool Contains(this TreeNode thisNode, TreeNode childNode)
|
|
{
|
|
if (childNode.Parent == null)
|
|
return false;
|
|
if (thisNode.Equals(childNode.Parent))
|
|
return true;
|
|
// If the parent node is not equal to the first node,
|
|
// call the TreeNode.Contains recursively using the parent of the node.
|
|
return thisNode.Contains(childNode.Parent);
|
|
}
|
|
|
|
public static List<TreeNode> GetChildNodes(this TreeNode thisNode)
|
|
{
|
|
List<TreeNode> nodes = new List<TreeNode>(thisNode.Nodes.Count);
|
|
foreach (TreeNode node in thisNode.Nodes)
|
|
{
|
|
nodes.Add(node);
|
|
nodes.AddRange(node.GetChildNodes());
|
|
}
|
|
return nodes;
|
|
}
|
|
|
|
}
|
|
} |