📄 downloadlistctrl.cpp
字号:
{
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, LPRECT 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()));
if ( thePrefs.ShowRatingIndicator() && ( lpPartFile->HasComment() || lpPartFile->HasRating() )){
POINT point= {lpRect->left-4,lpRect->top+2};
m_ImageList.Draw(dc, (lpPartFile->HasRating() && lpPartFile->HasBadRating()) ? 10 : 9, point, ILD_NORMAL);
lpRect->left+=9;
dc->DrawText(lpPartFile->GetFileName(), lpPartFile->GetFileName().GetLength(), lpRect, DLC_DT_TEXT);
lpRect->left-=9;
}
else
dc->DrawText(lpPartFile->GetFileName(), lpPartFile->GetFileName().GetLength(), lpRect, DLC_DT_TEXT);
break;
case 1: // size
buffer = CastItoXBytes(lpPartFile->GetFileSize());
dc->DrawText(buffer,buffer.GetLength(),lpRect, DLC_DT_TEXT | DT_RIGHT);
break;
case 2: // transfered
buffer = CastItoXBytes(lpPartFile->GetTransfered());
dc->DrawText(buffer,buffer.GetLength(),lpRect, DLC_DT_TEXT | DT_RIGHT);
break;
case 3: // transfered complete
buffer = CastItoXBytes(lpPartFile->GetCompletedSize());
dc->DrawText(buffer,buffer.GetLength(),lpRect, DLC_DT_TEXT | DT_RIGHT);
break;
case 4: // speed
if (lpPartFile->GetTransferingSrcCount())
buffer.Format(_T("%.1f %s"), lpPartFile->GetDatarate() / 1024.0f,GetResString(IDS_KBYTESEC));
dc->DrawText(buffer,buffer.GetLength(),lpRect, DLC_DT_TEXT | DT_RIGHT);
break;
case 5: // progress
{
lpRect->bottom --;
lpRect->top ++;
// added
int iWidth = lpRect->right - lpRect->left;
int iHeight = lpRect->bottom - lpRect->top;
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(lpRect->left, lpRect->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(), lpRect, (DLC_DT_TEXT & ~DT_LEFT) | DT_CENTER);
dc->SetBkMode(iOMode);
dc->SetTextColor(oldclr);
// HoaX_69: END
}
lpRect->bottom ++;
lpRect->top --;
}
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(),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(),lpRect, DLC_DT_TEXT);
else
dc->DrawText(GetResString(IDS_PRIOLOW),GetResString(IDS_PRIOLOW).GetLength(),lpRect, DLC_DT_TEXT);
break;
case PR_NORMAL:
if( lpPartFile->IsAutoDownPriority() )
dc->DrawText(GetResString(IDS_PRIOAUTONORMAL),GetResString(IDS_PRIOAUTONORMAL).GetLength(),lpRect, DLC_DT_TEXT);
else
dc->DrawText(GetResString(IDS_PRIONORMAL),GetResString(IDS_PRIONORMAL).GetLength(),lpRect, DLC_DT_TEXT);
break;
case PR_HIGH:
if( lpPartFile->IsAutoDownPriority() )
dc->DrawText(GetResString(IDS_PRIOAUTOHIGH),GetResString(IDS_PRIOAUTOHIGH).GetLength(),lpRect, DLC_DT_TEXT);
else
dc->DrawText(GetResString(IDS_PRIOHIGH),GetResString(IDS_PRIOHIGH).GetLength(),lpRect, DLC_DT_TEXT);
break;
}
break;
case 8: // <<--9/21/02
buffer = lpPartFile->getPartfileStatus();
dc->DrawText(buffer,buffer.GetLength(),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()));
}
dc->DrawText(buffer,buffer.GetLength(),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(),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(),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(),lpRect, DLC_DT_TEXT);
}
break;
}
}
}
void CDownloadListCtrl::DrawSourceItem(CDC *dc, int nColumn, LPRECT 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_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_LOWTOLOWIP:
m_ImageList.Draw(dc, 3, point, ILD_NORMAL);
break;
case DS_TOOMANYCONNS:
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;
if (!lpUpDownClient->GetUserName())
buffer = "?";
else
buffer = lpUpDownClient->GetUserName();
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(),lpRect, DLC_DT_TEXT);
break;
case 2:// transfered
if ( !IsColumnHidden(3)) {
dc->DrawText(_T(""),0,lpRect, DLC_DT_TEXT);
break;
}
case 3:// completed
if (lpCtrlItem->type == AVAILABLE_SOURCE && lpUpDownClient->GetTransferedDown()) {
buffer = CastItoXBytes(lpUpDownClient->GetTransferedDown());
dc->DrawText(buffer,buffer.GetLength(),lpRect, DLC_DT_TEXT | DT_RIGHT);
}
break;
case 4: // speed
if (lpCtrlItem->type == AVAILABLE_SOURCE && lpUpDownClient->GetDownloadDatarate()){
if (lpUpDownClient->GetDownloadDatarate())
buffer.Format(_T("%.1f %s"), lpUpDownClient->GetDownloadDatarate()/1024.0f,GetResString(IDS_KBYTESEC));
dc->DrawText(buffer,buffer.GetLength(),lpRect, DLC_DT_TEXT | DT_RIGHT);
}
break;
case 5: // file info
{
lpRect->bottom--;
lpRect->top++;
int iWidth = lpRect->right - lpRect->left;
int iHeight = lpRect->bottom - lpRect->top;
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;
lpUpDownClient->DrawStatusBar(&cdcStatus, &rec_status,(lpCtrlItem->type == UNAVAILABLE_SOURCE), thePrefs.UseFlatBar());
lpCtrlItem->dwUpdated = dwTicks + (rand() % 128);
} else
hOldBitmap = cdcStatus.SelectObject(lpCtrlItem->status);
dc->BitBlt(lpRect->left, lpRect->top, iWidth, iHeight, &cdcStatus, 0, 0, SRCCOPY);
cdcStatus.SelectObject(hOldBitmap);
lpRect->bottom++;
lpRect->top--;
}
break;
case 6:{ // sources
buffer = lpUpDownClient->GetClientSoftVer();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -