📄 downloadlistctrl.cpp
字号:
LVFINDINFO find;
find.flags = LVFI_PARAM;
find.lParam = (LPARAM)delItem;
sint16 result = FindItem(&find);
if(result != (-1)){
DeleteItem(result);
}
// finally it could be delete
delete delItem;
bResult = true;
}
else {
it++;
}
}
ShowFilesCount();
return bResult;
}
void CDownloadListCtrl::UpdateItem(void* toupdate)
{
if (!theApp.emuledlg->IsRunning())
return;
// Retrieve all entries matching the source
std::pair<ListItems::const_iterator, ListItems::const_iterator> rangeIt = m_ListItems.equal_range(toupdate);
for(ListItems::const_iterator it = rangeIt.first; it != rangeIt.second; it++){
CtrlItem_Struct* updateItem = it->second;
// Find entry in CListCtrl and update object
LVFINDINFO find;
find.flags = LVFI_PARAM;
find.lParam = (LPARAM)updateItem;
sint16 result = FindItem(&find);
if (result != -1){
updateItem->dwUpdated = 0;
Update(result);
}
}
}
void CDownloadListCtrl::DrawFileItem(CDC *dc, int nColumn, LPCRECT lpRect, CtrlItem_Struct *lpCtrlItem)
{
if(lpRect->left < lpRect->right)
{
CString buffer;
CPartFile *lpPartFile = (CPartFile*)lpCtrlItem->value;
switch(nColumn)
{
case 0:{ // file name
if (thePrefs.GetCatColor(lpPartFile->GetCategory()) > 0)
dc->SetTextColor(thePrefs.GetCatColor(lpPartFile->GetCategory()));
CRect rcDraw(lpRect);
int iImage = theApp.GetFileTypeSystemImageIdx(lpPartFile->GetFileName());
if (theApp.GetSystemImageList() != NULL)
::ImageList_Draw(theApp.GetSystemImageList(), iImage, dc->GetSafeHdc(), rcDraw.left, rcDraw.top, ILD_NORMAL|ILD_TRANSPARENT);
rcDraw.left += theApp.GetSmallSytemIconSize().cx;
if (thePrefs.ShowRatingIndicator() && (lpPartFile->HasComment() || lpPartFile->HasRating())){
m_ImageList.Draw(dc, (lpPartFile->HasRating() && lpPartFile->HasBadRating()) ? 10 : 9, rcDraw.TopLeft(), ILD_NORMAL);
rcDraw.left += 8;
}
rcDraw.left += 3;
dc->DrawText(lpPartFile->GetFileName(), lpPartFile->GetFileName().GetLength(), &rcDraw, DLC_DT_TEXT);
break;
}
case 1: // size
buffer = CastItoXBytes(lpPartFile->GetFileSize(), false, false);
dc->DrawText(buffer,buffer.GetLength(),const_cast<LPRECT>(lpRect), DLC_DT_TEXT | DT_RIGHT);
break;
case 2: // transfered
buffer = CastItoXBytes(lpPartFile->GetTransfered(), false, false);
dc->DrawText(buffer,buffer.GetLength(),const_cast<LPRECT>(lpRect), DLC_DT_TEXT | DT_RIGHT);
break;
case 3: // transfered complete
buffer = CastItoXBytes(lpPartFile->GetCompletedSize(), false, false);
dc->DrawText(buffer,buffer.GetLength(),const_cast<LPRECT>(lpRect), DLC_DT_TEXT | DT_RIGHT);
break;
case 4: // speed
if (lpPartFile->GetTransferingSrcCount())
buffer.Format(_T("%s"), CastItoXBytes(lpPartFile->GetDatarate(), false, true));
dc->DrawText(buffer,buffer.GetLength(),const_cast<LPRECT>(lpRect), DLC_DT_TEXT | DT_RIGHT);
break;
case 5: // progress
{
CRect rcDraw(*lpRect);
rcDraw.bottom--;
rcDraw.top++;
// added
int iWidth = rcDraw.Width();
int iHeight = rcDraw.Height();
if (lpCtrlItem->status == (HBITMAP)NULL)
VERIFY(lpCtrlItem->status.CreateBitmap(1, 1, 1, 8, NULL));
CDC cdcStatus;
HGDIOBJ hOldBitmap;
cdcStatus.CreateCompatibleDC(dc);
int cx = lpCtrlItem->status.GetBitmapDimension().cx;
DWORD dwTicks = GetTickCount();
if(lpCtrlItem->dwUpdated + DLC_BARUPDATE < dwTicks || cx != iWidth || !lpCtrlItem->dwUpdated) {
lpCtrlItem->status.DeleteObject();
lpCtrlItem->status.CreateCompatibleBitmap(dc, iWidth, iHeight);
lpCtrlItem->status.SetBitmapDimension(iWidth, iHeight);
hOldBitmap = cdcStatus.SelectObject(lpCtrlItem->status);
RECT rec_status;
rec_status.left = 0;
rec_status.top = 0;
rec_status.bottom = iHeight;
rec_status.right = iWidth;
lpPartFile->DrawStatusBar(&cdcStatus, &rec_status, thePrefs.UseFlatBar());
lpCtrlItem->dwUpdated = dwTicks + (rand() % 128);
} else
hOldBitmap = cdcStatus.SelectObject(lpCtrlItem->status);
dc->BitBlt(rcDraw.left, rcDraw.top, iWidth, iHeight, &cdcStatus, 0, 0, SRCCOPY);
cdcStatus.SelectObject(hOldBitmap);
//added end
if (thePrefs.GetUseDwlPercentage()) {
// HoaX_69: BEGIN Display percent in progress bar
COLORREF oldclr = dc->SetTextColor(RGB(255,255,255));
int iOMode = dc->SetBkMode(TRANSPARENT);
buffer.Format(_T("%.1f%%"), lpPartFile->GetPercentCompleted());
dc->DrawText(buffer, buffer.GetLength(), &rcDraw, (DLC_DT_TEXT & ~DT_LEFT) | DT_CENTER);
dc->SetBkMode(iOMode);
dc->SetTextColor(oldclr);
// HoaX_69: END
}
}
break;
case 6: // sources
{
uint16 sc = lpPartFile->GetSourceCount();
uint16 ncsc = lpPartFile->GetNotCurrentSourcesCount();
// ZZ:DownloadManager -->
if(!(lpPartFile->GetStatus() == PS_PAUSED && sc == 0) && lpPartFile->GetStatus() != PS_COMPLETE) {
buffer.Format(_T("%i"), sc-ncsc);
if(ncsc>0) buffer.AppendFormat(_T("/%i"), sc);
if(thePrefs.IsExtControlsEnabled() && lpPartFile->GetSrcA4AFCount() > 0) buffer.AppendFormat(_T("+%i"), lpPartFile->GetSrcA4AFCount());
if(lpPartFile->GetTransferingSrcCount() > 0) buffer.AppendFormat(_T(" (%i)"), lpPartFile->GetTransferingSrcCount());
} else {
buffer = _T("");
}
// <-- ZZ:DownloadManager
dc->DrawText(buffer,buffer.GetLength(),const_cast<LPRECT>(lpRect), DLC_DT_TEXT | DT_RIGHT);
}
break;
case 7: // prio
switch(lpPartFile->GetDownPriority()) {
case PR_LOW:
if( lpPartFile->IsAutoDownPriority() )
dc->DrawText(GetResString(IDS_PRIOAUTOLOW),GetResString(IDS_PRIOAUTOLOW).GetLength(),const_cast<LPRECT>(lpRect), DLC_DT_TEXT);
else
dc->DrawText(GetResString(IDS_PRIOLOW),GetResString(IDS_PRIOLOW).GetLength(),const_cast<LPRECT>(lpRect), DLC_DT_TEXT);
break;
case PR_NORMAL:
if( lpPartFile->IsAutoDownPriority() )
dc->DrawText(GetResString(IDS_PRIOAUTONORMAL),GetResString(IDS_PRIOAUTONORMAL).GetLength(),const_cast<LPRECT>(lpRect), DLC_DT_TEXT);
else
dc->DrawText(GetResString(IDS_PRIONORMAL),GetResString(IDS_PRIONORMAL).GetLength(),const_cast<LPRECT>(lpRect), DLC_DT_TEXT);
break;
case PR_HIGH:
if( lpPartFile->IsAutoDownPriority() )
dc->DrawText(GetResString(IDS_PRIOAUTOHIGH),GetResString(IDS_PRIOAUTOHIGH).GetLength(),const_cast<LPRECT>(lpRect), DLC_DT_TEXT);
else
dc->DrawText(GetResString(IDS_PRIOHIGH),GetResString(IDS_PRIOHIGH).GetLength(),const_cast<LPRECT>(lpRect), DLC_DT_TEXT);
break;
}
break;
case 8: // <<--9/21/02
buffer = lpPartFile->getPartfileStatus();
dc->DrawText(buffer,buffer.GetLength(),const_cast<LPRECT>(lpRect), DLC_DT_TEXT);
break;
case 9: // remaining time & size
{
if (lpPartFile->GetStatus()!=PS_COMPLETING && lpPartFile->GetStatus()!=PS_COMPLETE ){
// time
sint32 restTime;
if (!thePrefs.UseSimpleTimeRemainingComputation())
restTime = lpPartFile->getTimeRemaining();
else
restTime = lpPartFile->getTimeRemainingSimple();
buffer.Format(_T("%s (%s)"), CastSecondsToHM(restTime), CastItoXBytes((lpPartFile->GetFileSize() - lpPartFile->GetCompletedSize()), false, false));
}
dc->DrawText(buffer,buffer.GetLength(),const_cast<LPRECT>(lpRect), DLC_DT_TEXT);
}
break;
case 10: // last seen complete
{
CString tempbuffer;
if (lpPartFile->m_nCompleteSourcesCountLo == 0)
{
tempbuffer.Format(_T("< %u"), lpPartFile->m_nCompleteSourcesCountHi);
}
else if (lpPartFile->m_nCompleteSourcesCountLo == lpPartFile->m_nCompleteSourcesCountHi)
{
tempbuffer.Format(_T("%u"), lpPartFile->m_nCompleteSourcesCountLo);
}
else
{
tempbuffer.Format(_T("%u - %u"), lpPartFile->m_nCompleteSourcesCountLo, lpPartFile->m_nCompleteSourcesCountHi);
}
if (lpPartFile->lastseencomplete==NULL)
buffer.Format(_T("%s (%s)"),GetResString(IDS_UNKNOWN),tempbuffer);
else
buffer.Format(_T("%s (%s)"),lpPartFile->lastseencomplete.Format( thePrefs.GetDateTimeFormat()),tempbuffer);
dc->DrawText(buffer,buffer.GetLength(),const_cast<LPRECT>(lpRect), DLC_DT_TEXT);
}
break;
case 11: // last receive
if (!IsColumnHidden(11)) {
if(lpPartFile->GetFileDate()!=NULL)
buffer=lpPartFile->GetCFileDate().Format( thePrefs.GetDateTimeFormat());
dc->DrawText(buffer,buffer.GetLength(),const_cast<LPRECT>(lpRect), DLC_DT_TEXT);
}
break;
case 12: // cat
if (!IsColumnHidden(12)) {
buffer=(lpPartFile->GetCategory()!=0)?
thePrefs.GetCategory(lpPartFile->GetCategory())->title:GetResString(IDS_ALL);
dc->DrawText(buffer,buffer.GetLength(),const_cast<LPRECT>(lpRect), DLC_DT_TEXT);
}
break;
}
}
}
void CDownloadListCtrl::DrawSourceItem(CDC *dc, int nColumn, LPCRECT lpRect, CtrlItem_Struct *lpCtrlItem) {
if(lpRect->left < lpRect->right) {
CString buffer;
CUpDownClient *lpUpDownClient = (CUpDownClient*)lpCtrlItem->value;
switch(nColumn) {
case 0: // icon, name, status
{
RECT cur_rec = *lpRect;
POINT point = {cur_rec.left, cur_rec.top+1};
if (lpCtrlItem->type == AVAILABLE_SOURCE){
switch (lpUpDownClient->GetDownloadState()) {
case DS_CONNECTING:
m_ImageList.Draw(dc, 2, point, ILD_NORMAL);
break;
case DS_CONNECTED:
m_ImageList.Draw(dc, 2, point, ILD_NORMAL);
break;
case DS_WAITCALLBACKKAD:
case DS_WAITCALLBACK:
m_ImageList.Draw(dc, 2, point, ILD_NORMAL);
break;
case DS_ONQUEUE:
if(lpUpDownClient->IsRemoteQueueFull())
m_ImageList.Draw(dc, 3, point, ILD_NORMAL);
else
m_ImageList.Draw(dc, 1, point, ILD_NORMAL);
break;
case DS_DOWNLOADING:
m_ImageList.Draw(dc, 0, point, ILD_NORMAL);
break;
case DS_REQHASHSET:
m_ImageList.Draw(dc, 0, point, ILD_NORMAL);
break;
case DS_NONEEDEDPARTS:
m_ImageList.Draw(dc, 3, point, ILD_NORMAL);
break;
case DS_ERROR:
m_ImageList.Draw(dc, 3, point, ILD_NORMAL);
break;
case DS_TOOMANYCONNS:
case DS_TOOMANYCONNSKAD:
m_ImageList.Draw(dc, 2, point, ILD_NORMAL);
break;
default:
m_ImageList.Draw(dc, 4, point, ILD_NORMAL);
}
}
else {
m_ImageList.Draw(dc, 3, point, ILD_NORMAL);
}
cur_rec.left += 20;
UINT uOvlImg = ((lpUpDownClient->Credits() && lpUpDownClient->Credits()->GetCurrentIdentState(lpUpDownClient->GetIP()) == IS_IDENTIFIED) ? INDEXTOOVERLAYMASK(1) : 0);
POINT point2= {cur_rec.left,cur_rec.top+1};
if (lpUpDownClient->IsFriend())
m_ImageList.Draw(dc, 6, point2, ILD_NORMAL | uOvlImg);
else if (lpUpDownClient->GetClientSoft() == SO_EDONKEYHYBRID)
m_ImageList.Draw(dc, 11, point2, ILD_NORMAL | uOvlImg);
else if (lpUpDownClient->GetClientSoft() == SO_MLDONKEY)
m_ImageList.Draw(dc, 8, point2, ILD_NORMAL | uOvlImg);
else if (lpUpDownClient->GetClientSoft() == SO_SHAREAZA)
m_ImageList.Draw(dc, 12, point2, ILD_NORMAL | uOvlImg);
else if (lpUpDownClient->GetClientSoft() == SO_URL)
m_ImageList.Draw(dc, 13, point2, ILD_NORMAL | uOvlImg);
else if (lpUpDownClient->GetClientSoft() == SO_AMULE)
m_ImageList.Draw(dc, 14, point2, ILD_NORMAL | uOvlImg);
else if (lpUpDownClient->GetClientSoft() == SO_LPHANT)
m_ImageList.Draw(dc, 15, point2, ILD_NORMAL | uOvlImg);
else if (lpUpDownClient->ExtProtocolAvailable())
m_ImageList.Draw(dc, 5, point2, ILD_NORMAL | uOvlImg);
else
m_ImageList.Draw(dc, 7, point2, ILD_NORMAL | uOvlImg);
cur_rec.left += 20;
//Morph Start - added by AndCycle, IP to Country
if(theApp.ip2country->ShowCountryFlag()){
POINT point3= {cur_rec.left,cur_rec.top+1};
theApp.ip2country->GetFlagImageList()->DrawIndirect(dc, lpUpDownClient->GetCountryFlagIndex(), point3, CSize(18,16), CPoint(0,0), ILD_NORMAL);
cur_rec.left+=20;
}
//Morph End - added by AndCycle, IP to Country
if (!lpUpDownClient->GetUserName())
buffer = "?";
else
buffer = lpUpDownClient->GetUserName();
//EastShare Start - added by AndCycle, IP to Country
CString tempStr2;
tempStr2.Format("%s%s", lpUpDownClient->GetCountryName(), buffer);
buffer = tempStr2;
//EastShare End - added by AndCycle, IP to Country
dc->DrawText(buffer,buffer.GetLength(),&cur_rec, DLC_DT_TEXT);
}
break;
case 1: // size
switch(lpUpDownClient->GetSourceFrom()){
case SF_SERVER:
buffer = "eD2K Server";
break;
case SF_KADEMLIA:
buffer = GetResString(IDS_KADEMLIA);
break;
case SF_SOURCE_EXCHANGE:
buffer = GetResString(IDS_SE);
break;
case SF_PASSIVE:
buffer = GetResString(IDS_PASSIVE);
break;
case SF_LINK:
buffer = GetResString(IDS_SW_LINK);
break;
}
dc->DrawText(buffer,buffer.GetLength(),const_cast<LPRECT>(lpRect), DLC_DT_TEXT);
break;
case 2:// transfered
if ( !IsColumnHidden(3)) {
dc->DrawText(_T(""),0,const_cast<LPRECT>(lpRect), DLC_DT_TEXT);
break;
}
case 3:// completed
if (lpCtrlItem->type == AVAILABLE_SOURCE && lpUpDownClient->GetTransferedDown()) {
buffer = CastItoXBytes(lpUpDownClient->GetTransferedDown(), false, false);
dc->DrawText(buffer,buffer.GetLength(),const_cast<LPRECT>(lpRect), DLC_DT_TEXT | DT_RIGHT);
}
break;
case 4: // speed
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -