示例#1
0
        static void BuildTree(IFolderContext context, Folder folder, int maxItems, ref int descIndex, ref int nodeIndex)
        {
            var nodes       = context.Nodes;
            var descriptors = context.Folders;

            while (folder.Items.Count < maxItems)
            {
                var d = descIndex < descriptors.Count ? descriptors[descIndex] : null;
                if (nodeIndex < nodes.Count && (d == null || nodeIndex < d.Index))
                {
                    folder.Items.Add(nodes[nodeIndex++]);
                }
                else if (d != null)
                {
                    descIndex++;
                    var subFolder = new Folder {
                        Id = d.Id, Expanded = d.Expanded
                    };
                    folder.Items.Add(subFolder);
                    BuildTree(context, subFolder, d.ItemCount, ref descIndex, ref nodeIndex);
                }
                else
                {
                    break;
                }
            }
        }
示例#2
0
 public void SyncDescriptorsAndNodes(IFolderContext context)
 {
     context.Nodes.Clear();
     context.Folders = new List <Descriptor>();
     SyncDescriptorsAndNodes(context, this);
     if (context.Folders.Count == 0)
     {
         context.Folders = null;
     }
 }
示例#3
0
        public static Folder BuildTree(IFolderContext context)
        {
            var root = new Folder {
                Expanded = true
            };

            if (context.Folders == null || context.Folders.Count == 0)
            {
                root.Items.AddRange(context.Nodes);
            }
            else
            {
                int descIndex = 0;
                int nodeIndex = 0;
                BuildTree(context, root, int.MaxValue, ref descIndex, ref nodeIndex);
            }
            return(root);
        }
示例#4
0
 private static void SyncDescriptorsAndNodes(IFolderContext context, Folder folder)
 {
     foreach (var i in folder.Items)
     {
         if (i is Node)
         {
             context.Nodes.Add((Node)i);
         }
         else if (i is Folder)
         {
             var subFolder = (Folder)i;
             context.Folders.Add(new Descriptor {
                 Id        = subFolder.Id,
                 Expanded  = subFolder.Expanded,
                 Index     = context.Nodes.Count,
                 ItemCount = subFolder.Items.Count
             });
             SyncDescriptorsAndNodes(context, subFolder);
         }
     }
 }
示例#5
0
 public FolderGetOperations()
 {
     _folderContext = DbContext.FolderContext;
 }
示例#6
0
 public FolderWriteOperations()
 {
     _folderContext = DbContext.FolderContext;
 }
示例#7
0
 public FolderController(IFolderContext folderContext)
 {
     _folderContext = folderContext;
 }