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

📄 musictree.cpp

📁 vc++ mp3 源码下载 使用vc写的mp3 播放器
💻 CPP
📖 第 1 页 / 共 4 页
字号:
/*____________________________________________________________________________

        FreeAmp - The Free MP3 Player

        Portions Copyright (C) 1999 EMusic.com

        This program is free software; you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation; either version 2 of the License, or
        (at your option) any later version.

        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.

        You should have received a copy of the GNU General Public License
        along with this program; if not, write to the Free Software
        Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

        $Id: MusicTree.cpp,v 1.44 2000/01/20 00:33:14 elrod Exp $
____________________________________________________________________________*/

#define STRICT
#include <windows.h>
#include <windowsx.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <direct.h>

#include <set>
#include <string>
#include <functional>
#include <algorithm>

using namespace std;

#include "config.h"
#include "utility.h"
#include "resource.h"
#include "Win32MusicBrowser.h"
#include "DropSource.h"
#include "DropObject.h"
#include "registrar.h"
#include "FooCast.h"

char* kMyMusic = "My Music";
char* kAllTracks = "All Tracks";
char* kUncatagorized = "Uncategorized Tracks";
char* kPlaylists = "My Playlists";
char* kStreams = "My Favorite Streams";
char* kPortables = "My Portables";
char* kNewPlaylist = "Create a New Playlist...";
char* kNewPortable = "Setup a Portable Player...";
char* kWiredPlanet = "Wired Planet";
char* kShoutCast = "ShoutCast";
char* kIceCast = "IceCast";

void MusicBrowserUI::InitTree(void)
{                          
    TV_INSERTSTRUCT insert;
        
    insert.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_CHILDREN |
                 TVIF_SELECTEDIMAGE | TVIF_PARAM; 
        
    insert.item.pszText = kMyMusic;
    insert.item.cchTextMax = lstrlen(insert.item.pszText);
    insert.item.iImage = 0;
    insert.item.iSelectedImage = 0;
    insert.item.cChildren= 1;
    insert.item.lParam = NULL;            
    insert.hInsertAfter = TVI_FIRST;
    insert.hParent = NULL;
    m_hMyMusicItem = TreeView_InsertItem(m_hMusicView, &insert);

    insert.item.pszText = kPlaylists;
    insert.item.cchTextMax = lstrlen(insert.item.pszText);
    insert.item.iImage = 1;
    insert.item.iSelectedImage = 1;
    insert.item.cChildren= 1;
    insert.item.lParam = NULL;
    insert.hInsertAfter = TVI_LAST;
    insert.hParent = NULL;
    m_hPlaylistItem = TreeView_InsertItem(m_hMusicView, &insert);

	/*

    HTREEITEM temp;

    insert.item.pszText = "Streams";
    insert.item.cchTextMax = lstrlen(insert.item.pszText);
    insert.item.iImage = 8;
    insert.item.iSelectedImage = 8;
    insert.item.cChildren= 1;
    insert.item.lParam = NULL;
    insert.hInsertAfter = TVI_LAST;
    insert.hParent = NULL;
    temp = TreeView_InsertItem(m_hMusicView, &insert);

    insert.item.pszText = kWiredPlanet;
    insert.item.cchTextMax = lstrlen(insert.item.pszText);
    insert.item.iImage = 9;
    insert.item.iSelectedImage = 9;
    insert.item.cChildren= 1;
    insert.item.lParam = NULL;
    insert.hInsertAfter = TVI_LAST;
    insert.hParent = temp;
    m_hWiredPlanetItem = TreeView_InsertItem(m_hMusicView, &insert);

    insert.item.pszText = kIceCast;
    insert.item.cchTextMax = lstrlen(insert.item.pszText);
    insert.item.iImage = 10;
    insert.item.iSelectedImage = 10;
    insert.item.cChildren= 1;
    insert.item.lParam = NULL;
    insert.hInsertAfter = TVI_LAST;
    insert.hParent = temp;
    m_hIceCastItem = TreeView_InsertItem(m_hMusicView, &insert);

    
    insert.item.pszText = kShoutCast;
    insert.item.cchTextMax = lstrlen(insert.item.pszText);
    insert.item.iImage = 11;
    insert.item.iSelectedImage = 11;
    insert.item.cChildren= 1;
    insert.item.lParam = NULL;
    insert.hInsertAfter = TVI_LAST;
    insert.hParent = NULL;
    m_hShoutCastItem = TreeView_InsertItem(m_hMusicView, &insert);
    */

    /*
    insert.item.pszText = kPortables;
    insert.item.cchTextMax = lstrlen(insert.item.pszText);
    insert.item.iImage = 7;
    insert.item.iSelectedImage = 7;
    insert.item.cChildren= 1;
    insert.item.lParam = NULL;
    insert.hInsertAfter = TVI_LAST;
    insert.hParent = NULL;
    m_hPortableItem = TreeView_InsertItem(m_hMusicView, &insert);
    */
}

void MusicBrowserUI::FillArtists(void)
{
    TV_INSERTSTRUCT                     insert;
    const vector<ArtistList*>*          artistList;
    vector<ArtistList*>::const_iterator artist;
    TreeData                            data;

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

    data.m_iLevel = 1;
    artistList = m_context->catalog->GetMusicList();
    for(artist = artistList->begin(); 
        artist != artistList->end(); 
        artist++)
    {
       data.m_pArtist = (*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;
       TreeView_InsertItem(m_hMusicView, &insert);
    }    

    TreeView_SortChildren(m_hMusicView, m_hMyMusicItem, 0);

    insert.item.pszText = kUncatagorized;
    insert.item.cchTextMax = lstrlen(insert.item.pszText);
    insert.item.iImage = 6;
    insert.item.iSelectedImage = 6;
    insert.item.cChildren= 1;
    insert.item.lParam = NULL;       
    insert.hInsertAfter = TVI_FIRST;
    insert.hParent = m_hMyMusicItem;
    m_hUncatItem = TreeView_InsertItem(m_hMusicView, &insert);

    insert.item.pszText = kAllTracks;
    insert.item.cchTextMax = lstrlen(insert.item.pszText);
    insert.item.iImage = 5;
    insert.item.iSelectedImage = 5;
    insert.item.cChildren= 1;
    insert.item.lParam = NULL;
    insert.hInsertAfter = TVI_FIRST;
    insert.hParent = m_hMyMusicItem;
    m_hAllItem = TreeView_InsertItem(m_hMusicView, &insert);
}

void MusicBrowserUI::FillAlbums(TV_ITEM *pItem)
{
    TV_INSERTSTRUCT                insert;
    vector<AlbumList*>::iterator   album;
    TreeData                       data;

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

    data.m_iLevel = 2;
    data.m_pArtist = ((TreeData*)pItem->lParam)->m_pArtist;

    for(album = data.m_pArtist->m_albumList->begin(); 
        album != data.m_pArtist->m_albumList->end(); 
        album++)
    {
        data.m_pAlbum = (*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_LAST;
        insert.hParent = pItem->hItem;
        TreeView_InsertItem(m_hMusicView, &insert);
    }

    TreeView_SortChildren(m_hMusicView, pItem->hItem, 0);
}

void MusicBrowserUI::FillTracks(TV_ITEM *pItem)
{
    TV_INSERTSTRUCT                 insert;
    vector<PlaylistItem*>::iterator track;
    TreeData                        data;
    MetaData                        metadata;
    //bool                          needToSort = false;

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

    data.m_iLevel = 3;
    data.m_pArtist = ((TreeData*)pItem->lParam)->m_pArtist;
    data.m_pAlbum = ((TreeData*)pItem->lParam)->m_pAlbum;

    stable_sort(data.m_pAlbum->m_trackList->begin(), 
                data.m_pAlbum->m_trackList->end(), 
                TrackSort());

    for(track = data.m_pAlbum->m_trackList->begin(); 
        track != data.m_pAlbum->m_trackList->end(); 
        track++)
    {
        data.m_pTrack = (*track);

        metadata = (*track)->GetMetaData();

        if(metadata.Track() == 0)
            insert.hInsertAfter = TVI_SORT;
        else
            insert.hInsertAfter = TVI_LAST;

        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_LAST;
        insert.hParent = pItem->hItem;
        TreeView_InsertItem(m_hMusicView, &insert);
    }

    //if(needToSort)
        //TreeView_SortChildren(m_hMusicView, pItem->hItem, 0);
}

void MusicBrowserUI::FillAllTracks(void)
{
    TV_INSERTSTRUCT                     insert;
    const vector<ArtistList*>*          artistList;
    vector<ArtistList*>::const_iterator artist;        
    TreeData                            data;
    MetaData                            metadata;

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

    data.m_iLevel = 3;
    artistList = m_context->catalog->GetMusicList();

    for(artist = artistList->begin(); 
        artist != artistList->end(); 
        artist++)
    {
        vector<AlbumList*>::iterator album;

        for(album = (*artist)->m_albumList->begin();
            album != (*artist)->m_albumList->end();
            album++)
        {
            vector<PlaylistItem*>::iterator track;

            for(track = (*album)->m_trackList->begin();
                track != (*album)->m_trackList->end();
                track++)
            {
                data.m_pArtist = (*artist);
                data.m_pAlbum = (*album);
                data.m_pTrack = (*track);
            
                metadata = (*track)->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_LAST;
                insert.hParent = m_hAllItem;
                TreeView_InsertItem(m_hMusicView, &insert);
            }
        }
    }       
    
    data.m_iLevel = 3;
    data.m_pArtist = NULL;
    data.m_pAlbum = NULL;

    const vector<PlaylistItem*>* trackList;
    vector<PlaylistItem*>::const_iterator track;
    
    trackList = m_context->catalog->GetUnsortedMusic();

    for(track = trackList->begin(); 
        track != trackList->end(); 
        track++)
    {
        data.m_pTrack = (*track);

        metadata = (*track)->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_LAST;
        insert.hParent = m_hAllItem;
        TreeView_InsertItem(m_hMusicView, &insert);
    }

    TreeView_SortChildren(m_hMusicView, m_hAllItem, 0);
}

void MusicBrowserUI::FillUncatTracks(void)
{
    TV_INSERTSTRUCT                         insert;
    const vector<PlaylistItem*>*            trackList;
    vector<PlaylistItem *>::const_iterator  track;
    TreeData                                data;
    MetaData                                metadata;

    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;
    
    trackList = m_context->catalog->GetUnsortedMusic();

    for(track = trackList->begin(); 
        track != trackList->end(); 
        track++)
    {
        data.m_pTrack = (*track);
        metadata = (*track)->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_LAST;
        insert.hParent = m_hUncatItem;
        TreeView_InsertItem(m_hMusicView, &insert);
    }

    TreeView_SortChildren(m_hMusicView, m_hUncatItem, 0);
}

void MusicBrowserUI::FillPlaylists(void)
{
    TV_INSERTSTRUCT                 insert;
    vector<string>::const_iterator  url;
    const vector<string>*           playlists;
    char                            szBase[MAX_PATH];
    TreeData                        data;

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

    playlists = m_context->catalog->GetPlaylists(); 

    data.m_iLevel = 1;

    for(url = playlists->begin(); 
        url != playlists->end(); 
        url++)
    {
        _splitpath((char *)(*url).c_str(), NULL, NULL, szBase, NULL);   
        data.m_oPlaylistName = string(szBase);
        data.m_oPlaylistPath = *url;

        insert.item.pszText = szBase;
        insert.item.cchTextMax = strlen(szBase);
        insert.item.iImage = 1;
        insert.item.iSelectedImage = 1;
        insert.item.cChildren= 0;
        insert.item.lParam = (LPARAM) new TreeData(data);
        insert.hInsertAfter = TVI_SORT;
        insert.hParent = m_hPlaylistItem;
        TreeView_InsertItem(m_hMusicView, &insert);
    }
    
    insert.item.pszText = kNewPlaylist;
    insert.item.cchTextMax = strlen(kNewPlaylist);
    insert.item.iImage = 1;
    insert.item.iSelectedImage = 1;
    insert.item.cChildren= 0;
    insert.item.lParam = NULL;
    insert.hInsertAfter = TVI_FIRST;
    insert.hParent = m_hPlaylistItem;
    m_hNewPlaylistItem = TreeView_InsertItem(m_hMusicView, &insert);
}

void MusicBrowserUI::FillWiredPlanet()
{
    TV_INSERTSTRUCT insert;
    TreeData        data;

    char* stations[] = {
        "Alpha 2.0", // (Downtempo / Trip-Hop)",
        "Axis", // (Jazz in its many forms)",
        "Nova Mundi", // (New Age / Ambient)",
        "Oscillations", // (Electronic / Trance / House)",
        "Red Shift", // (Drum \'n Bass / Jungle)",
        "Radio TMBG" // (They Might Be Giants)"
    };

    char* urls[] = {

⌨️ 快捷键说明

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