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

📄 ftplistctrl.cpp

📁 一个FTP下载的源代码。代码质量非常高
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		}
	}	
	return CListCtrl::PreTranslateMessage(pMsg);
}

void CFtpListCtrl::OnFtpcontextRename() 
{
	if (!GetItemCount() || !m_pDirectory)
		return;
	
	CMainFrame *pMainFrame = DYNAMIC_DOWNCAST(CMainFrame,GetParentFrame());
	if (pMainFrame->m_pCommandQueue->IsLocked())
		return;
	if (m_nBatchAction || !m_PathsToVisit.empty() || !m_PathsVisited.empty())
		return;

	ASSERT(GetSelectedCount()==1);
	if (pMainFrame->m_pCommandQueue->IsBusy())
	{
		MessageBeep(MB_ICONEXCLAMATION);
		return;
	}
	POSITION selpos = GetFirstSelectedItemPosition();
	int index = GetNextSelectedItem(selpos);
	EditLabel(index);
}


// this Function Returns the first Selected Item In the List
UINT CFtpListCtrl::GetSelectedItem()
{
	// this Function Valid Only when a Single Item Is Selected
	ASSERT( GetSelectedCount( ) == 1 );
	UINT nNoOfItems = GetItemCount( );
	UINT nListItem;
	for (nListItem = 0; nListItem < nNoOfItems; nListItem++ )
		if( GetItemState( nListItem, LVIS_SELECTED )  )
			break;
	ASSERT( nListItem < nNoOfItems );
	return nListItem;
}

void CFtpListCtrl::OnFtpcontextCreatedir() 
{
	if (!GetItemCount() || !m_pDirectory)
		return;

	CMainFrame *pMainFrame=DYNAMIC_DOWNCAST(CMainFrame,GetParentFrame());
	if (pMainFrame->m_pCommandQueue->IsLocked())
		return;
	if (m_nBatchAction || !m_PathsToVisit.empty() || !m_PathsVisited.empty())
		return;

	CEnterSomething dlg(IDS_INPUTDIALOGTITLE_CREATEDIR,IDS_INPUTDIALOGTEXT_CREATEDIR);
	if (pMainFrame->m_pCommandQueue->IsBusy())
	{
		MessageBeep(MB_ICONEXCLAMATION);
		return;
	}
	CServerPath path=m_pDirectory->path;
	path.AddSubdir( _T("\001\002\003\004\005") );
	CString tmp=path.GetPath();
	int pos=tmp.Find( _T("\001\002\003\004\005") );
	if (pos==-1)
	{
		MessageBeep(MB_ICONEXCLAMATION);
		return;
	}
	CString tmp2;
	tmp2.LoadString(IDS_SITEMANAGER_NEWFOLDER);
	tmp.Replace(_T("\001\002\003\004\005"),tmp2);
	dlg.m_String=tmp;
	dlg.m_nPreselectMin=pos;
	dlg.m_nPreselectMax=pos+tmp2.GetLength();
	if (dlg.DoModal()==IDOK)
	{
		path=m_pDirectory->path;
		if (!path.ChangePath(dlg.m_String))
		{
			MessageBeep(MB_ICONEXCLAMATION);
			return;
		}
		else if (!path.HasParent())
		{
			MessageBeep(MB_ICONEXCLAMATION);
			return;
		}
		CMainFrame *pMainFrame=DYNAMIC_DOWNCAST(CMainFrame,GetParentFrame());
		if (!pMainFrame->m_pCommandQueue->MakeDir(path))
		{
			MessageBeep(MB_ICONEXCLAMATION);
			return;
		}
	}
}

void CFtpListCtrl::ReloadHeader()
{
	ReloadHeaderItem(0,IDS_HEADER_FILENAME);
	int i=1;
	if (!(m_nHideColumns&1))
	{
		ReloadHeaderItem(i, IDS_HEADER_FILESIZE);
		i++;
	}
	if (!(m_nHideColumns&2))
	{
		ReloadHeaderItem(i, IDS_HEADER_FILETYPE);
		i++;
	}
	if (!(m_nHideColumns&4))
	{
		ReloadHeaderItem(i, IDS_HEADER_DATE);
		i++;
	}
	if (!(m_nHideColumns&8))
	{
		ReloadHeaderItem(i, IDS_HEADER_TIME);
		i++;
	}
	if (!(m_nHideColumns&10))
	{
		ReloadHeaderItem(i+1, IDS_HEADER_PERMISSIONS);
	}
	if (!(m_nHideColumns&0x20))
	{
		ReloadHeaderItem(i+1, IDS_HEADER_OWNERGROUP);
	}
}

void CFtpListCtrl::ReloadHeaderItem(int nIndex, UINT nID)
{
	CHeaderCtrl *header=GetHeaderCtrl();
	TCHAR text[100];
	HDITEM item;
	memset(&item,0,sizeof(HDITEM));
	item.cchTextMax=100;
	item.mask=HDI_TEXT;
	item.pszText=text;
	header->GetItem(nIndex,&item);
	CString str;
	str.LoadString(nID);
	_tcscpy(text,str);
	header->SetItem(nIndex,&item);
}


void CFtpListCtrl::OnFtpcontextAttributes() 
{
	CMainFrame *pMainFrame=DYNAMIC_DOWNCAST(CMainFrame,GetParentFrame());
	if (pMainFrame->m_pCommandQueue->IsLocked())
		return;
	if (pMainFrame->m_pCommandQueue->IsBusy())
	{
		MessageBeep(MB_ICONEXCLAMATION);
		return;
	}
	POSITION selpos=GetFirstSelectedItemPosition();
	if (!selpos)
		return;
	int count=0;
	int permbuffer[9];
	memset(permbuffer,0,sizeof(int)*9);
	int index;
	while (selpos)
	{
		int nItem = GetNextSelectedItem(selpos);
		if (!nItem)
			continue;
		index=m_IndexMapping[nItem];
	
		CString permissions=m_pDirectory->direntry[index].permissionstr;
		permissions.MakeLower();

		//Owner permissions
		if (permissions[1]=='r')
			permbuffer[0]++;
		if (permissions[2]=='w')
			permbuffer[1]++;
		if (permissions[3]=='x')
			permbuffer[2]++;
	
		//Group permissions
		if (permissions[4]=='r')
			permbuffer[3]++;
		if (permissions[5]=='w')
			permbuffer[4]++;
		if (permissions[6]=='x')
			permbuffer[5]++;

		//Public permissions
		if (permissions[7]=='r')
			permbuffer[6]++;
		if (permissions[8]=='w')
			permbuffer[7]++;
		if (permissions[9]=='x')
			permbuffer[8]++;

		count++;
	}
	if (!count)
		return;

	CFileAttributes dlg;
	for (int i=0;i<9;i++)
	{
		if (permbuffer[i])
			if (permbuffer[i]!=count)
				permbuffer[i]=2;
			else
				permbuffer[i]=1;
	}
	memcpy(dlg.m_permbuffer,permbuffer,sizeof(int)*9);

	dlg.SetFileCount(count);
	
	if (count>1)
		dlg.m_text.LoadString(IDS_CHANGEDIALOG_MULTIPLEFILES);
	else
		dlg.m_text.Format(m_pDirectory->direntry[index].dir?IDS_CHANGEDIALOG_DIRECTORY:IDS_CHANGEDIALOG_FILE,m_pDirectory->direntry[index].name);
	if (dlg.DoModal()==IDOK)
	{
		selpos=GetFirstSelectedItemPosition();
		BOOL bChanged=FALSE;
		while(selpos)
		{
			int nItem=GetNextSelectedItem(selpos);
			if (!nItem)
				continue;
			int index=m_IndexMapping[nItem];
			CString permissions=m_pDirectory->direntry[index].permissionstr;
			permissions.MakeLower();
			int value=0;
			
			//Owner permissions
			if (dlg.m_permbuffer[0]==2)
			{
				if (permissions[1]=='r')
					value+=400;
			}
			else if (dlg.m_permbuffer[0]==1)
				value+=400;
			
			if (dlg.m_permbuffer[1]==2)
			{
				if (permissions[2]=='w')
					value+=200;
			}
			else if (dlg.m_permbuffer[1]==1)
				value+=200;

			if (dlg.m_permbuffer[2]==2)
			{
				if (permissions[3]=='x')
					value+=100;
			}
			else if (dlg.m_permbuffer[2]==1)
				value+=100;
			
			//Group permissions
			if (dlg.m_permbuffer[3]==2)
			{
				if (permissions[4]=='r')
					value+=40;
			}
			else if (dlg.m_permbuffer[3]==1)
				value+=40;
			
			if (dlg.m_permbuffer[4]==2)
			{
				if (permissions[5]=='w')
					value+=20;
			}
			else if (dlg.m_permbuffer[4]==1)
				value+=20;

			if (dlg.m_permbuffer[5]==2)
			{
				if (permissions[6]=='x')
					value+=10;
			}
			else if (dlg.m_permbuffer[5]==1)
				value+=10;
			
			//Public permissions
			if (dlg.m_permbuffer[6]==2)
			{
				if (permissions[7]=='r')
					value+=4;
			}
			else if (dlg.m_permbuffer[6]==1)
				value+=4;
			
			if (dlg.m_permbuffer[7]==2)
			{
				if (permissions[8]=='w')
					value+=2;
			}
			else if (dlg.m_permbuffer[7]==1)
				value+=2;

			if (dlg.m_permbuffer[8]==2)
			{
				if (permissions[9]=='x')
					value+=1;
			}
			else if (dlg.m_permbuffer[8]==1)
				value+=1;
			
			if (!pMainFrame->m_pCommandQueue->Chmod(value, m_pDirectory->direntry[index].name, m_pDirectory->path, TRUE))
				MessageBeep(MB_ICONEXCLAMATION);
			else
				bChanged=TRUE;
		}
		if (bChanged)
		{
			if (m_pDirectory)
				pMainFrame->m_pCommandQueue->List(m_pDirectory->path, 0, TRUE);
			else
				pMainFrame->m_pCommandQueue->List(0, TRUE);
		}
	}
}	

void CFtpListCtrl::OnFtpcontextDownloadas() 
{
	if (!GetItemCount() || !m_pDirectory)
		return;

	CMainFrame *pMainFrame=DYNAMIC_DOWNCAST(CMainFrame,GetParentFrame());
	if (pMainFrame->m_pCommandQueue->IsLocked())
		return;
	if (m_nBatchAction || !m_PathsToVisit.empty() || !m_PathsVisited.empty())
		return;

	CTransferAsDlg dlg;
	if (dlg.DoModal() == IDOK)
	{
		m_transferuser = dlg.m_User;
		m_transferpass = dlg.m_Pass;
		if (dlg.m_bTransferNow)
			OnFtpcontextDownload();
		else
			OnFtpcontextAddtoqueue();
	}	
}

void CFtpListCtrl::SetListStyle(int nStyle)
{
	if (!nStyle)
		m_nStyle=LVS_REPORT;
	else if (nStyle==1)
		m_nStyle=LVS_LIST;
	else if (nStyle==2)
		m_nStyle=LVS_ICON;
	else if (nStyle==3)
		m_nStyle=LVS_SMALLICON;
	int remove=~m_nStyle & (LVS_REPORT|LVS_ICON|LVS_SMALLICON|LVS_LIST);
	ModifyStyle(remove, m_nStyle, SWP_NOZORDER);
	
	GetSysImgList();
	CHeaderCtrl *header = GetHeaderCtrl( );
	if (header)
		header->SetImageList(&m_SortImg);
	Arrange(LVA_DEFAULT);
	if (m_nStyle != LVS_REPORT)
		SortList(0,1);
}

