private void PopulateGenreTree() { GenreTreeController.ClearMultiSelection(); GenreTree.Clear(); foreach (string genre in m_DataModel.Database.Genres) { GenreTreeViewNode genreNode = new GenreTreeViewNode(genre, null, GenreTreeController); foreach (AlbumMetadata album in m_DataModel.Database.AlbumsByGenre(genre)) { AlbumMetadataTreeViewNode albumNode = new AlbumMetadataTreeViewNode(album, genreNode, GenreTreeController); genreNode.AddChild(albumNode); foreach (SongMetadata song in m_DataModel.Database.SongsByAlbum(album)) { if (song.Genre == genre) { SongMetadataTreeViewNode songNode = new SongMetadataTreeViewNode("", song, albumNode, GenreTreeController); albumNode.AddChild(songNode); } } } GenreTree.Add(genreNode); } int id = 0; foreach (TreeViewNode baseNode in GenreTree) { id = AssignTreeViewNodeIDs(baseNode, id); } }
public void ShowSongsInGenreTree(IEnumerable <SongMetadata> selectedSongs) { ISet <string> selectedGenres = 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) { selectedGenres.Add(song.Genre); selectedAlbums.Add(new AlbumMetadata(song.Artist, song.Album, null)); selectedSongPaths.Add(song.Path); } } GenreTreeController.ClearMultiSelection(); foreach (TreeViewNode rootNode in GenreTreeController.RootLevelNodes) { GenreTreeViewNode genreNode = rootNode as GenreTreeViewNode; genreNode.IsExpanded = false; if (selectedGenres.Contains(genreNode.Genre)) { genreNode.IsExpanded = true; foreach (TreeViewNode midNode in genreNode.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; } } } } } } }