📄 sharedfilesctrl.cpp
字号:
}
BEGIN_MESSAGE_MAP(CSharedFilesCtrl, CMuleListCtrl)
ON_WM_CONTEXTMENU()
ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnColumnClick)
END_MESSAGE_MAP()
// CSharedFilesCtrl message handlers
void CSharedFilesCtrl::OnContextMenu(CWnd* pWnd, CPoint point)
{
m_PrioMenu.EnableMenuItem(MP_PRIOAUTO, MF_ENABLED);
int counter;
CMenu m_Web;
m_Web.CreateMenu();
UpdateURLMenu(m_Web,counter);
UINT flag2;
flag2=(counter==0) ? MF_GRAYED:MF_STRING;
m_SharedFilesMenu.AppendMenu(flag2|MF_POPUP,(UINT_PTR)m_Web.m_hMenu, GetResString(IDS_WEBSERVICES) );
m_SharedFilesMenu.TrackPopupMenu(TPM_LEFTALIGN |TPM_RIGHTBUTTON,point.x,point.y,this);
m_SharedFilesMenu.RemoveMenu(10,MF_BYPOSITION);
m_Web.DestroyMenu();
}
BOOL CSharedFilesCtrl::OnCommand(WPARAM wParam, LPARAM lParam)
{
UINT selectedCount = this->GetSelectedCount();
int iSel = GetSelectionMark();
if (selectedCount>0){
CKnownFile* file = (CKnownFile*)GetItemData(iSel);
if (wParam>=MP_WEBURL && wParam<=MP_WEBURL+256) {
RunURL(file, theApp.webservices.GetAt(wParam-MP_WEBURL) );
}
switch (wParam){
case Irc_SetSendLink:
{
theApp.emuledlg->ircwnd.SetSendFileString(theApp.CreateED2kLink(file));
break;
}
case MP_GETED2KLINK:
if(selectedCount > 1)
{
CString str="";
POSITION pos = this->GetFirstSelectedItemPosition();
while( pos != NULL )
{
file = (CKnownFile*)this->GetItemData(GetNextSelectedItem(pos));
str.Append(theApp.CreateED2kLink(file) + "\n");
}
theApp.CopyTextToClipboard(str);
//AfxMessageBox(GetResString(IDS_COPIED2CB) + str);
break;
}
theApp.CopyTextToClipboard(theApp.CreateED2kLink(file));
break;
case MP_GETHTMLED2KLINK:
if(selectedCount > 1)
{
CString str="";
POSITION pos = this->GetFirstSelectedItemPosition();
while( pos != NULL )
{
file = (CKnownFile*)this->GetItemData(GetNextSelectedItem(pos));
str += theApp.CreateHTMLED2kLink(file) + "\n";
}
theApp.CopyTextToClipboard(str);
//AfxMessageBox(GetResString(IDS_COPIED2CB) + str);
break;
}
theApp.CopyTextToClipboard(theApp.CreateHTMLED2kLink(file));
break;
case MP_GETSOURCEED2KLINK:
{
if(selectedCount > 1)
{
CString str="";
POSITION pos = this->GetFirstSelectedItemPosition();
while( pos != NULL )
{
file = (CKnownFile*)this->GetItemData(GetNextSelectedItem(pos));
str += theApp.CreateED2kSourceLink(file) + "\n";
}
theApp.CopyTextToClipboard(str);
//AfxMessageBox(GetResString(IDS_COPIED2CB) + str);
break;
}
CString strLink = theApp.CreateED2kSourceLink(file);
if (!strLink.IsEmpty())
theApp.CopyTextToClipboard(strLink);
break;
}
case MP_OPEN:
{
char* buffer = new char[250];
sprintf(buffer,"%s\\%s",file->GetPath(),file->GetFileName());
theApp.emuledlg->AddLogLine( false, "%s\\%s",file->GetPath(),file->GetFileName());
ShellOpenFile(buffer);
delete buffer;
break;
}
//For Comments
case MP_CMT:
{
CCommentDialog dialog(file);
dialog.DoModal();
break;
}
//*END Comments*//
case MP_PRIOVERYLOW:
case MP_PRIOLOW:
case MP_PRIONORMAL:
case MP_PRIOHIGH:
case MP_PRIOVERYHIGH:
case MP_PRIOAUTO:
{
POSITION pos = this->GetFirstSelectedItemPosition();
bool no_partfile_selected = false;
while( pos != NULL )
{
int iSel=this->GetNextSelectedItem(pos);
file = (CKnownFile*)this->GetItemData(iSel);
switch (wParam) {
case MP_PRIOVERYLOW:
{ file->SetAutoUpPriority(false);file->SetUpPriority(PR_VERYLOW);SetItemText(iSel,3,GetResString(IDS_PRIOVERYLOW ));break; }
case MP_PRIOLOW:
{ file->SetAutoUpPriority(false);file->SetUpPriority(PR_LOW);SetItemText(iSel,3,GetResString(IDS_PRIOLOW ));break; }
case MP_PRIONORMAL:
{ file->SetAutoUpPriority(false);file->SetUpPriority(PR_NORMAL);SetItemText(iSel,3,GetResString(IDS_PRIONORMAL ));break; }
case MP_PRIOHIGH:
{ file->SetAutoUpPriority(false);file->SetUpPriority(PR_HIGH);SetItemText(iSel,3,GetResString(IDS_PRIOHIGH ));break; }
case MP_PRIOVERYHIGH:
{ file->SetAutoUpPriority(false);file->SetUpPriority(PR_VERYHIGH);SetItemText(iSel,3,GetResString(IDS_PRIORELEASE ));break; }//Hunter
case MP_PRIOAUTO:
{ file->SetAutoUpPriority(true);file->UpdateAutoUpPriority();UpdateFile(file); break; }//Hunter
}
}
break;
}
case MP_PERMNONE:
{
POSITION pos = this->GetFirstSelectedItemPosition();
while( pos != NULL ) {
int iSel=this->GetNextSelectedItem(pos);
file = (CKnownFile*)this->GetItemData(iSel);
if (((CPartFile*)file)->IsPartFile())
theApp.emuledlg->AddLogLine(true,GetResString(IDS_ERR_NOPRIMCHANGE));
else
{
file->SetPermissions(PERM_NOONE);
SetItemText(iSel,4,GetResString(IDS_HIDDEN));
}
}
break;
}
case MP_PERMFRIENDS:
{
POSITION pos = this->GetFirstSelectedItemPosition();
while( pos != NULL ) {
int iSel=this->GetNextSelectedItem(pos);
file = (CKnownFile*)this->GetItemData(iSel);
if (((CPartFile*)file)->IsPartFile())
theApp.emuledlg->AddLogLine(true,GetResString(IDS_ERR_NOPRIMCHANGE));
else
{
file->SetPermissions(PERM_FRIENDS);
SetItemText(iSel,4,GetResString(IDS_FSTATUS_FRIENDSONLY ));
}
}
break;
}
case MP_PERMALL:
POSITION pos = this->GetFirstSelectedItemPosition();
while( pos != NULL ) {
int iSel=this->GetNextSelectedItem(pos);
file = (CKnownFile*)this->GetItemData(iSel);
file->SetPermissions(PERM_ALL);SetItemText(iSel,4,GetResString(IDS_FSTATUS_PUBLIC));
}
}
}
return true;
}
void CSharedFilesCtrl::OnColumnClick( NMHDR* pNMHDR, LRESULT* pResult){
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// Barry - Store sort order in preferences
// Determine ascending based on whether already sorted on this column
int sortItem = theApp.glob_prefs->GetColumnSortItem(CPreferences::tableShared);
bool m_oldSortAscending = theApp.glob_prefs->GetColumnSortAscending(CPreferences::tableShared);
bool sortAscending = (sortItem != pNMListView->iSubItem) ? true : !m_oldSortAscending;
// Item is column clicked
sortItem = pNMListView->iSubItem;
// Save new preferences
theApp.glob_prefs->SetColumnSortItem(CPreferences::tableShared, sortItem);
theApp.glob_prefs->SetColumnSortAscending(CPreferences::tableShared, sortAscending);
// Ornis 4-way-sorting
int adder=0;
if (pNMListView->iSubItem>5 && pNMListView->iSubItem<9) {
if (!sortAscending) sortstat[pNMListView->iSubItem-6]=!sortstat[pNMListView->iSubItem-6];
adder=sortstat[pNMListView->iSubItem-6] ? 0:100;
}
// Sort table
if (adder==0)
SetSortArrow(sortItem, sortAscending);
else
SetSortArrow(sortItem, sortAscending ? arrowDoubleUp : arrowDoubleDown);
SortItems(SortProc, sortItem + adder + (sortAscending ? 0:20));
*pResult = 0;
}
int CSharedFilesCtrl::SortProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort){
CKnownFile* item1 = (CKnownFile*)lParam1;
CKnownFile* item2 = (CKnownFile*)lParam2;
switch(lParamSort){
case 0: //filename asc
return strcmpi(item1->GetFileName(),item2->GetFileName());
case 20: //filename desc
return strcmpi(item2->GetFileName(),item1->GetFileName());
case 1: //filesize asc
return item1->GetFileSize()==item2->GetFileSize()?0:(item1->GetFileSize()>item2->GetFileSize()?1:-1);
case 21: //filesize desc
return item1->GetFileSize()==item2->GetFileSize()?0:(item2->GetFileSize()>item1->GetFileSize()?1:-1);
case 2: //filetype asc
return strcmpi( GetFiletypeByName(item1->GetFileName()),GetFiletypeByName( item2->GetFileName()) );
case 22: //filetype desc
return strcmpi( GetFiletypeByName(item2->GetFileName()),GetFiletypeByName( item1->GetFileName()) );
case 3: //prio asc
if(item1->GetUpPriority() == PR_VERYLOW )
return 1;
else if (item2->GetUpPriority() == PR_VERYLOW)
return 0;
else
return item2->GetUpPriority()-item1->GetUpPriority();
case 23: //prio desc
if(item1->GetUpPriority() == PR_VERYLOW )
return 0;
else if (item2->GetUpPriority() == PR_VERYLOW)
return 1;
else
return item1->GetUpPriority()-item2->GetUpPriority();
case 4: //permission asc
return item2->GetPermissions()-item1->GetPermissions();
case 24: //permission desc
return item1->GetPermissions()-item2->GetPermissions();
case 5: //fileID asc
return strcmpi((CString)item1->GetFileHash(),(CString)item2->GetFileHash());
case 25: //fileID desc
return strcmpi((CString)item2->GetFileHash(),(CString)item1->GetFileHash());
case 6: //requests asc
return item1->statistic.GetRequests() - item2->statistic.GetRequests();
case 26: //requests desc
return item2->statistic.GetRequests() - item1->statistic.GetRequests();
case 7: //acc requests asc
return item1->statistic.GetAccepts() - item2->statistic.GetAccepts();
case 27: //acc requests desc
return item2->statistic.GetAccepts() - item1->statistic.GetAccepts();
case 8: //all transferred asc
return item1->statistic.GetTransferred()==item2->statistic.GetTransferred()?0:(item1->statistic.GetTransferred()>item2->statistic.GetTransferred()?1:-1);
case 28: //all transferred desc
return item1->statistic.GetTransferred()==item2->statistic.GetTransferred()?0:(item2->statistic.GetTransferred()>item1->statistic.GetTransferred()?1:-1);
case 10: //folder asc
return strcmpi((CString)item1->GetPath(),(CString)item2->GetPath());
case 30: //folder desc
return strcmpi((CString)item2->GetPath(),(CString)item1->GetPath());
case 106: //all requests asc
return item1->statistic.GetAllTimeRequests() - item2->statistic.GetAllTimeRequests();
case 126: //all requests desc
return item2->statistic.GetAllTimeRequests() - item1->statistic.GetAllTimeRequests();
case 107: //all acc requests asc
return item1->statistic.GetAllTimeAccepts() - item2->statistic.GetAllTimeAccepts();
case 127: //all acc requests desc
return item2->statistic.GetAllTimeAccepts() - item1->statistic.GetAllTimeAccepts();
case 108: //all transferred asc
return item1->statistic.GetAllTimeTransferred()==item2->statistic.GetAllTimeTransferred()?0:(item1->statistic.GetAllTimeTransferred()>item2->statistic.GetAllTimeTransferred()?1:-1);
case 128: //all transferred desc
return item1->statistic.GetAllTimeTransferred()==item2->statistic.GetAllTimeTransferred()?0:(item2->statistic.GetAllTimeTransferred()>item1->statistic.GetAllTimeTransferred()?1:-1);
default:
return 0;
}
}
void CSharedFilesCtrl::UpdateFile(CKnownFile* toupdate){
if( !theApp.emuledlg->IsRunning())
return;
LVFINDINFO find;
find.flags = LVFI_PARAM;
find.lParam = (LPARAM)toupdate;
sint16 result = FindItem(&find);
if (result != -1) {
Update(result) ; // Added by Tarod to real time refresh - DonGato - 11/11/2002
theApp.emuledlg->sharedfileswnd.Check4StatUpdate(toupdate);
}
}
void CSharedFilesCtrl::ShowFilesCount() {
CString counter;
counter.Format(" (%i)", theApp.sharedfiles->GetCount());
theApp.emuledlg->sharedfileswnd.GetDlgItem(IDC_TRAFFIC_TEXT)->SetWindowText(GetResString(IDS_SF_FILES)+counter );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -