private void DisplayClasses(IEnumerable <TagDatum> references, bool loadTags = false) { var lookup = new Dictionary <TagClass, TreeNode>( ); foreach (var reference in references) { var path = reference.Path; var tagClass = reference.Class; var @class = ( string )tagClass; // Don't process empty classes if (tagClass == TagClass.Empty) { continue; } if (!lookup.ContainsKey(tagClass)) { lookup.Add(tagClass, new ScenarioView.DirectoryNode(@class, @class)); } if (!loadTags) { continue; } var node = new ScenarioView.GuerillaBlockReferenceNode(path, path, reference); lookup[tagClass].Nodes.Add(node); } BeginUpdate( ); Nodes.Clear( ); Nodes.AddRange(lookup.Values.ToArray( )); EndUpdate( ); }
private void DisplayHierarchical(IEnumerable <TagDatum> references, bool loadTags = false) { BeginUpdate(); Nodes.Clear( ); foreach (var reference in references) { var path = reference.Path; var directories = path.Split(new[] { @"\" }, StringSplitOptions.RemoveEmptyEntries); var length = path.IndexOf('\\'); // Don't process empty arrays if (directories.Length <= 0) { continue; } var collection = Nodes; // Loop through all elements of array except the last one var lastElementIndex = directories.Length - 1; for (var index = 0; index < lastElementIndex; index++) { var dir = directories[index]; var fullDirectory = path.Substring(0, length); var directoryNode = new ScenarioView.DirectoryNode(dir, fullDirectory); if (!collection.ContainsKey(directoryNode.Name)) { collection.Add(directoryNode); } collection = collection[directoryNode.Name].Nodes; var indexOf = path.IndexOf('\\', length + 1); length = indexOf < 0 ? path.Length : indexOf; } if (!loadTags) { continue; } // Do special work on the last element: var text = directories[lastElementIndex]; var guerillaBlockNode = new ScenarioView.GuerillaBlockReferenceNode(path, text, reference); if (!collection.ContainsKey(guerillaBlockNode.Name)) { collection.Add(guerillaBlockNode); } } SelectedNode = Nodes.Count > 0 ? Nodes[0] : null; SelectedNode?.Expand( ); EndUpdate(); }