private void PopulateArtistTree() { ArtistTree.Clear(); ArtistTreeController.MultiSelection.Clear(); foreach (string artist in m_DataModel.Database.Artists) { ArtistTreeViewNode artistNode = new ArtistTreeViewNode(artist, null, ArtistTreeController); foreach (AlbumMetadata album in m_DataModel.Database.AlbumsByArtist(artist)) { AlbumMetadataTreeViewNode albumNode = new AlbumMetadataTreeViewNode(album, artistNode, ArtistTreeController); artistNode.AddChild(albumNode); foreach (SongMetadata song in m_DataModel.Database.SongsByAlbum(album)) { SongMetadataTreeViewNode songNode = new SongMetadataTreeViewNode("", song, albumNode, ArtistTreeController); albumNode.AddChild(songNode); } } ArtistTree.Add(artistNode); // Insert now that branch is fully populated. } int id = 0; foreach (TreeViewNode baseNode in ArtistTree) { id = AssignTreeViewNodeIDs(baseNode, id); } }
public void ShowSongsInArtistTree(IEnumerable <SongMetadata> selectedSongs) { ISet <string> selectedArtists = new SortedSet <string>(); ISet <AlbumMetadata> selectedAlbums = new SortedSet <AlbumMetadata>(); ISet <string> selectedSongPaths = new SortedSet <string>(StringComparer.Ordinal); foreach (SongMetadata song in selectedSongs) { if (song.IsLocal) { selectedArtists.Add(song.Artist); selectedAlbums.Add(new AlbumMetadata(song.Artist, song.Album, null)); selectedSongPaths.Add(song.Path); } } ArtistTreeController.ClearMultiSelection(); foreach (TreeViewNode rootNode in ArtistTreeController.RootLevelNodes) { ArtistTreeViewNode artistNode = rootNode as ArtistTreeViewNode; artistNode.IsExpanded = false; if (selectedArtists.Contains(artistNode.Artist)) { artistNode.IsExpanded = true; foreach (TreeViewNode midNode in artistNode.Children) { AlbumMetadataTreeViewNode albumNode = midNode as AlbumMetadataTreeViewNode; albumNode.IsExpanded = false; if (selectedAlbums.Contains(albumNode.Album)) { albumNode.IsExpanded = true; foreach (TreeViewNode leafNode in albumNode.Children) { SongMetadataTreeViewNode songNode = leafNode as SongMetadataTreeViewNode; if (selectedSongPaths.Contains(songNode.Song.Path)) { songNode.IsMultiSelected = true; } } } } } } }