📄 ftplistctrl.cpp
字号:
}
}
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 + -