예제 #1
0
 private void onSourceChanged(LazyDirectoryTree oldSource)
 {
     if (oldSource != null)
     {
         oldSource.ComparerChanged -= Source_ComparerChanged;
         foreach (var tree in oldSource.EnumerateDescendantsAndSelf(true).Cast <LazyDirectoryTree>())
         {
             tree.ChildTreeAttached -= Source_ChildTreeAttached;
             tree.ChildTreeDetached -= Source_ChildTreeDetached;
             tree.IsSelectedChanged -= Tree_IsSelectedChanged;
         }
     }
     if (this.Source == null)
     {
         this.DestRoot = null;
     }
     else
     {
         this.DestRoot           = cloneSource(this.Source);
         Source.ComparerChanged += Source_ComparerChanged;
         foreach (var tree in this.Source.EnumerateDescendantsAndSelf(true).Cast <LazyDirectoryTree>())
         {
             tree.ChildTreeAttached += Source_ChildTreeAttached;
             tree.ChildTreeDetached += Source_ChildTreeDetached;
             tree.IsSelectedChanged += Tree_IsSelectedChanged;
         }
     }
 }
예제 #2
0
 private static IEnumerable <LazyDirectoryTree> childFactory_Run(
     LazyObservableTree <DirectoryInfo> parent)
 {
     if (parent.Value == null)
     {
         throw new NullReferenceException("Error: Directory cannot be null");
     }
     try
     {
         var dirs     = parent.Value.EnumerateDirectories("*", SearchOption.TopDirectoryOnly).ToArray();
         var children = dirs.Select(dir =>
         {
             var ty = new LazyDirectoryTree(dir);
             return(ty);
         }).ToArray();
         return(children);
     }
     catch (Exception)
     {
         var dirTree = parent as LazyDirectoryTree;
         if (dirTree != null)
         {
             dirTree.AccessAuthorised = false;
         }
         return(new LazyDirectoryTree[0]);
     }
 }
예제 #3
0
 private void Source_IsSelectedChanged(LazyDirectoryTree sender, bool?oldVal)
 {
     Logger.WriteLine($"{nameof(Source_IsSelectedChanged)}: Sender= {sender.Value.FullName}  old= {oldVal.ToString()}  this= {this.Value.FullName}");
     if (sender.IsSelected == false)
     {
         this.Prune();
     }
 }
예제 #4
0
        private void DirList_ItemAdded(ICollection <DirectoryInfo> sender, DirectoryInfo newItem, int index)
        {
            var newLazyDirectoryTree = new LazyDirectoryTree(newItem);
            var newLinkedTree        = new LinkedLayTree(newLazyDirectoryTree);

            this.LinkedRootList.Add(newLinkedTree);
            this.SourceRootList.Add(newLazyDirectoryTree);
        }
예제 #5
0
        public override ObservableSortedTree <DirectoryInfo> ShallowClone()
        {
            var clone = new LazyDirectoryTree(this.Value)
            {
                IsSelected = this.IsSelected,
                IsExpanded = this.IsExpanded
            };

            return(clone);
        }
예제 #6
0
 private void Tree_IsSelectedChanged(LazyDirectoryTree sender, bool?oldVal)
 {
     if (oldVal == false && sender.IsSelected != false)
     {
         FindOrAddDirectoryToDest(sender.Value);
     }
     else if (oldVal != false && sender.IsSelected == false)
     {
         RemoveDirectoryFromDest(sender.Value);
     }
 }
예제 #7
0
 private void onSourceChanged(LazyDirectoryTree oldSource)
 {
     if (oldSource != null)
     {
         oldSource.ComparerChanged -= Source_ComparerChanged;
     }
     if (this.Source != null)
     {
         Source.ComparerChanged += Source_ComparerChanged;
     }
 }
예제 #8
0
 public LinkedLayTree(LazyDirectoryTree source)
     : base(source.Value, slaveChilFunc)
 {
     Logger.WriteLine($"new {typeof(LinkedLayTree).Name}; {source.Value.FullName}");
     this.Source = source;
     //this.SelectedFiles=new ObservableCollection<FileInfo>();
     this.CommandTest = new DelegateCommand(obj =>
     {
     }); //new DelegateCommand
     this.SelectedFilesChanged       += LinkedLayTree_SelectedFilesChanged;
     this.SelectedFilesChangedCommand = new DelegateCommand((obj) => { return; });
 }
예제 #9
0
        protected virtual void onSourceChanged(LazyDirectoryTree oldSource)
        {
            var oldSourceString = "null";

            if (oldSource != null)
            {
                oldSourceString = oldSource.ToString();
            }
            Logger.WriteLine($"{nameof(onSourceChanged)}: old= {oldSourceString}  this= {this.Value.FullName}");
            RemoveSourceEvents(oldSource);
            AddSourceEvents(this.Source);
        }
