📄 sitemanager.cpp
字号:
if (AfterProc)
AfterProc(lpData, name, item);
}
else if (pMarkup->GetChildTagName()==_T("Site") )
{
t_SiteManagerItem *site=GetDataXML(pMarkup);
if (site)
{
site->NodeType = SITE;
CString name=pMarkup->GetChildAttrib( _T("Name") );
if ( NewItemProc)
NewItemProc(lpData, name, parent, site, _ttoi(pMarkup->GetChildAttrib( _T("DefaultSite") ))?1:0, lpDefault);
}
}
}
}
void CSiteManager::OnSelchangingSitemanagertree(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
if (!CheckValid())
{
*pResult = 1;
return;
}
pNMTreeView->itemNew;
pNMTreeView->itemOld;
*pResult = 0;
}
void CSiteManager::OnSelchangedSitemanagertree(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
t_SiteManagerItem *pSiteManagerItem = (t_SiteManagerItem *)pNMTreeView->itemNew.lParam;
ASSERT(pSiteManagerItem);
if (pSiteManagerItem->NodeType == SITE)
{
DisplaySite(pSiteManagerItem);
}
else
DisplaySite(0);
*pResult = 0;
}
void CSiteManager::DisplaySite(t_SiteManagerItem *site)
{
if (site && site->NodeType == SITE)
{
m_Host=site->Host;
m_Port.Format( _T("%d"), site->nPort);
m_Logontype = site->nLogonType;
if (site->bPassDontSave)
site->Pass="";
if (m_Logontype)
{
m_User = site->User;
m_Pass = site->Pass;
m_Account = site->Account;
}
else
{
m_User = _T("anonymous");
m_Pass = COptions::GetOption(OPTION_ANONPWD);
m_Account = _T("");
}
m_bFwBypass=site->bFirewallBypass;
m_bPassDontSave=site->bPassDontSave;
m_nDefault=(m_cTree.GetSelectedItem()==m_DefaultSite)?0:-1;
m_cServerType.SetCurSel(site->nServerType);
m_nServerType = site->nServerType;
CWnd *pComments = GetDlgItem(IDC_SITEMANAGER_COMMENTS);
if (pComments)
pComments->SetWindowText(site->Comments);
}
else
{
m_Host="";
m_Port="";
m_User="";
m_Account = _T("");
m_Pass="";
m_Logontype=-1;
m_bFwBypass=0;
m_nDefault=-1;
m_cServerType.SetCurSel(-1);
CWnd *pComments = GetDlgItem(IDC_SITEMANAGER_COMMENTS);
if (pComments)
pComments->SetWindowText(_T(""));
}
UpdateData(FALSE);
SetCtrlState();
}
void CSiteManager::OnItemexpandedSitemanagertree(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
int image=(pNMTreeView->itemNew.state&TVIS_EXPANDED)?1:0;
m_cTree.SetItemImage(pNMTreeView->itemNew.hItem,image,image);
*pResult = 0;
}
BOOL CSiteManager::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message==WM_KEYDOWN)
{
CEdit *edit=m_cTree.GetEditControl();
if (edit) //Send key messages to the edit field
{
if (pMsg->wParam==VK_RETURN || pMsg->wParam==VK_ESCAPE)
{
edit->SendMessage(WM_KEYDOWN, pMsg->wParam, pMsg->lParam);
return TRUE;
}
}
else if (pMsg->wParam==VK_F2)
{
HTREEITEM item=m_cTree.GetSelectedItem();
if (!item)
return TRUE;
if (!m_cTree.GetParentItem(item))
return TRUE;
m_cTree.EditLabel(item);
return TRUE;
}
else if (pMsg->wParam==VK_DELETE)
{
if (GetFocus()==&m_cTree)
{
HTREEITEM item=m_cTree.GetSelectedItem();
if (!item)
return TRUE;
if (!m_cTree.GetParentItem(item))
return TRUE;
OnDelete();
return TRUE;
}
}
}
return CDialog::PreTranslateMessage(pMsg);
}
void CSiteManager::OnDblclkSitemanagertree(NMHDR* pNMHDR, LRESULT* pResult)
{
*pResult = 0;
HTREEITEM item=m_cTree.GetSelectedItem();
t_SiteManagerItem *site=0;
if (item)
site=(t_SiteManagerItem *)m_cTree.GetItemData(item);
ASSERT(site);
if (site->NodeType != SITE)
return;
*pResult = TRUE;
OnOK();
}
DWORD CSiteManager::RegDeleteKeyEx(CString subkey)
{
HKEY key;
int retval = RegOpenKeyEx(HKEY_CURRENT_USER, subkey, 0, KEY_ALL_ACCESS, &key);
if (retval==ERROR_SUCCESS)
{
TCHAR buffer[1024];
int index=0;
while (RegEnumKey(key,index,buffer,1024)==ERROR_SUCCESS)
{
CString newkey=subkey+"\\";
newkey+=buffer;
if ((retval=RegDeleteKeyEx(newkey)) != ERROR_SUCCESS)
index++;
}
RegCloseKey(key);
retval = RegDeleteKey(HKEY_CURRENT_USER, subkey);
}
return retval;
}
void CSiteManager::OnEndlabeleditSitemanagertree(NMHDR* pNMHDR, LRESULT* pResult)
{
TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
if (!pTVDispInfo->item.pszText)
return;
CString text = pTVDispInfo->item.pszText;
text.Replace(_T("\\"), _T(""));
text.Replace(_T("\""), _T(""));
text.TrimLeft(' ');
text.TrimRight(' ');
_tcscpy(pTVDispInfo->item.pszText, text);
if (text == "")
return;
CString newstr = text;
newstr.MakeLower();
HTREEITEM item=m_cTree.GetNextSiblingItem(pTVDispInfo->item.hItem);
while(item)
{
CString oldstr=m_cTree.GetItemText(item);
oldstr.MakeLower();
if (oldstr==newstr)
{
AfxMessageBox(IDS_ERRORMSG_SITEMANAGERNAMEINUSE,MB_OK|MB_ICONEXCLAMATION);
m_cTree.SetFocus();
m_cTree.EditLabel(pTVDispInfo->item.hItem);
*pResult=0;
return;
}
item=m_cTree.GetNextSiblingItem(item);
}
item=m_cTree.GetPrevSiblingItem(pTVDispInfo->item.hItem);
while(item)
{
CString oldstr=m_cTree.GetItemText(item);
oldstr.MakeLower();
if (oldstr==newstr)
{
AfxMessageBox(IDS_ERRORMSG_SITEMANAGERNAMEINUSE,MB_OK|MB_ICONEXCLAMATION);
m_cTree.SetFocus();
m_cTree.EditLabel(pTVDispInfo->item.hItem);
*pResult=0;
return;
}
item=m_cTree.GetPrevSiblingItem(item);
}
item=pTVDispInfo->item.hItem;
CString path;
while (m_cTree.GetParentItem(item))
{
path=m_cTree.GetItemText(item)+"\\"+path;
item=m_cTree.GetParentItem(item);
}
path.TrimRight( _T("\\") );
m_KeysToDelete.push_back(path);
m_cTree.SetItemText(pTVDispInfo->item.hItem, text);
((t_SiteManagerItem*)m_cTree.GetItemData(pTVDispInfo->item.hItem))->name = text;
if (COptions::GetOptionVal(OPTION_SORTSITEMANAGERFOLDERSFIRST))
{
TVSORTCB pMy_Sort;
pMy_Sort.hParent = m_cTree.GetParentItem(pTVDispInfo->item.hItem);
pMy_Sort.lpfnCompare = SortFoldersFirst;
pMy_Sort.lParam = (LPARAM) &m_cTree;
m_cTree.SortChildrenCB(&pMy_Sort);
}
else
m_cTree.SortChildren(m_cTree.GetParentItem(pTVDispInfo->item.hItem));
*pResult = TRUE;
}
void CSiteManager::OnSitemanagerNewfolder()
{
if (!CheckValid())
return;
HTREEITEM parent=m_cTree.GetSelectedItem();
if (!parent)
parent=m_cTree.GetRootItem();
if (((t_SiteManagerItem *)m_cTree.GetItemData(parent))->NodeType == SITE)
parent=m_cTree.GetParentItem(parent);
CString name;
name.Format(IDS_SITEMANAGER_NEWFOLDER);
HTREEITEM child=m_cTree.GetChildItem(parent);
int i=2;
while (child)
{
CString name2=name;
name2.MakeLower();
CString childstr=m_cTree.GetItemText(child);
childstr.MakeLower();
if (childstr==name2)
{
child=m_cTree.GetChildItem(parent);
name.Format(IDS_SITEMANAGER_NEWFOLDERWITHNUM,i);
i++;
continue;
}
child=m_cTree.GetNextItem(child,TVGN_NEXT);
}
HTREEITEM item=m_cTree.InsertItem(name,0,0,parent,TVI_SORT);
t_SiteManagerItem *pFolder = new t_SiteManagerItem;
pFolder->name=name;
pFolder->NodeType=FOLDER;
m_cTree.SetItemData(item, (DWORD)pFolder);
// Re-sort with folders first if that option is selected. This must come AFTER the SetItemData command above.
if (COptions::GetOptionVal(OPTION_SORTSITEMANAGERFOLDERSFIRST))
{
TVSORTCB pMy_Sort;
pMy_Sort.hParent = parent;
pMy_Sort.lpfnCompare = SortFoldersFirst;
pMy_Sort.lParam = (LPARAM) &m_cTree;
m_cTree.SortChildrenCB(&pMy_Sort);
}
m_cTree.Expand(parent,TVE_EXPAND);m_cTree.SelectItem(item);
DisplaySite(0);
m_cTree.EditLabel(item);
}
t_SiteManagerItem * CSiteManager::GetDefaultSite(CString substring)
{
if (substring == "")
{
CMarkupSTL *pMarkup;
if (COptions::LockXML(&pMarkup))
{
pMarkup->ResetPos();
if (pMarkup->FindChildElem( _T("Sites") ))
{
pMarkup->IntoElem();
t_SiteManagerItem *pSite = GetDefaultSiteXML(pMarkup);
COptions::UnlockXML();
return pSite;
}
COptions::UnlockXML();
}
}
HKEY key;
HKEY hRootKey = HKEY_CURRENT_USER;
if (RegOpenKey(HKEY_CURRENT_USER, "Software\\FileZilla\\Site Manager\\" + substring, &key) != ERROR_SUCCESS)
{
if (RegOpenKey(HKEY_LOCAL_MACHINE, "Software\\FileZilla\\Site Manager\\"+substring, &key) != ERROR_SUCCESS)
return 0;
hRootKey = HKEY_LOCAL_MACHINE;
}
TCHAR buffer[1000];
int index=0;
unsigned char value[1000];
DWORD length=1000;
CString value2=value;
value[0]=0;
RegQueryValueEx(key, _T(""), 0, 0, value, &length);
if (!_tcscmp((LPCTSTR)value, _T("Folder") ) || substring=="")
{
length=1000;
while(RegEnumKeyEx(key,index,buffer,&length,0,0,0,0)==ERROR_SUCCESS)
{
t_SiteManagerItem *site;
if(substring == "")
site=GetDefaultSite(buffer);
else
site=GetDefaultSite(substring+"\\"+buffer);
if (site)
return site;
index++;
length=1000;
}
}
else
{
t_SiteManagerItem *site = GetData(hRootKey, substring);
if (site)
{
if (GetKey(hRootKey, substring,"Default Site")=="1")
return site;
else
delete site;
}
index++;
length=1000;
}
RegCloseKey(key);
return 0;
}
t_SiteManagerItem * CSiteManager::GetDefaultSiteXML(CMarkupSTL *pMarkup)
{
while (pMarkup->FindChildElem())
{
if (pMarkup->GetChildTagName()==_T("Folder") )
{
pMarkup->IntoElem();
t_SiteManagerItem *pSite=GetDefaultSiteXML(pMarkup);
if (pSite)
return pSite;
pMarkup->OutOfElem();
}
else if (pMarkup->GetChildTagName()==_T("Site") )
{
t_SiteManagerItem *site=GetDataXML(pMarkup);
if (site)
{
if (_ttoi(pMarkup->GetChildAttrib( _T("DefaultSite") )))
return site;
else
delete site;
}
}
}
return 0;
}
void CSiteManager::OnBegindragSitemanagertree(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Code f黵 die Behandlungsroutine der Steuerelement-Benachrichtigung hier einf黦en
//Start of a Drag&Drop operation
*pResult = 0;
if (!CheckValid())
{
return;
}
if (!pNMTreeView->itemNew.hItem || pNMTreeView->itemNew.hItem==m_cTree.GetRootItem())
return;
m_cTree.EnsureVisible(pNMTreeView->itemNew.hItem);
m_pDragImage=m_cTree.CreateDragImage(pNMTreeView->itemNew.hItem);
if (m_pDragImage == NULL)
{
return;
}
m_hDragItem=pNMTreeView->itemNew.hItem;
CRect rect;
::GetWindowRect(m_cTree.m_hWnd, &rect);
CPoint pt2 = pNMTreeView->ptDrag;
pt2.Offset(rect.left, rect.top);
m_pDragImage->BeginDrag(0, CPoint(0,0));
m_pDragImage->DragEnter(0, pt2);
SetCapture();
}
void CSiteManager::OnMouseMove(UINT nFlags, CPoint point)
{
if (m_pDragImage) // In Drag&Drop mode ?
{
CPoint ptDropPoint(point);
ClientToScreen(&ptDropPoint);
CWnd* pDropWnd = CWnd::WindowFromPoint(ptDropPoint);
m_pDragImage->DragMove(ptDropPoint);
//Scroll through tree
RECT rect;
m_cTree.GetWindowRect(&rect);
if (ptDropPoint.x>=rect.left && ptDropPoint.x<=rect.right)
{
m_CurPos=ptDropPoint;
if (ptDropPoint.y<(rect.top+5))
{
if (!m_nDragScrollTimerID)
{
HTREEITEM hItem=m_cTree.GetFirstVisibleItem();
if (hItem)
hItem=m_cTree.GetNextItem(hItem, TVGN_PREVIOUSVISIBLE);
if (hItem)
{
m_nDragScrollTimerID=SetTimer(365, 250, 0);
m_pDragImage->DragShowNolock(FALSE);
m_cTree.EnsureVisible(hItem);
m_cTree.RedrawWindow();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -