📄 sharedfilesctrl.cpp
字号:
//this file is part of eMule
//Copyright (C)2002 Merkur ( merkur-@users.sourceforge.net / http://www.emule-project.net )
//
//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.
// SharedFilesCtrl.cpp : implementation file
//
#include "stdafx.h"
#include "emule.h"
#include "SharedFilesCtrl.h"
#include "otherfunctions.h"
#include "CommentDialog.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
// CSharedFilesCtrl
IMPLEMENT_DYNAMIC(CSharedFilesCtrl, CMuleListCtrl)
CSharedFilesCtrl::CSharedFilesCtrl() {
sflist = 0; // i_a
memset(&sortstat, 0, sizeof(sortstat)); // i_a
}
CSharedFilesCtrl::~CSharedFilesCtrl(){
}
void CSharedFilesCtrl::Init(){
SetExtendedStyle(LVS_EX_FULLROWSELECT);
ModifyStyle(LVS_SINGLESEL,0);
InsertColumn(0, GetResString(IDS_DL_FILENAME) ,LVCFMT_LEFT,250,0);
InsertColumn(1,GetResString(IDS_DL_SIZE),LVCFMT_LEFT,100,1);
InsertColumn(2,GetResString(IDS_TYPE),LVCFMT_LEFT,50,2);
InsertColumn(3,GetResString(IDS_PRIORITY),LVCFMT_LEFT,70,3);
InsertColumn(4,GetResString(IDS_PERMISSION),LVCFMT_LEFT,100,4);
InsertColumn(5,GetResString(IDS_FILEID),LVCFMT_LEFT,220,5);
InsertColumn(6,GetResString(IDS_SF_REQUESTS),LVCFMT_LEFT,100,6);
InsertColumn(7,GetResString(IDS_SF_ACCEPTS),LVCFMT_LEFT,100,7);
InsertColumn(8,GetResString(IDS_SF_TRANSFERRED),LVCFMT_LEFT,120,8);
InsertColumn(9,GetResString(IDS_UPSTATUS),LVCFMT_LEFT,100,9);
InsertColumn(10,GetResString(IDS_FOLDER),LVCFMT_LEFT,200,10);
m_SharedFilesMenu.CreatePopupMenu();
m_SharedFilesMenu.AddMenuTitle(GetResString(IDS_SHAREDFILES));
// add priority switcher
m_PrioMenu.CreateMenu();
m_PrioMenu.AppendMenu(MF_STRING,MP_PRIOVERYLOW,GetResString(IDS_PRIOVERYLOW));
m_PrioMenu.AppendMenu(MF_STRING,MP_PRIOLOW,GetResString(IDS_PRIOLOW));
m_PrioMenu.AppendMenu(MF_STRING,MP_PRIONORMAL,GetResString(IDS_PRIONORMAL));
m_PrioMenu.AppendMenu(MF_STRING,MP_PRIOHIGH, GetResString(IDS_PRIOHIGH));
m_PrioMenu.AppendMenu(MF_STRING,MP_PRIOVERYHIGH, GetResString(IDS_PRIORELEASE));
m_PrioMenu.AppendMenu(MF_STRING,MP_PRIOAUTO, GetResString(IDS_PRIOAUTO));//UAP
// add permission switcher
m_PermMenu.CreateMenu();
m_PermMenu.AppendMenu(MF_STRING,MP_PERMNONE, GetResString(IDS_FSTATUS_LOCKED));
m_PermMenu.AppendMenu(MF_STRING,MP_PERMFRIENDS, GetResString(IDS_FSTATUS_FRIENDSONLY));
m_PermMenu.AppendMenu(MF_STRING,MP_PERMALL, GetResString(IDS_FSTATUS_PUBLIC));
// todo enable when it works
//m_SharedFilesMenu.AppendMenu(MF_STRING|MF_POPUP,(UINT_PTR)m_PermMenu.m_hMenu, GetResString(IDS_PERMISSION));
m_SharedFilesMenu.AppendMenu(MF_STRING|MF_POPUP,(UINT_PTR)m_PrioMenu.m_hMenu, GetResString(IDS_PRIORITY) );
m_SharedFilesMenu.AppendMenu(MF_STRING|MF_SEPARATOR);
m_SharedFilesMenu.AppendMenu(MF_STRING,MP_OPEN, GetResString(IDS_OPENFILE));
//***Comments 11/27/03**//
m_SharedFilesMenu.AppendMenu(MF_STRING,MP_CMT, GetResString(IDS_CMT_ADD));
m_SharedFilesMenu.AppendMenu(MF_STRING|MF_SEPARATOR);
//****end comments***//
m_SharedFilesMenu.AppendMenu(MF_STRING,MP_GETED2KLINK, GetResString(IDS_DL_LINK1));
m_SharedFilesMenu.AppendMenu(MF_STRING,MP_GETHTMLED2KLINK, GetResString(IDS_DL_LINK2));
m_SharedFilesMenu.AppendMenu(MF_STRING,MP_GETSOURCEED2KLINK, GetResString(IDS_CREATESOURCELINK));
m_SharedFilesMenu.AppendMenu(MF_STRING|MF_SEPARATOR);
// m_SharedFilesMenu.AppendMenu(MF_STRING,Irc_SetSendLink,GetResString(IDS_IRC_ADDLINKTOIRC));
//This menu option is is for testing..
LoadSettings(CPreferences::tableShared);
// Barry - Use preferred sort order from preferences
int sortItem = theApp.glob_prefs->GetColumnSortItem(CPreferences::tableShared);
bool sortAscending = theApp.glob_prefs->GetColumnSortAscending(CPreferences::tableShared);
SetSortArrow(sortItem, sortAscending);
SortItems(SortProc, sortItem + (sortAscending ? 0:20));
}
void CSharedFilesCtrl::Localize() {
CHeaderCtrl* pHeaderCtrl = GetHeaderCtrl();
HDITEM hdi;
hdi.mask = HDI_TEXT;
CString strRes;
strRes = GetResString(IDS_DL_FILENAME);
hdi.pszText = strRes.GetBuffer();
pHeaderCtrl->SetItem(0, &hdi);
strRes.ReleaseBuffer();
strRes = GetResString(IDS_DL_SIZE);
hdi.pszText = strRes.GetBuffer();
pHeaderCtrl->SetItem(1, &hdi);
strRes.ReleaseBuffer();
strRes = GetResString(IDS_TYPE);
hdi.pszText = strRes.GetBuffer();
pHeaderCtrl->SetItem(2, &hdi);
strRes.ReleaseBuffer();
strRes = GetResString(IDS_PRIORITY);
hdi.pszText = strRes.GetBuffer();
pHeaderCtrl->SetItem(3, &hdi);
strRes.ReleaseBuffer();
strRes = GetResString(IDS_PERMISSION);
hdi.pszText = strRes.GetBuffer();
pHeaderCtrl->SetItem(4, &hdi);
strRes.ReleaseBuffer();
strRes = GetResString(IDS_FILEID);
hdi.pszText = strRes.GetBuffer();
pHeaderCtrl->SetItem(5, &hdi);
strRes.ReleaseBuffer();
strRes = GetResString(IDS_SF_REQUESTS);
hdi.pszText = strRes.GetBuffer();
pHeaderCtrl->SetItem(6, &hdi);
strRes.ReleaseBuffer();
strRes = GetResString(IDS_SF_ACCEPTS);
hdi.pszText = strRes.GetBuffer();
pHeaderCtrl->SetItem(7, &hdi);
strRes.ReleaseBuffer();
strRes = GetResString(IDS_SF_TRANSFERRED);
hdi.pszText = strRes.GetBuffer();
pHeaderCtrl->SetItem(8, &hdi);
strRes.ReleaseBuffer();
strRes = GetResString(IDS_UPSTATUS);
hdi.pszText = strRes.GetBuffer();
pHeaderCtrl->SetItem(9, &hdi);
strRes.ReleaseBuffer();
strRes = GetResString(IDS_FOLDER);
hdi.pszText = strRes.GetBuffer();
pHeaderCtrl->SetItem(10, &hdi);
strRes.ReleaseBuffer();
}
void CSharedFilesCtrl::ShowFileList(CSharedFileList* in_sflist){
DeleteAllItems();
sflist = in_sflist;
CCKey bufKey;
CKnownFile* cur_file;
for (POSITION pos = sflist->m_Files_map.GetStartPosition();pos != 0;){
sflist->m_Files_map.GetNextAssoc(pos,bufKey,cur_file);
ShowFile(cur_file);
}
ShowFilesCount();
}
#define DLC_DT_TEXT (DT_LEFT|DT_SINGLELINE|DT_VCENTER|DT_NOPREFIX|DT_END_ELLIPSIS)
void CSharedFilesCtrl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct){
if( !theApp.emuledlg->IsRunning() )
return;
if( !lpDrawItemStruct->itemData)
return;
CDC* odc = CDC::FromHandle(lpDrawItemStruct->hDC);
BOOL bCtrlFocused = ((GetFocus() == this ) || (GetStyle() & LVS_SHOWSELALWAYS));
if( odc && (lpDrawItemStruct->itemAction | ODA_SELECT) && (lpDrawItemStruct->itemState & ODS_SELECTED )){
if(bCtrlFocused)
odc->SetBkColor(m_crHighlight);
else
odc->SetBkColor(m_crNoHighlight);
}
else
odc->SetBkColor(GetBkColor());
CKnownFile* file = (CKnownFile*)lpDrawItemStruct->itemData;
CMemDC dc(CDC::FromHandle(lpDrawItemStruct->hDC),&CRect(lpDrawItemStruct->rcItem));
dc.SelectObject(GetFont());
COLORREF crOldTextColor = dc->GetTextColor();
COLORREF crOldBkColor = dc->GetBkColor();
RECT cur_rec;
memcpy(&cur_rec,&lpDrawItemStruct->rcItem,sizeof(RECT));
CString buffer;
CHeaderCtrl *pHeaderCtrl = GetHeaderCtrl();
int iCount = pHeaderCtrl->GetItemCount();
cur_rec.right = cur_rec.left - 8;
cur_rec.left += 4;
for(int iCurrent = 0; iCurrent < iCount; iCurrent++){
int iColumn = pHeaderCtrl->OrderToIndex(iCurrent);
if( !IsColumnHidden(iColumn) ){
cur_rec.right += GetColumnWidth(iColumn);
switch(iColumn){
case 0:
buffer.Format("%s", file->GetFileName());
break;
case 1:
buffer.Format("%s", CastItoXBytes(file->GetFileSize()));
break;
case 2:
buffer.Format("%s", GetFiletypeByName(file->GetFileName())); // added by InterCeptor (show filetype) 11.11.02
break;
case 3:{
buffer = "";
switch (file->GetUpPriority()) {
case PR_VERYLOW :
buffer.Format("%s", GetResString(IDS_PRIOVERYLOW ));
break;
case PR_LOW :
if( file->IsAutoUpPriority() )
buffer.Format("%s", GetResString(IDS_PRIOAUTOLOW));
else
buffer.Format("%s", GetResString(IDS_PRIOLOW));
break;
case PR_NORMAL :
if( file->IsAutoUpPriority() )
buffer.Format("%s", GetResString(IDS_PRIOAUTONORMAL));
else
buffer.Format("%s", GetResString(IDS_PRIONORMAL));
break;
case PR_HIGH :
if( file->IsAutoUpPriority() )
buffer.Format("%s", GetResString(IDS_PRIOAUTOHIGH));
else
buffer.Format("%s", GetResString(IDS_PRIOHIGH));
break;
case PR_VERYHIGH :
buffer.Format("%s", GetResString(IDS_PRIORELEASE));
break;
}
break;
}
case 4:
buffer.Format("%s", GetResString(IDS_FSTATUS_PUBLIC));
break;
case 5:
buffer.Format("%s", EncodeBase16(file->GetFileHash(), 16));
break;
case 6:
buffer.Format("%u (%u)",file->statistic.GetRequests(),file->statistic.GetAllTimeRequests());
break;
case 7:
buffer.Format("%u (%u)",file->statistic.GetAccepts(),file->statistic.GetAllTimeAccepts());
break;
case 8:
buffer.Format("%s (%s)",CastItoXBytes(file->statistic.GetTransferred()), CastItoXBytes(file->statistic.GetAllTimeTransferred()));
break;
case 9:
if( file->GetPartCount()){
cur_rec.bottom--;
cur_rec.top++;
int iWidth = cur_rec.right - cur_rec.left;
int iHeight = cur_rec.bottom - cur_rec.top;
if(!file->IsPartFile())
file->DrawShareStatusBar(dc,&cur_rec,false,theApp.glob_prefs->UseFlatBar());
else
((CPartFile*)file)->DrawShareStatusBar(dc,&cur_rec,false,theApp.glob_prefs->UseFlatBar());
cur_rec.bottom++;
cur_rec.top--;
}
break;
case 10:
buffer.Format("%s",file->GetPath());
break;
}
if( iColumn != 9 )
dc->DrawText(buffer, buffer.GetLength(),&cur_rec,DLC_DT_TEXT);
cur_rec.left += GetColumnWidth(iColumn);
}
}
ShowFilesCount();
if ((lpDrawItemStruct->itemAction | ODA_SELECT) && (lpDrawItemStruct->itemState & ODS_SELECTED))
{
RECT outline_rec;
memcpy(&outline_rec,&lpDrawItemStruct->rcItem,sizeof(RECT));
outline_rec.top--;
outline_rec.bottom++;
dc->FrameRect(&outline_rec, &CBrush(GetBkColor()));
outline_rec.top++;
outline_rec.bottom--;
outline_rec.left++;
outline_rec.right--;
if(bCtrlFocused)
dc->FrameRect(&outline_rec, &CBrush(m_crFocusLine));
else
dc->FrameRect(&outline_rec, &CBrush(m_crNoFocusLine));
}
}
void CSharedFilesCtrl::ShowFile(CKnownFile* file){
uint32 itemnr = GetItemCount();
itemnr = InsertItem(LVIF_TEXT|LVIF_PARAM,itemnr,0,0,0,0,(LPARAM)file);
UpdateFile(file);
}
void CSharedFilesCtrl::RemoveFile(CKnownFile *toRemove) {
LVFINDINFO info;
info.flags = LVFI_PARAM;
info.lParam = (LPARAM)toRemove;
int nItem = FindItem(&info);
if(nItem != -1)
DeleteItem(nItem);
ShowFilesCount();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -