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(); } }
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; }