⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 musictree.cpp

📁 FreeAMP(MP3播放)程序源代码-用来研究MP3解码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
                        TreeView_Expand(m_hMusicView, albumItem, TVE_EXPAND);

                    //trackItem = FindTrack(albumItem, oldItem);
                }
            }
        }
    }

	/*
    // is this in the uncatagorized section?
    if(!oldArtist) 
    {
        //trackItem = FindTrack(m_hUncatItem, newItem);
    }
    else
    {
        artistItem = FindArtist(newArtist);

        if(artistItem)
        {
            if(artistState & TVIS_EXPANDED)
                TreeView_Expand(m_hMusicView, artistItem, TVE_EXPAND);

            albumItem = FindAlbum(artistItem, newAlbum);

            if(albumItem)
            {
                if(albumState & TVIS_EXPANDED)
                    TreeView_Expand(m_hMusicView, albumItem, TVE_EXPAND);

                //trackItem = FindTrack(albumItem, oldItem);
            }
        }
    }
	*/
}

void MusicBrowserUI::MusicCatalogTrackAdded(const ArtistList* artist,
                                            const AlbumList* album,
                                            const PlaylistItem* item)
{
    const MetaData meta = item->GetMetaData();
    HTREEITEM newItem = NULL;

    // can we catagorize this track?
    if(!artist) 
    {
        if(m_hUncatItem)
        {
            // nope, stick in uncatagorized
            TV_INSERTSTRUCT insert;
            TreeData        data;
            MetaData        metadata;
            TV_ITEM         tv_item;

            tv_item.hItem = m_hUncatItem;
            tv_item.mask = TVIF_CHILDREN;
            tv_item.cChildren = 1;

            TreeView_SetItem(m_hMusicView, &tv_item);

            insert.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_CHILDREN |
                                TVIF_SELECTEDIMAGE | TVIF_PARAM; 

            data.m_iLevel = 3;
            data.m_pArtist = NULL;
            data.m_pAlbum = NULL;
    
        
            data.m_pTrack = (PlaylistItem*)item;
            metadata = item->GetMetaData();

            if (metadata.Title() == string(" ") || 
                metadata.Title().length() == 0)
                insert.item.pszText = "Unknown";
            else    
                insert.item.pszText = (char *)(metadata.Title().c_str());
        
            insert.item.cchTextMax = metadata.Title().length();
            insert.item.iImage = 4;
            insert.item.iSelectedImage = 4;
            insert.item.cChildren= 0;
            insert.item.lParam = (LPARAM) new TreeData(data);
            insert.hInsertAfter = TVI_SORT;
            insert.hParent = m_hUncatItem;
            newItem = TreeView_InsertItem(m_hMusicView, &insert);
        }
    }
    else 
    {
        // yep, search for it
        HTREEITEM artistItem = NULL, albumItem = NULL;

        artistItem = FindArtist(artist);

        if(artistItem)
        {
            albumItem = FindAlbum(artistItem, album);

            if(albumItem)
            {
                if(TreeView_GetChild(m_hMusicView, albumItem))
                {
                    TV_INSERTSTRUCT insert;
                    TreeData        data;
                    MetaData        metadata;

                    insert.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_CHILDREN |
                                        TVIF_SELECTEDIMAGE | TVIF_PARAM; 

                    data.m_iLevel = 3;
                    data.m_pArtist = (ArtistList*)artist;
                    data.m_pAlbum = (AlbumList*)album;
    
                    data.m_pTrack = (PlaylistItem*)item;
                    metadata = item->GetMetaData();

                    

                    ostringstream ost;

                    if(metadata.Track() == 0)
                        ost << "?. ";
                    else            
                        ost << metadata.Track() << ". ";

                    ost << metadata.Title();

                    string title = ost.str();
                
                    if(metadata.Title() == string(" ") ||
                       metadata.Title().length() == 0)
                        insert.item.pszText = "Unknown";
                    else    
                        insert.item.pszText = (char *)(title.c_str());
                    


                    /*if (metadata.Title() == string(" ") || 
                        metadata.Title().length() == 0)
                        insert.item.pszText = "Unknown";
                    else    
                        insert.item.pszText = (char *)(metadata.Title().c_str());*/
    
                    insert.item.cchTextMax = strlen(insert.item.pszText);
                    insert.item.iImage = 4;
                    insert.item.iSelectedImage = 4;
                    insert.item.cChildren= 0;
                    insert.item.lParam = (LPARAM) new TreeData(data);
                    insert.hInsertAfter = TVI_LAST;
                    insert.hParent = albumItem;

                    TV_ITEM tv_item;
                    HTREEITEM sibling = NULL;

                    tv_item.mask = TVIF_PARAM;

                    if(tv_item.hItem = TreeView_GetChild(m_hMusicView, albumItem))
                    {
                        BOOL success;

                        do
                        {
                            success = TreeView_GetItem(m_hMusicView, &tv_item);

                            if(success)
                            {
                                TreeData* treedata = (TreeData*)tv_item.lParam;

                                if(treedata)
                                {                                
                                    if(metadata.Track())
                                    {
                                        if(treedata->m_pTrack->GetMetaData().Track() >
                                           metadata.Track())
                                        {
                                            if(sibling)
                                                insert.hInsertAfter = sibling;
                                            else
                                                insert.hInsertAfter = TVI_FIRST;
                                            break;
                                        }
                                    }
                                    else
                                    {
                                        if(treedata->m_pTrack->GetMetaData().Title() > 
                                           metadata.Title() )
                                        {
                                            if(sibling)
                                                insert.hInsertAfter = sibling;
                                            else
                                                insert.hInsertAfter = TVI_FIRST;
                                            break;
                                        }
                                    }
                                }
                            }

                            sibling = tv_item.hItem;
        
                        }while(success && 
                               (tv_item.hItem = TreeView_GetNextSibling(m_hMusicView, 
                                                                        tv_item.hItem)));
                    }

                    newItem = TreeView_InsertItem(m_hMusicView, &insert);
                }
            }
            else // might need to add the album
            {
                if(TreeView_GetChild(m_hMusicView, artistItem))
                {
                    TV_INSERTSTRUCT insert;
                    TreeData        data; 

                    insert.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_CHILDREN |
                                        TVIF_SELECTEDIMAGE | TVIF_PARAM; 

                    data.m_iLevel = 2;
                    data.m_pArtist = (ArtistList*)artist;
                    data.m_pAlbum = (AlbumList*)album;

                    if (album->name == string(" ") || 
                        album->name.length() == 0)
                        insert.item.pszText = "Unknown";
                    else    
                        insert.item.pszText = (char *)album->name.c_str();
    
                    insert.item.cchTextMax = album->name.length();
                    insert.item.iImage = 3;
                    insert.item.iSelectedImage = 3;
                    insert.item.cChildren= 1;
                    insert.item.lParam = (LPARAM) new TreeData(data);
                    insert.hInsertAfter = TVI_SORT;
                    insert.hParent = artistItem;
                    newItem = TreeView_InsertItem(m_hMusicView, &insert);
                }
            }
        }
        else // might need to add the artist
        {
            HTREEITEM root = TreeView_GetRoot(m_hMusicView);

            TV_ITEM tv_item;

            tv_item.hItem = root;
            tv_item.mask = TVIF_STATE;
            tv_item.stateMask = TVIS_EXPANDEDONCE;
            tv_item.state = 0;

            TreeView_GetItem(m_hMusicView, &tv_item);

            if(tv_item.state & TVIS_EXPANDEDONCE)
            {
                TV_INSERTSTRUCT insert;
                TreeData        data;

                insert.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_CHILDREN |
                             TVIF_SELECTEDIMAGE | TVIF_PARAM; 

                data.m_iLevel = 1;
                data.m_pArtist = (ArtistList*)artist;

                insert.item.pszText = (char*)artist->name.c_str();
                insert.item.cchTextMax = artist->name.length();
                insert.item.iImage = 2;
                insert.item.iSelectedImage = 2;
                insert.item.cChildren= 1;
                insert.item.lParam = (LPARAM) new TreeData(data);
                insert.hInsertAfter = TVI_LAST;
                insert.hParent = m_hMyMusicItem;

                TV_ITEM tv_item;
                HTREEITEM sibling = m_hUncatItem;

                tv_item.mask = TVIF_PARAM;

                if(tv_item.hItem = TreeView_GetNextSibling(m_hMusicView, m_hUncatItem))
                {
                    BOOL success;

                    do
                    {
                        success = TreeView_GetItem(m_hMusicView, &tv_item);

                        if(success)
                        {
                            TreeData* treedata = (TreeData*)tv_item.lParam;

                            if(treedata)
                            {
                                ArtistList* artist2 = treedata->m_pArtist;
                            
                                if(lstrcmp(artist2->name.c_str(), artist->name.c_str()) > 0)
                                {
                                    insert.hInsertAfter = sibling;
                                    break;
                                }
                            }
                        }

                        sibling = tv_item.hItem;
    
                    }while(success && 
                           (tv_item.hItem = TreeView_GetNextSibling(m_hMusicView, 
                                                                    tv_item.hItem)));
                }

                newItem = TreeView_InsertItem(m_hMusicView, &insert);
            }       
        }
    }

    //TreeView_EnsureVisible(m_hMusicView, newItem);

    // put it under "All Tracks"
    if(TreeView_GetChild(m_hMusicView, m_hAllItem))
    {
        if(m_hAllItem)
        {
            TV_INSERTSTRUCT insert;
            TreeData        data;
            MetaData        metadata;
            TV_ITEM         tv_item;

            tv_item.hItem = m_hAllItem;
            tv_item.mask = TVIF_CHILDREN;
            tv_item.cChildren = 1;

            TreeView_SetItem(m_hMusicView, &tv_item);

            insert.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_CHILDREN |
                                TVIF_SELECTEDIMAGE | TVIF_PARAM;

            data.m_iLevel = 3;
            data.m_pArtist = (ArtistList*)artist;
            data.m_pAlbum = (AlbumList*)album;

            data.m_pTrack = (PlaylistItem*)item;
            metadata = item->GetMetaData();

            if (metadata.Title() == string(" ") || 
                metadata.Title().length() == 0)
                insert.item.pszText = "Unknown";
            else    
                insert.item.pszText = (char *)(metadata.Title().c_str());

            insert.item.cchTextMax = metadata.Title().length();
            insert.item.iImage = 4;
            insert.item.iSelectedImage = 4;
            insert.item.cChildren= 0;
            insert.item.lParam = (LPARAM) new TreeData(data);
            insert.hInsertAfter = TVI_SORT;
            insert.hParent = m_hAllItem;
            TreeView_InsertItem(m_hMusicView, &insert);
        }
    }
}

void MusicBrowserUI::MusicCatalogTrackRemoved(const ArtistList* artist,
                                              const AlbumList* album,
                                              const PlaylistItem* item)
{
    HTREEITEM artistItem = NULL;
    HTREEITEM albumItem = NULL;
    HTREEITEM trackItem = NULL;
    bool uncatagorized = false;
    

    // is this in the uncatagorized section?
    if(!artist) 
    {
        trackItem = FindTrack(m_hUncatItem, item);
        uncatagorized = true;
    }
    else
    {
        artistItem = FindArtist(artist);

        if(artistItem)
        {
            albumItem = FindAlbum(artistItem, album);

            if(albumItem)
            {
                trackItem = FindTrack(albumItem, item);
            }
        }
    }

    if(trackItem)
    {
        TreeView_DeleteItem(m_hMusicView, trackItem);

        if(uncatagorized)
        {
            if(!TreeView_GetChild(m_hMusicView, m_hUncatItem))
            {
                TV_ITEM tv_item;

                tv_item.hItem = m_hUncatItem;
                tv_item.mask = TVIF_CHILDREN;
                tv_item.cChildren = 0;

                TreeView_SetItem(m_hMusicView, &tv_item);
            }
        }
    }

    if(albumItem && !TreeView_GetChild(m_hMusicView, albumItem) 
		/*!album->m_trackList->size()*/)
    {
        TreeView_DeleteItem(m_hMusicView, albumItem);
    }

    if(artistItem && !TreeView_GetChild(m_hMusicView, artistItem) 
		/*!artist->m_albumList->size()*/)
    {
        TreeView_DeleteItem(m_hMusicView, artistItem);
    }

    trackItem = FindTrack(m_hAllItem, item);

    if(trackItem)
    {
        TreeView_DeleteItem(m_hMusicView, trackItem);

        if(!TreeView_GetChild(m_hMusicView, m_hUncatItem))
        {
            TV_ITEM tv_item;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -