📄 event.cpp
字号:
}
}
}
}
int32 MusicBrowserUI::Notify(WPARAM command, NMHDR *pHdr)
{
int32 result = 0;
TOOLTIPTEXT *pToolTipText;
if (pHdr->idFrom == IDC_MUSICTREE)
{
NM_TREEVIEW* pTreeView = (NM_TREEVIEW*)pHdr;
switch(pTreeView->hdr.code)
{
case TVN_DELETEITEM:
{
TreeData* treedata = (TreeData*)pTreeView->itemOld.lParam;
if(treedata)
delete treedata;
break;
}
case TVN_BEGINDRAG:
{
TVBeginDrag(m_hMusicView, pTreeView);
break;
}
case TVN_KEYDOWN:
{
TV_KEYDOWN* pnkd = (TV_KEYDOWN*)pHdr;
if(pnkd->wVKey == VK_DELETE)
RemoveEvent();
break;
}
case TVN_BEGINLABELEDIT:
{
TV_DISPINFO* info = (TV_DISPINFO*)pHdr;
HTREEITEM item = info->item.hItem;
if(item == m_hMyMusicItem ||
item == m_hPlaylistItem ||
item == m_hAllItem ||
item == m_hUncatItem ||
item == m_hNewPlaylistItem ||
item == m_hPortableItem ||
TreeView_GetParent(m_hMusicView, item) == m_hPortableItem)
{
result = TRUE;
}
break;
}
case TVN_ENDLABELEDIT:
{
TV_DISPINFO* info = (TV_DISPINFO*)pHdr;
TV_ITEM tv_item = info->item;
// was the operation cancelled?
if(tv_item.pszText)
{
TreeData* treedata = (TreeData*)tv_item.lParam;
if(treedata)
{
if(treedata->IsTrack())
{
// just change the title for this song
UpdateTrackName(treedata->m_pTrack,
tv_item.pszText);
}
else if(treedata->IsPlaylist())
{
// just change the title for this playlist
UpdatePlaylistName(treedata->m_oPlaylistPath,
tv_item.pszText);
}
else if(treedata->IsAlbum())
{
// need to change the album for all tracks in album
UpdateAlbumName(treedata->m_pAlbum,
tv_item.pszText);
}
else if(treedata->IsArtist())
{
// need to change the artist for all albums
// and tracks by this artist
UpdateArtistName(treedata->m_pArtist,
tv_item.pszText);
}
else if(treedata->IsUncatagorized())
{
// just change the title for this song
UpdateUncatagorizedTrackName(treedata->m_pTrack,
tv_item.pszText);
}
}
result = TRUE;
}
break;
}
case TVN_ITEMEXPANDING:
{
if(!TreeView_GetChild(m_hMusicView,
pTreeView->itemNew.hItem))
{
TreeData* treedata = (TreeData*)pTreeView->itemNew.lParam;
if(pTreeView->itemNew.hItem == m_hMyMusicItem)
{
FillArtists();
}
else if(pTreeView->itemNew.hItem == m_hAllItem)
{
FillAllTracks();
}
else if(pTreeView->itemNew.hItem == m_hUncatItem)
{
FillUncatTracks();
}
else if(treedata && treedata->GetLevel() == 1)
{
FillAlbums(&pTreeView->itemNew);
}
else if(treedata && treedata->GetLevel() == 2)
{
FillTracks(&pTreeView->itemNew);
}
else if(pTreeView->itemNew.hItem == m_hPlaylistItem)
{
FillPlaylists();
}
else if(pTreeView->itemNew.hItem == m_hIceCastItem)
{
FillIceCast();
}
else if(pTreeView->itemNew.hItem == m_hWiredPlanetItem)
{
FillWiredPlanet();
}
else if(pTreeView->itemNew.hItem == m_hPortableItem)
{
FillPortables();
}
}
break;
}
case TVN_SELCHANGED:
{
UpdateButtonMenuStates();
break;
}
case NM_DBLCLK:
{
/*int32 lParam;
lParam = 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);
TreeData* treedata = (TreeData*)tv_item.lParam;
if(treedata->IsTrack())
{
PlaylistItem *item;
item = new PlaylistItem(*treedata->m_pTrack);
m_oPlm->AddItem(item, false);
}
else if(treedata->IsPlaylist())
{
m_oPlm->ReadPlaylist(treedata->m_oPlaylistPath.c_str());
}
else if(treedata->IsPortable())
{
EditPortablePlaylist(treedata->m_pPortable);
}
else if(tv_htinfo.hItem == m_hNewPlaylistItem)
{
NewPlaylist();
}
else if(tv_htinfo.hItem == m_hNewPortableItem)
{
m_context->target->AcceptEvent(new ShowPreferencesEvent(3));
}
}*/
break;
}
case NM_RCLICK:
{
HMENU menu;
HMENU subMenu;
POINT sPoint;
uint32 trackCount = 0;
uint32 playlistCount = 0;
trackCount = GetSelectedTrackCount();
playlistCount = GetSelectedPlaylistCount();
GetCursorPos(&sPoint);
menu = LoadMenu(g_hinst, MAKEINTRESOURCE(IDR_TVPOPUP));
subMenu = GetSubMenu(menu, 0);
if(m_pParent)
{
DeleteMenu(subMenu, ID_POPUP_ADDTRACK_PLAY, MF_BYCOMMAND);
}
if( IsItemSelected(m_hMyMusicItem) ||
IsItemSelected(m_hPlaylistItem) ||
IsItemSelected(m_hAllItem) ||
IsItemSelected(m_hUncatItem) ||
(IsItemSelected(m_hNewPlaylistItem) && !(playlistCount + trackCount)))
{
EnableMenuItem(subMenu,
ID_POPUP_REMOVE,
MF_BYCOMMAND|MF_GRAYED);
}
if( playlistCount > 1 ||
IsItemSelected(m_hMyMusicItem) ||
IsItemSelected(m_hPlaylistItem) ||
IsItemSelected(m_hAllItem) ||
IsItemSelected(m_hUncatItem) ||
(IsItemSelected(m_hNewPlaylistItem) && !(playlistCount + trackCount)))
{
EnableMenuItem(subMenu,
ID_POPUP_EDITINFO,
MF_BYCOMMAND|MF_GRAYED);
}
if( trackCount > 1 ||
playlistCount > 1 ||
IsItemSelected(m_hMyMusicItem) ||
IsItemSelected(m_hPlaylistItem) ||
IsItemSelected(m_hAllItem) ||
IsItemSelected(m_hUncatItem) ||
IsItemSelected(m_hNewPlaylistItem))
{
EnableMenuItem(subMenu,
ID_POPUP_RENAME,
MF_BYCOMMAND|MF_GRAYED);
}
if(trackCount == 0)
{
EnableMenuItem(subMenu,
ID_POPUP_EDITINFO,
MF_BYCOMMAND|MF_GRAYED);
if( IsItemSelected(m_hNewPlaylistItem) &&
playlistCount == 1)
{
EnableMenuItem(subMenu,
ID_POPUP_ADDTRACK,
MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(subMenu,
ID_POPUP_ADDTRACK_PLAY,
MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(subMenu,
ID_POPUP_REMOVE,
MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(subMenu,
ID_POPUP_RENAME,
MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(subMenu,
ID_POPUP_EDITPLAYLIST,
MF_BYCOMMAND|MF_GRAYED);
}
}
if(!playlistCount || trackCount)
{
DeleteMenu(subMenu, ID_POPUP_EDITPLAYLIST, MF_BYCOMMAND);
}
TrackPopupMenu(subMenu,
TPM_LEFTALIGN|TPM_LEFTBUTTON,
sPoint.x, sPoint.y,
0, m_hWnd, NULL);
DestroyMenu(menu);
break;
}
/*case ??:
{
TV_HITTESTINFO sHit;
HTREEITEM hItem;
POINT sPoint;
sHit.flags = TVHT_ONITEM;
GetCursorPos(&sPoint);
ScreenToClient(m_hWnd, &sPoint);
ClientToWindow(m_hWnd, &sPoint);
sHit.pt = sPoint;
hItem = TreeView_HitTest(m_hMusicView, &sHit);
if (hItem == m_hPlaylistItem)
SendMessage(m_hStatus, SB_SETTEXT, 0,
(LPARAM)"This tree item contains all of your playlists.");
else
if (hItem == m_hMyMusicItem)
SendMessage(m_hStatus, SB_SETTEXT, 0,
(LPARAM)"This tree item contains all of your music.");
else
if (hItem == m_hAllItem)
SendMessage(m_hStatus, SB_SETTEXT, 0,
(LPARAM)"This tree item lists all of your music tracks.");
else
if (hItem == m_hUncatItem)
SendMessage(m_hStatus, SB_SETTEXT, 0,
(LPARAM)"This tree item lists all of your uncategorized music tracks.");
else
SendMessage(m_hStatus, SB_SETTEXT, 0, (LPARAM)"");
break;
}*/
}
}
else if(pHdr->idFrom == IDC_PLAYLISTBOX)
{
NM_LISTVIEW* pListView = (NM_LISTVIEW*)pHdr;
switch(pListView->hdr.code)
{
case LVN_BEGINDRAG:
{
LVBeginDrag(m_hPlaylistView, pListView);
break;
}
case NM_RCLICK:
{
HMENU menu;
HMENU subMenu;
POINT sPoint;
uint32 trackCount = 0;
uint32 playlistCount = 0;
trackCount = GetSelectedTrackCount();
playlistCount = GetSelectedPlaylistCount();
GetCursorPos(&sPoint);
menu = LoadMenu(g_hinst, MAKEINTRESOURCE(IDR_LVPOPUP));
subMenu = GetSubMenu(menu, 0);
if(m_pParent)
{
DeleteMenu(subMenu, ID_POPUP_PLAY, MF_BYCOMMAND);
}
// Can we move items up and down?
uint32 count = ListView_GetItemCount(m_hPlaylistView);
uint32 selected = ListView_GetSelectedCount(m_hPlaylistView);
if(count)
{
uint32 state;
EnableMenuItem(subMenu, ID_POPUP_PLAY, MF_BYCOMMAND|
(selected > 1) ? MF_GRAYED : MF_ENABLED );
state = ListView_GetItemState(m_hPlaylistView,
count - 1,
LVIS_SELECTED);
EnableMenuItem(subMenu, ID_POPUP_MOVEDOWN, MF_BYCOMMAND|
(state & LVIS_SELECTED) ? MF_GRAYED : MF_ENABLED );
state = ListView_GetItemState(m_hPlaylistView,
0,
LVIS_SELECTED);
EnableMenuItem(subMenu, ID_POPUP_MOVEUP, MF_BYCOMMAND|
(state & LVIS_SELECTED) ? MF_GRAYED : MF_ENABLED );
}
else
{
EnableMenuItem(subMenu, ID_POPUP_PLAY, MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(subMenu, ID_POPUP_MOVEUP, MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(subMenu, ID_POPUP_MOVEDOWN, MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(subMenu, ID_POPUP_REMOVE, MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(subMenu, ID_POPUP_EDITINFO, MF_BYCOMMAND|MF_GRAYED);
}
TrackPopupMenu(subMenu,
TPM_LEFTALIGN, sPoint.x, sPoint.y,
0, m_hWnd, NULL);
DestroyMenu(menu);
break;
}
case LVN_ITEMCHANGED:
{
UpdateButtonMenuStates();
break;
}
case NM_DBLCLK:
{
// only do this for the root browser
if(!m_pParent)
{
m_playerEQ->AcceptEvent(new Event(CMD_Stop));
m_oPlm->SetCurrentIndex(pListView->iItem);
m_playerEQ->AcceptEvent(new Event(CMD_Play));
}
break;
}
case LVN_COLUMNCLICK:
{
int column = pListView->iSubItem;
switch(column)
{
case 1:
SendMessage(m_hWnd, WM_COMMAND, ID_SORT_TITLE, 0);
break;
case 2:
SendMessage(m_hWnd, WM_COMMAND, ID_SORT_ARTIST, 0);
break;
case 3:
SendMessage(m_hWnd, WM_COMMAND, ID_SORT_ALBUM, 0);
break;
case 4:
SendMessage(m_hWnd, WM_COMMAND, ID_SORT_LENGTH, 0);
break;
}
break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -