📄 musictree.cpp
字号:
"http://209.209.9.15:8001/alph",
"http://209.209.9.15:8001/axis",
"http://209.209.9.15:8001/nova",
"http://209.209.9.15:8001/oscl",
"http://209.209.9.15:8001/reds",
"http://209.209.9.15:8001/tmbg"
};
uint32 numStations = (sizeof(stations)/sizeof(char*));
data.m_iLevel = 1;
insert.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_CHILDREN |
TVIF_SELECTEDIMAGE | TVIF_PARAM;
for(uint32 i = 0; i < numStations; i++)
{
PlaylistItem* stream = new PlaylistItem;
MetaData metadata;
stream->SetURL(urls[i]);
metadata.SetTitle(stations[i]);
metadata.SetArtist("Wired Planet");
stream->SetMetaData(&metadata);
data.m_pStream = stream;
insert.item.pszText = stations[i];
insert.item.cchTextMax = strlen(insert.item.pszText);
insert.item.iImage = 8;
insert.item.iSelectedImage = 8;
insert.item.cChildren= 0;
insert.item.lParam = (LPARAM) new TreeData(data);;
insert.hInsertAfter = TVI_SORT;
insert.hParent = m_hWiredPlanetItem;
TreeView_InsertItem(m_hMusicView, &insert);
}
}
void MusicBrowserUI::FillIceCast()
{
FooCast* fooCast = new FooCast(m_hMusicView, m_hIceCastItem);
}
void MusicBrowserUI::FillPortables(void)
{
TV_INSERTSTRUCT insert;
char* buffer = NULL;
uint32 size = 0;
set<string> portablePlayers;
TreeData data;
uint32 count = 0;
HTREEITEM item;
// remove old ones if they exist
while(item = TreeView_GetChild(m_hMusicView, m_hPortableItem))
{
TreeView_DeleteItem(m_hMusicView, item);
}
insert.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_CHILDREN |
TVIF_SELECTEDIMAGE | TVIF_PARAM;
if(kError_BufferTooSmall == m_context->prefs->GetUsersPortablePlayers(buffer, &size))
{
buffer = (char*)malloc(size);
if(buffer)
{
m_context->prefs->GetUsersPortablePlayers(buffer, &size);
char* cp = buffer;
char* name = cp;
while(cp = strchr(cp, ';'))
{
*cp = 0x00;
portablePlayers.insert(string(name));
cp++;
name = cp;
}
if(*name)
{
portablePlayers.insert(string(name));
}
free(buffer);
}
}
uint32 i = 0;
DeviceInfo device;
while(IsntError(m_oPlm->GetSupportedPortables(&device, i++)))
{
if( portablePlayers.end() !=
portablePlayers.find(string(device.GetPluginName())) )
{
string displayString;
displayString = device.GetManufacturer();
displayString += " ";
displayString += device.GetDevice();
if(displayString.size())
{
insert.item.pszText = (char*)displayString.c_str();
}
else
{
insert.item.pszText = (char*)device.GetPluginName();
}
data.m_pPortable = new DeviceInfo(device);
insert.item.cchTextMax = strlen(insert.item.pszText);
insert.item.iImage = 7;
insert.item.iSelectedImage = 7;
insert.item.cChildren= 0;
insert.item.lParam = (LPARAM) new TreeData(data);
insert.hInsertAfter = TVI_SORT;
insert.hParent = m_hPortableItem;
TreeView_InsertItem(m_hMusicView, &insert);
count++;
}
}
if(!count)
{
insert.item.pszText = kNewPortable;
insert.item.cchTextMax = strlen(insert.item.pszText);
insert.item.iImage = 7;
insert.item.iSelectedImage = 7;
insert.item.cChildren= 0;
insert.item.lParam = NULL;
insert.hInsertAfter = TVI_FIRST;
insert.hParent = m_hPortableItem;
m_hNewPortableItem = TreeView_InsertItem(m_hMusicView, &insert);
}
}
int32 MusicBrowserUI::GetCurrentItemFromMousePos()
{
TV_ITEM tv_item;
TV_HITTESTINFO tv_htinfo;
GetCursorPos(&tv_htinfo.pt);
ScreenToClient(m_hMusicView, &tv_htinfo.pt);
if(TreeView_HitTest(m_hMusicView, &tv_htinfo))
{
tv_item.hItem = TreeView_GetSelection(m_hMusicView);
tv_item.mask = TVIF_PARAM | TVIF_HANDLE;
TreeView_GetItem(m_hMusicView, &tv_item);
return tv_item.lParam;
}
return -1;
}
HTREEITEM MusicBrowserUI::FindArtist(const ArtistList* artist)
{
HTREEITEM result = NULL;
HWND hwnd = m_hMusicView;
TV_ITEM tv_item;
tv_item.hItem = m_hUncatItem;
tv_item.mask = TVIF_PARAM;
// this should retrieve the first artist
tv_item.hItem = TreeView_GetNextSibling(hwnd, tv_item.hItem);
BOOL success;
do
{
success = TreeView_GetItem(hwnd, &tv_item);
if(success)
{
TreeData* treedata = (TreeData*)tv_item.lParam;
if(treedata && artist == treedata->m_pArtist)
{
result = tv_item.hItem;
break;
}
}
}while(success && (tv_item.hItem = TreeView_GetNextSibling(hwnd, tv_item.hItem)));
return result;
}
HTREEITEM MusicBrowserUI::FindAlbum(HTREEITEM artistItem, const AlbumList* album)
{
HTREEITEM result = NULL;
HWND hwnd = m_hMusicView;
TV_ITEM tv_item;
tv_item.hItem = NULL;
tv_item.mask = TVIF_PARAM;
// this should retrieve the first artist
tv_item.hItem = TreeView_GetChild(m_hMusicView, artistItem);
BOOL success;
do
{
success = TreeView_GetItem(hwnd, &tv_item);
if(success)
{
TreeData* treedata = (TreeData*)tv_item.lParam;
if(treedata && album == treedata->m_pAlbum)
{
result = tv_item.hItem;
break;
}
}
}while(success && (tv_item.hItem = TreeView_GetNextSibling(hwnd, tv_item.hItem)));
return result;
}
HTREEITEM MusicBrowserUI::FindTrack(HTREEITEM albumItem, const PlaylistItem* track)
{
HTREEITEM result = NULL;
HWND hwnd = m_hMusicView;
TV_ITEM tv_item;
tv_item.hItem = NULL;
tv_item.mask = TVIF_PARAM;
// this should retrieve the first artist
tv_item.hItem = TreeView_GetChild(m_hMusicView, albumItem);
BOOL success;
do
{
success = TreeView_GetItem(hwnd, &tv_item);
if(success)
{
TreeData* treedata = (TreeData*)tv_item.lParam;
if(treedata && track == treedata->m_pTrack)
{
result = tv_item.hItem;
break;
}
}
}while(success && (tv_item.hItem = TreeView_GetNextSibling(hwnd, tv_item.hItem)));
return result;
}
HTREEITEM MusicBrowserUI::FindPlaylist(const string playlist)
{
HTREEITEM result = NULL;
HWND hwnd = m_hMusicView;
TV_ITEM tv_item;
tv_item.hItem = NULL;
tv_item.mask = TVIF_PARAM;
// this should retrieve the first playlist
tv_item.hItem = TreeView_GetChild(m_hMusicView, m_hPlaylistItem);
// but we want the second one... not the magic "Create New Playlist..."
tv_item.hItem = TreeView_GetNextSibling(m_hMusicView, tv_item.hItem);
BOOL success;
do
{
success = TreeView_GetItem(hwnd, &tv_item);
if(success)
{
TreeData* treedata = (TreeData*)tv_item.lParam;
if(treedata && playlist == treedata->m_oPlaylistPath)
{
result = tv_item.hItem;
break;
}
}
}while(success && (tv_item.hItem = TreeView_GetNextSibling(hwnd, tv_item.hItem)));
return result;
}
void MusicBrowserUI::MusicCatalogCleared()
{
TreeView_DeleteItem(m_hMusicView, m_hMyMusicItem);
TreeView_DeleteItem(m_hMusicView, m_hPlaylistItem);
InitTree();
}
void MusicBrowserUI::MusicCatalogTrackChanged(const ArtistList *oldArtist,
const ArtistList *newArtist,
const AlbumList *oldAlbum,
const AlbumList *newAlbum,
const PlaylistItem *oldItem,
const PlaylistItem *newItem)
{
HTREEITEM artistItem = NULL;
HTREEITEM albumItem = NULL;
HTREEITEM trackItem = NULL;
UINT artistState = 0;
UINT albumState = 0;
// is this in the uncatagorized section?
if(!oldArtist)
{
trackItem = FindTrack(m_hUncatItem, oldItem);
}
else
{
artistItem = FindArtist(oldArtist);
if(artistItem)
{
TV_ITEM tv_item;
tv_item.hItem = artistItem;
tv_item.mask = TVIF_STATE;
tv_item.stateMask = TVIS_SELECTED|TVIS_EXPANDED;
tv_item.state = 0;
TreeView_GetItem(m_hMusicView, &tv_item);
artistState = tv_item.state;
albumItem = FindAlbum(artistItem, oldAlbum);
if(albumItem)
{
tv_item.hItem = albumItem;
tv_item.mask = TVIF_STATE;
tv_item.stateMask = TVIS_SELECTED|TVIS_EXPANDED;
tv_item.state = 0;
TreeView_GetItem(m_hMusicView, &tv_item);
albumState = tv_item.state;
//trackItem = FindTrack(albumItem, oldItem);
}
}
}
MusicCatalogTrackRemoved(oldArtist, oldAlbum, oldItem);
MusicCatalogTrackAdded(newArtist,newAlbum, newItem);
// 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::MusicCatalogPlaylistRemoved(string item)
{
HTREEITEM playlistItem = NULL;
playlistItem = FindPlaylist(item);
if(playlistItem)
{
TreeView_DeleteItem(m_hMusicView, playlistItem);
}
}
void MusicBrowserUI::MusicCatalogPlaylistAdded(string item)
{
// put it under playlists
if(TreeView_GetChild(m_hMusicView, m_hPlaylistItem))
{
TV_INSERTSTRUCT insert;
TreeData data;
MetaData metadata;
char szBase[MAX_PATH];
_splitpath((char *)item.c_str(), NULL, NULL, szBase, NULL);
insert.item.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_CHILDREN |
TVIF_SELECTEDIMAGE | TVIF_PARAM;
data.m_iLevel = 1;
data.m_oPlaylistName = string(szBase);
data.m_oPlaylistPath = item;
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);
TreeView_DeleteItem(m_hMusicView, m_hNewPlaylistItem);
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::MusicCatalogTrackRemoved(const ArtistList* artist,
const AlbumList* album,
const PlaylistItem* item)
{
HTREEITEM artistItem = NULL;
HTREEITEM albumItem = NULL;
HTREEITEM trackItem = NULL;
// is this in the uncatagorized section?
if(!artist)
{
trackItem = FindTrack(m_hUncatItem, item);
}
else
{
artistItem = FindArtist(artist);
if(artistItem)
{
albumItem = FindAlbum(artistItem, album);
if(albumItem)
{
trackItem = FindTrack(albumItem, item);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -