⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sharedfilesctrl.cpp

📁 非常出名开源客户端下载的程序emule
💻 CPP
📖 第 1 页 / 共 2 页
字号:
}

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 + -