Jelajahi Sumber

Implemented ICoreTreeNode for UI compatibility

Frank van den Bos 6 bulan lalu
induk
melakukan
33d82ee222
1 mengubah file dengan 40 tambahan dan 24 penghapusan
  1. 40 24
      InABox.Core/CoreTreeNodes.cs

+ 40 - 24
InABox.Core/CoreTreeNodes.cs

@@ -7,12 +7,28 @@ using System.Linq.Expressions;
 
 namespace InABox.Core
 {
-    public class CoreTreeNode<TKey> : INotifyPropertyChanged
+    public interface ICoreTreeNode
+    {
+        object? ID { get; set; }
+        object? Parent { get; set; }
+        object? Image { get; set; }
+        CoreRow? Row { get; set; }
+        object? this[string column] { get; set; }
+        string Number { get; }
+    }
+
+    public class CoreTreeNode<TKey> : INotifyPropertyChanged, ICoreTreeNode
     {
 
         private CoreTreeNodes<TKey> _owner;
         
         public ObservableCollection<CoreTreeNode<TKey>> Children => new ObservableCollection<CoreTreeNode<TKey>>(_owner.GetChildrenOfParent(_id));
+
+        object? ICoreTreeNode.ID
+        {
+            get => ID;
+            set => ID = (TKey)value!;
+        }
         
         private TKey _id;
         public TKey ID 
@@ -25,6 +41,13 @@ namespace InABox.Core
             }
         }
         
+        object? ICoreTreeNode.Parent
+        {
+            get => Parent;
+            set => Parent = (TKey)value!;
+        }
+
+        
         private TKey _parent;
         public TKey Parent 
         {
@@ -36,8 +59,8 @@ namespace InABox.Core
             }
         }
    
-        private object _image;
-        public object Image
+        private object? _image;
+        public object? Image
         {
             get => _image;
             set
@@ -122,42 +145,42 @@ namespace InABox.Core
         
     }
 
-    public class CoreTreeNodes<TNode, TKey> where TNode : CoreTreeNode<TKey>
+    public class CoreTreeNodes<TKey>
     {
-        private List<TNode> _nodes;
-        private Dictionary<TKey, TNode> _nodeMap;
+        private List<CoreTreeNode<TKey>> _nodes;
+        private Dictionary<TKey, CoreTreeNode<TKey>> _nodeMap;
         
         public TKey DefaultKey { get; set; }
 
-        public ObservableCollection<TNode> Nodes => new ObservableCollection<TNode>(_nodes.Where(x => Equals(x.Parent, DefaultKey)));
+        public ObservableCollection<CoreTreeNode<TKey>> Nodes => new ObservableCollection<CoreTreeNode<TKey>>(_nodes.Where(x => Equals(x.Parent, DefaultKey)));
         
-        public TNode? this[TKey id] => _nodeMap.GetValueOrDefault(id);
+        public CoreTreeNode<TKey>? this[TKey id] => _nodeMap.GetValueOrDefault(id);
         
         public CoreTreeNodes(TKey defaultKey)
         {
-            _nodes = new List<TNode>();
-            _nodeMap = new Dictionary<TKey, TNode>();
+            _nodes = new List<CoreTreeNode<TKey>>();
+            _nodeMap = new Dictionary<TKey, CoreTreeNode<TKey>>();
             DefaultKey = defaultKey;
         }
 
-        public TNode Add(TKey id, TKey parent, CoreRow row)
+        public CoreTreeNode<TKey> Add(TKey id, TKey parent, CoreRow row)
         {
-            var node = (TNode)Activator.CreateInstance(typeof(TNode), this, id, parent, row );
+            var node = new CoreTreeNode<TKey>(this, id, parent, row);
             _nodes.Add(node);
             _nodeMap[id] = node;
             return node;
         }
 
-        public TNode Find(TKey id) => _nodeMap.GetValueOrDefault(id);
+        public CoreTreeNode<TKey> Find(TKey id) => _nodeMap.GetValueOrDefault(id);
 
-        public TNode? Find(CoreRow row) => _nodes.FirstOrDefault(x => x.Row == row);
+        public CoreTreeNode<TKey>? 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<TNode> GetChildren(TKey id)
+        public IEnumerable<CoreTreeNode<TKey>> GetChildren(TKey id)
         {
             if(!_nodeMap.TryGetValue(id, out var node))
             {
@@ -175,7 +198,7 @@ namespace InABox.Core
         /// </summary>
         /// <param name="id"></param>
         /// <returns></returns>
-        public IEnumerable<TNode> GetChildrenOfParent(TKey id)
+        public IEnumerable<CoreTreeNode<TKey>> GetChildrenOfParent(TKey id)
         {
             return _nodes.Where(x => object.Equals(x.Parent, id) && !object.Equals(x.ID, id));
         }
@@ -199,12 +222,5 @@ namespace InABox.Core
             ColumnChanged?.Invoke(node, column);
         }
     }
-    
-    public class CoreTreeNodes<TKey> : CoreTreeNodes<CoreTreeNode<TKey>, TKey>
-    {
-        public CoreTreeNodes(TKey defaultKey) : base(defaultKey)
-        {
-            
-        }
-    }
+
 }