예제 #10
0
        private ObservableSortedTree <DirectoryInfo> cloneSource(LazyDirectoryTree cloneTree)
        {
            var root = new ObservableSortedTree <DirectoryInfo>(cloneTree.Value);

            if (!cloneTree.AreChildrenGenerated)
            {
                return(root);
            }
            var newChildren = cloneTree.Children
                              .Cast <LazyDirectoryTree>()
                              .Select(child => cloneSource(child));

            root.Children.AddRange(newChildren);
            return(root);
        }
예제 #11
0
 private void RemoveSourceEvents(LazyDirectoryTree source)
 {
     if (source == null)
     {
         return;
     }
     source.ComparerChanged   -= Source_ComparerChanged;
     source.ChildTreeAttached -= Source_ChildTreeAttached;
     source.ChildTreeDetached -= Source_ChildTreeDetached;
     source.IsSelectedChanged -= Source_IsSelectedChanged;
     if (this.AreChildrenGenerated)
     {
         foreach (var child in this.Children.Cast <LazyDirectoryTree>())
         {
             child.IsSelectedChanged -= SourceChild_IsSelectedChanged;
         }
     }
 }
예제 #12
0
        private void SourceChild_IsSelectedChanged(LazyDirectoryTree sender, bool?oldVal)
        {
            Logger.WriteLine($"{nameof(SourceChild_IsSelectedChanged)}: Sender= {sender.Value.FullName}  old= {oldVal.ToString()}  this= {this.Value.FullName}");
            if (sender.IsSelected == true)
            {
                if (oldVal == null)
                {
                    return;
                }
                else if (oldVal == false)
                {
                    if (this.AreChildrenGenerated)
                    {
                        this.Children.Add(new LinkedLayTree(sender));
                    }
                }
            }
            else if (sender.IsSelected == null)
            {
                if (oldVal == true)
                {
                    return;
                }
                else if (oldVal == false)
                {
                    if (this.AreChildrenGenerated)
                    {
                        this.Children.Add(new LinkedLayTree(sender));
                    }
                }
            }

            /*if (oldVal == false && sender.IsSelected != false)
             * {
             *  FindOrAddDirectoryToDest(sender.Value);
             * }
             * else if (oldVal != false && sender.IsSelected == false)
             * {
             *  RemoveDirectoryFromDest(sender.Value);
             * }*/
        }
예제 #13
0
 public LinkedDirectoryTree2(LazyDirectoryTree sourceTree)
 {
     this.Source = sourceTree;
 }
예제 #14
0
 public CategoryDirectoryInfo(LazyDirectoryTree sourceRoot)
 {
     this.LinkedRoot = new LinkedLayTree(sourceRoot);
 }
예제 #15
0
        protected virtual void OnChildIsSelectedChanged(LazyDirectoryTree sender, bool?oldVal)
        {
            if (suppress_Child_IsSelected_Changed)
            {
                return;
            }
            suppress_IsSelected_Changed = true;
            bool areAllChildrenSelected = Children.Cast <LazyDirectoryTree>()
                                          .All(child => child.IsSelected == true || child.UnauthorisedAccess);
            bool areAnyChildrenSelected = Children.Cast <LazyDirectoryTree>()
                                          .Any(child => child.IsSelected != false);

            if (areAllChildrenSelected)
            {
                IsSelected = true;
            }
            else if (!areAnyChildrenSelected)
            {
                IsSelected = false;
            }
            else
            {
                IsSelected = null;
            }
            suppress_IsSelected_Changed = false;

            /*if (suppress_Child_IsSelected_Changed)
             *  return;
             * suppress_IsSelected_Changed = true;
             * bool all = true;
             * bool any = false;
             * int count = Children.Count;
             * for (int i = 0; i < count; i++)
             * {
             *  var child = Children[i] as LazyDirectoryTree;
             *  if (child == null)
             *      continue;
             *  if (child.IsSelected == false && child.AccessAuthorised)
             *      all = false;
             *  if (child.IsSelected != false)
             *      any = true;
             *  if (any & !all)
             *      break;
             * }
             * if (all)
             * {
             *  IsSelected = true;
             * }
             * else if (!any)
             * {
             *  IsSelected = false;
             * }
             * else
             * {
             *  IsSelected = null;
             * }
             * suppress_IsSelected_Changed = false;
             * return;*/
            /*if (suppress_Child_IsSelected_Changed)
             *  return;
             * suppress_IsSelected_Changed = true;
             * if (sender.IsSelected == true)
             * {
             *  bool areAllChildrenSelected = Children.Cast<LazyDirectoryTree>()
             *      .All(child => child.IsSelected == true || child.UnauthorisedAccess);
             *  if (areAllChildrenSelected)
             *      IsSelected = true;
             *  else
             *      IsSelected = null;
             * }
             * else if (sender.IsSelected == null)
             * {
             *
             * }
             * else if (sender.IsSelected == false || sender.IsSelected == null)
             * {
             *  bool areAnyChildrenSelected = Children.Cast<LazyDirectoryTree>()
             *     .Any(child => child.IsSelected != false);
             *  if (areAnyChildrenSelected)
             *      IsSelected = null;
             *  else
             *      IsSelected = false;
             * }
             * suppress_IsSelected_Changed = false;*/
        }