void CFtpListCtrl::UpdateColumns(int nHideColumns)
{
	CString str;
	if (nHideColumns&1 && !(m_nHideColumns&1))
	{
		m_Columns[1] = m_Columns[2];
		m_Columns[2] = m_Columns[3];
		m_Columns[3] = m_Columns[4];
		m_Columns[4] = m_Columns[5];
		m_Columns[5] = m_Columns[6];
		m_Columns[6] = 0;
		
		DeleteColumn(1);
		if (m_sortcolumn == 1)
			SortList(0, 1);
		if (m_sortcolumn > 1)
			m_sortcolumn--;
	}
	else if (m_nHideColumns&1 && !(nHideColumns&1))
	{
		m_Columns[5] = m_Columns[4];
		m_Columns[4] = m_Columns[3];
		m_Columns[3] = m_Columns[2];
		m_Columns[2] = m_Columns[1];
		m_Columns[1] = 1;
		str.LoadString(IDS_HEADER_FILESIZE);
		InsertColumn(1, str, LVCFMT_RIGHT, 70);
		if (m_sortcolumn >= 1)
			m_sortcolumn++;
		RedrawItems(1, GetItemCount()-1);
	}
	if (nHideColumns&2 && !(m_nHideColumns&2))
	{
		for (int i=1; i<3; i++)
		{
			if (m_Columns[i] == 2)
			{
				int j = i;
				while (j < 6)
				{
					m_Columns[j] = m_Columns[j+1];
					j++;
				}
				m_Columns[j] = 5;
				DeleteColumn(i);		
				if (m_sortcolumn==i)
					SortList(0, 1);
				if (m_sortcolumn > i)
					m_sortcolumn--;
				break;
			}
		}
	}
	else if (m_nHideColumns&2 && !(nHideColumns&2))
	{
		for (int i=1; i<3; i++)
		{
			if (m_Columns[i] >= 3)
			{
				int j = 6;
				while (j != i)
				{
					m_Columns[j] = m_Columns[j-1];
					j--;
				}
				m_Columns[i] = 2;

				str.LoadString(IDS_HEADER_FILETYPE);
				InsertColumn(i, str, LVCFMT_LEFT, 80);
				if (m_sortcolumn >= i)
					m_sortcolumn++;
				RedrawItems(1, GetItemCount()-1);
				break;
			}
		}
	}
	if (nHideColumns&4 && !(m_nHideColumns&4))
	{
		for (int i=1; i<4; i++)
		{
			if (m_Columns[i] == 3)
			{
				int j = i;
				while (j < 6)
				{
					m_Columns[j] = m_Columns[j+1];
					j++;
				}
				m_Columns[j] = 6;
				DeleteColumn(i);		
				if (m_sortcolumn==i)
					SortList(0, 1);
				if (m_sortcolumn > i)
					m_sortcolumn--;
				break;
			}
		}
	}
	else if (m_nHideColumns&4 && !(nHideColumns&4))
	{
		for (int i=1; i<4; i++)
		{
			if (m_Columns[i] >= 4)
			{
				int j = 6;
				while (j != i)
				{
					m_Columns[j] = m_Columns[j-1];
					j--;
				}
				m_Columns[i] = 3;

				str.LoadString(IDS_HEADER_DATE);
				InsertColumn(i, str, LVCFMT_LEFT, 68);
				if (m_sortcolumn >= i)
					m_sortcolumn++;
				RedrawItems(1, GetItemCount()-1);
				break;
			}
		}
	}
	if (nHideColumns&8 && !(m_nHideColumns&8))
	{
		for (int i=1; i<5; i++)
		{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -