Exemplo n.º 1
0
        private void AnalyzeChanges(FolderNode folder, bool expand, ref bool showHigher, ref bool showLower)
        {
            // look at files for changes
            foreach (FileItem file in folder.Files.Values)
                foreach (ulong id in file.GetRealChanges().Keys)
                {
                    ChangeCount[id]++;

                    if (HigherIDs.Contains(id))
                        showHigher = true;
                    else
                        showLower = true;
                }
            // look at folders for changes
            foreach (FolderNode sub in folder.Folders.Values)
            {
                foreach (ulong id in sub.GetRealChanges().Keys)
                {
                    ChangeCount[id]++;

                    if (HigherIDs.Contains(id))
                        showHigher = true;
                    else
                        showLower = true;
                }

                // recurse
                bool subChangesHigh = false, subChangesLow = false;

                AnalyzeChanges(sub, expand, ref subChangesHigh, ref subChangesLow);

                if(subChangesHigh)
                    showHigher = true;
                if(subChangesLow)
                    showLower = true;
            }

            folder.ContainsHigherChanges = showHigher;
            folder.ContainsLowerChanges = showLower;

            if (showHigher || showLower)
            {
                folder.UpdateOverlay();

                if (expand)
                    folder.EnsureVisible();
            }
        }
Exemplo n.º 2
0
        private FolderNode LoadWorking(TreeListNode parent, LocalFolder folder)
        {
            FolderNode node = new FolderNode(this, folder.Info, parent, false);
            node.Archived = folder.Archived;
            node.Integrated = folder.Integrated;

            if (SelectedFolder != null && node.Details.UID == SelectedFolder.Details.UID)
            {
                node.Selected = true;
                SelectedFolder = node;
            }

            if (!folder.Info.IsFlagged(StorageFlags.Archived) || GhostsButton.Checked)
                GuiUtils.InsertSubNode(parent, node);

            if (parent.GetType() == typeof(FolderNode))
            {
                FolderNode parentNode = (FolderNode)parent;
                parentNode.Folders[folder.Info.UID] = node;
            }

            if (node.Details.IsFlagged(StorageFlags.Modified))
                node.EnsureVisible();

            folder.Folders.LockReading(delegate()
            {
                foreach (LocalFolder sub in folder.Folders.Values)
                    LoadWorking(node, sub);
            });

            folder.Files.LockReading(delegate()
            {
                foreach (LocalFile file in folder.Files.Values)
                {
                    FileItem item = new FileItem(this, node, file.Info, false);
                    item.Archived = file.Archived;
                    item.Integrated = file.Integrated;

                    node.Files[file.Info.UID] = item;
                }
            });

            return node;
        }