public void AddNewDirectories(object parameter)
 {
     IEnumerable<FinderNode> directoryNodeInSelection = SelectedNodes.Where(x => x.Type == NodeType.FORDER);
     var newNode = new FinderNode(NodeType.FORDER) { Name = "New Directory" };
     if (directoryNodeInSelection.Count() != 0)
         _finderDirector.Add(directoryNodeInSelection.First(), newNode);
     else
         _finderDirector.Add(newNode);
 }
        public bool Contains(FinderNode node)
        {
            if (node.Type == NodeType.PRODUCT && string.IsNullOrEmpty(node.ItemID))
                throw new ArgumentException();

            return
                _nodes.Any(x => x.Descendants().Contains(node)) || //이미 자식루트에서 가지고 있는 경우
                _nodes.Contains(node) || //ROOT에서 가지고 있을 경우
               _nodes.SelectMany(x => x.Descendants().Where(y => y.Type == NodeType.PRODUCT)).Any(x => x.ItemID == node.ItemID); //동일한 item 유니크키를 가지고 있는 경우
        }
        public bool Remove(FinderNode node)
        {
            if (!Contains(node))
                return false;

            ObservableCollection<FinderNode> copy = new ObservableCollection<FinderNode>(_nodes);
            FinderNode parent = copy.SelectMany(x => x.Descendants()).Where(x => x.Nodes.Contains(node)).SingleOrDefault();
            if (parent != null)
                return parent.Nodes.Remove(node);
            else
                return _nodes.Remove(node); //부모를 못 찾으면 마스터 루트에 있는 것.
        }
Beispiel #4
0
 private void OnValueChanged(IControl next)
 {
     if (next == null || _ancestorType.IsAssignableFrom(next.GetType().GetTypeInfo()))
         _subject.OnNext(next);
     else
     {
         _child?.Dispose();
         _child = new FinderNode(next, _ancestorType);
         _child.Observable.Subscribe(OnChildValueChanged);
         _child.Init();
     }
 }
Beispiel #5
0
 /// <summary>
 /// Delegate called on value changes.
 /// </summary>
 /// <param name="next">The next control.</param>
 private void OnValueChanged(IControl next)
 {
     if (next == null || _ancestorType.IsAssignableFrom(next.GetType().GetTypeInfo()))
     {
         _subject.OnNext(next);
     }
     else
     {
         _child?.Dispose();
         _child = new FinderNode(next, _ancestorType);
         _child.Observable.Subscribe(OnChildValueChanged);
         _child.Init();
     }
 }
Beispiel #6
0
        public static IObservable <IStyledElement?> Create(IStyledElement control, Type ancestorType)
        {
            return(new AnonymousObservable <IStyledElement?>(observer =>
            {
                var finder = new FinderNode(control, ancestorType);
                var subscription = finder.Observable.Subscribe(observer);
                finder.Init();

                return Disposable.Create(() =>
                {
                    subscription.Dispose();
                    finder.Dispose();
                });
            }));
        }
Beispiel #7
0
 private void AddNode(FinderNode node, int index, FinderNode newNode)
 {
     ObservableCollection<FinderNode> children = (node == null) ? _viewModel.Nodes : node.Nodes;
     if (index == -1)
     {
         children.Add(newNode);
     }
     else
     {
         if (0 <= index && index < children.Count())
             children.Insert(index, newNode);
         else
             children.Add(newNode);
     }
 }
Beispiel #8
0
        public static IObservable<IControl> Create(IControl control, Type ancestorType)
        {
            return new AnonymousObservable<IControl>(observer =>
            {
                var finder = new FinderNode(control, ancestorType.GetTypeInfo());
                var subscription = finder.Observable.Subscribe(observer);
                finder.Init();

                return Disposable.Create(() =>
                {
                    subscription.Dispose();
                    finder.Dispose();
                });
            });


        }
 public void Add(FinderNode parent, FinderNode child)
 {
     if (!Contains(child) && Contains(parent))
         parent.Nodes.Add(child);
 }
 public void Add(FinderNode node)
 {
     if (!Contains(node))
         _nodes.Add(node);
 }