|
@@ -122,42 +122,42 @@ namespace InABox.Core
|
|
|
|
|
|
}
|
|
|
|
|
|
- public class CoreTreeNodes<TKey>
|
|
|
+ public class CoreTreeNodes<TNode, TKey> where TNode : CoreTreeNode<TKey>
|
|
|
{
|
|
|
- private List<CoreTreeNode<TKey>> _nodes;
|
|
|
- private Dictionary<TKey, CoreTreeNode<TKey>> _nodeMap;
|
|
|
+ private List<TNode> _nodes;
|
|
|
+ private Dictionary<TKey, TNode> _nodeMap;
|
|
|
|
|
|
public TKey DefaultKey { get; set; }
|
|
|
|
|
|
- public ObservableCollection<CoreTreeNode<TKey>> Nodes => new ObservableCollection<CoreTreeNode<TKey>>(_nodes.Where(x => Equals(x.Parent, DefaultKey)));
|
|
|
+ public ObservableCollection<TNode> Nodes => new ObservableCollection<TNode>(_nodes.Where(x => Equals(x.Parent, DefaultKey)));
|
|
|
|
|
|
- public CoreTreeNode<TKey>? this[TKey id] => _nodeMap.GetValueOrDefault(id);
|
|
|
+ public TNode? this[TKey id] => _nodeMap.GetValueOrDefault(id);
|
|
|
|
|
|
public CoreTreeNodes(TKey defaultKey)
|
|
|
{
|
|
|
- _nodes = new List<CoreTreeNode<TKey>>();
|
|
|
- _nodeMap = new Dictionary<TKey, CoreTreeNode<TKey>>();
|
|
|
+ _nodes = new List<TNode>();
|
|
|
+ _nodeMap = new Dictionary<TKey, TNode>();
|
|
|
DefaultKey = defaultKey;
|
|
|
}
|
|
|
|
|
|
- public CoreTreeNode<TKey> Add(TKey id, TKey parent, CoreRow row)
|
|
|
+ public TNode Add(TKey id, TKey parent, CoreRow row)
|
|
|
{
|
|
|
- var node = new CoreTreeNode<TKey>(this, id, parent, row);
|
|
|
+ var node = (TNode)Activator.CreateInstance(typeof(TNode), this, id, parent, row );
|
|
|
_nodes.Add(node);
|
|
|
_nodeMap[id] = node;
|
|
|
return node;
|
|
|
}
|
|
|
|
|
|
- public CoreTreeNode<TKey> Find(TKey id) => _nodeMap.GetValueOrDefault(id);
|
|
|
+ public TNode Find(TKey id) => _nodeMap.GetValueOrDefault(id);
|
|
|
|
|
|
- public CoreTreeNode<TKey>? Find(CoreRow row) => _nodes.FirstOrDefault(x => x.Row == row);
|
|
|
+ public TNode? Find(CoreRow row) => _nodes.FirstOrDefault(x => x.Row == row);
|
|
|
|
|
|
/// <summary>
|
|
|
/// Gets a given node and recursively all its children given by <paramref name="id"/>.
|
|
|
/// </summary>
|
|
|
/// <param name="id"></param>
|
|
|
/// <returns></returns>
|
|
|
- public IEnumerable<CoreTreeNode<TKey>> GetChildren(TKey id)
|
|
|
+ public IEnumerable<TNode> GetChildren(TKey id)
|
|
|
{
|
|
|
if(!_nodeMap.TryGetValue(id, out var node))
|
|
|
{
|
|
@@ -175,7 +175,7 @@ namespace InABox.Core
|
|
|
/// </summary>
|
|
|
/// <param name="id"></param>
|
|
|
/// <returns></returns>
|
|
|
- public IEnumerable<CoreTreeNode<TKey>> GetChildrenOfParent(TKey id)
|
|
|
+ public IEnumerable<TNode> GetChildrenOfParent(TKey id)
|
|
|
{
|
|
|
return _nodes.Where(x => object.Equals(x.Parent, id) && !object.Equals(x.ID, id));
|
|
|
}
|
|
@@ -199,4 +199,12 @@ namespace InABox.Core
|
|
|
ColumnChanged?.Invoke(node, column);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ public class CoreTreeNodes<TKey> : CoreTreeNodes<CoreTreeNode<TKey>, TKey>
|
|
|
+ {
|
|
|
+ public CoreTreeNodes(TKey defaultKey) : base(defaultKey)
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|