📄 ftplistctrl.cpp
字号:
if (openindex==m_pDirectory->num)
ChangeDir(m_pDirectory->path,"..",FALSE,FZ_LIST_USECACHE|FZ_LIST_EXACT);
else if (m_pDirectory->direntry[openindex].dir)
ChangeDir(m_pDirectory->path,m_pDirectory->direntry[openindex].name,FALSE,FZ_LIST_USECACHE|FZ_LIST_EXACT);
}
else
{
if (openindex!=-1 && m_pDirectory->direntry[openindex].dir)
{
t_folder folder;
folder.path = m_pDirectory->path;
folder.subdir = m_pDirectory->direntry[openindex].name;
m_PathsToVisit.push_back(folder);
pMainFrame->m_pCommandQueue->SetLock(TRUE);
}
if (!m_PathsToVisit.empty())
{
m_nFolderDownloadStart = TRUE;
m_PathsVisited.push_front(m_pDirectory->path);
m_nBatchAction = 1;
DoNextStep();
}
else
pMainFrame->TransferQueue(2);
}
}
else if (pMsg->wParam == VK_BACK)
{
if (m_pDirectory)
ChangeDir(m_pDirectory->path, "..", FALSE, FZ_LIST_USECACHE|FZ_LIST_EXACT);
else
MessageBeep(MB_ICONEXCLAMATION);
}
}
}
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;
CServerPath tmpPath = path;
tmpPath.AddSubdir( _T("\001\002\003\004\005") );
CString tmp = tmpPath.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)
{
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 & 0x10))
{
ReloadHeaderItem(i, IDS_HEADER_PERMISSIONS);
i++;
}
if (!(m_nHideColumns & 0x20))
{
ReloadHeaderItem(i, 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();
if (permissions.GetLength() >= 10)
{
//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 (dlg.m_permbuffer[9])
value += dlg.m_permbuffer[9] * 1000;
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)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -