示例#1
0
 private static Item.ItemState GetNewItemState(bool exists, Item.ItemState parentState, bool isInProject)
 {
     if (exists)
     {
         if (parentState == Item.ItemState.NORMAL && isInProject)
         {
             return(Item.ItemState.NORMAL);
         }
         else
         {
             return(Item.ItemState.NOT_PROJECT);
         }
     }
     else
     {
         return(Item.ItemState.NOT_FOUND);
     }
 }
示例#2
0
        public static Item CreateItem(DirectoryInfo dirInfo, Project.Directory pFolder, Item.ItemState state, Item parent, Logic logic)
        {
            if (!dirInfo.Exists && state == Item.ItemState.NOT_PROJECT)
            {
                throw new ArgumentException("Directory doesn't exist but is in a NOT_PROJECT content!");
            }
            if (dirInfo.Exists && state == Item.ItemState.NOT_FOUND)
            {
                throw new ArgumentException("Directory exists but is in a NOT_FOUND content!");
            }

            var  newState = GetNewItemState(dirInfo.Exists, state, pFolder != null);
            Item result   = new Item(parent, logic, ItemTypes.Directory, dirInfo.Name, newState == Item.ItemState.NOT_FOUND ? null : dirInfo.FullName, newState, pFolder);

            ObservableCollection <Project.Directory> folders = pFolder != null ? new ObservableCollection <Project.Directory>(pFolder.SubDirectories) : null;
            ObservableCollection <Project.File>      files   = pFolder != null ? new ObservableCollection <Project.File>(pFolder.Files) : null;

            try
            {
                foreach (var d in dirInfo.GetDirectories())
                {
                    if ((d.Attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
                    {
                        continue;
                    }

                    Project.Directory folder = null;

                    if (pFolder != null)
                    {
                        foreach (var f in folders)
                        {
                            if (f.Name.Equals(d.Name))
                            {
                                folder = f;
                                folders.Remove(f);
                                break;
                            }
                        }
                    }

                    Item i = CreateItem(d, folder, result);
                    result.AddChildSilently(i);
                }
            }
            catch (UnauthorizedAccessException) { }
            catch (DirectoryNotFoundException) { }
            if (pFolder != null)
            {
                foreach (var f in folders)
                {
                    Item i = CreateItem(new DirectoryInfo(f.Path), f, result);
                    result.AddChildSilently(i);
                }
            }
            try
            {
                foreach (var f in dirInfo.GetFiles())
                {
                    bool inProj = false;

                    if (pFolder != null)
                    {
                        foreach (var file in files)
                        {
                            if (file.Name.Equals(f.Name))
                            {
                                inProj = true;
                                files.Remove(file);
                                break;
                            }
                        }
                    }

                    Item i = CreateItem(f, result, inProj, null);
                    result.AddChildSilently(i);
                }
            }
            catch (UnauthorizedAccessException) { }
            catch (DirectoryNotFoundException) { }
            if (pFolder != null)
            {
                foreach (var file in files)
                {
                    Item i = CreateItem(new FileInfo(file.Path), result, true, file);
                    result.AddChildSilently(i);
                }
            }

            result.UpdateChildren();
            return(result);
        }