// Expand/multiselect node if the path is found under it. private bool SearchAndSelectPath(TreeViewNode node, string path) { if (node is DirectoryTreeViewNode) { DirectoryTreeViewNode directory = node as DirectoryTreeViewNode; if (path.StartsWith(directory.FullPath + "/")) { foreach (TreeViewNode child in directory.Children) { bool found = SearchAndSelectPath(child, path); if (found) { directory.IsExpanded = true; return(true); } } } } else if (node is SongMetadataTreeViewNode) { SongMetadataTreeViewNode song = node as SongMetadataTreeViewNode; if (song.Song.Path == path) { song.IsMultiSelected = true; return(true); } } return(false); }
private void PopulateDirectoryTree() { DirectoryTreeController.ClearMultiSelection(); DirectoryTree.Clear(); DirectoryTreeViewNode rootNode = new DirectoryTreeViewNode("/", null, DirectoryTreeController); IDictionary <string, TreeViewNode> directoryLookup = new SortedDictionary <string, TreeViewNode>(); directoryLookup[rootNode.DisplayString] = rootNode; foreach (SongMetadata song in m_DataModel.Database.Songs) { TreeViewNode parent = FindDirectoryNode(song.Directory, directoryLookup, rootNode); SongMetadataTreeViewNode leaf = new SongMetadataTreeViewNode(song.Filename, song, parent, DirectoryTreeController); parent.AddChild(leaf); } AssignTreeViewNodeIDs(rootNode, 0); if (rootNode.Children.Count > 0) { DirectoryTree.Add(rootNode); rootNode.IsExpanded = true; } }
private TreeViewNode FindDirectoryNode(string path, IDictionary <string, TreeViewNode> lookup, TreeViewNode rootNode) { if (path == "") { return(rootNode); } else if (lookup.ContainsKey(path)) { return(lookup[path]); } else { Tuple <string, string> parentAndSelf = Utils.SplitPath(path); TreeViewNode parent = FindDirectoryNode(parentAndSelf.Item1, lookup, rootNode); TreeViewNode self = new DirectoryTreeViewNode(parentAndSelf.Item2, parent, DirectoryTreeController); parent.AddChild(self); lookup[path] = self; return(self); } }
public void ShowSongsInDirectoryTree(IEnumerable <SongMetadata> selectedSongs) { DirectoryTreeController.ClearMultiSelection(); // This looks more complex than necessary because it is trying to // support multiple roots. foreach (TreeViewNode root in DirectoryTreeController.RootLevelNodes) { if (root is DirectoryTreeViewNode) { DirectoryTreeViewNode rootDirectory = root as DirectoryTreeViewNode; foreach (TreeViewNode node in rootDirectory.Children) { node.IsExpanded = false; foreach (SongMetadata song in selectedSongs) { SearchAndSelectPath(node, song.Path); } } } } }