📄 sitemanager.cpp
字号:
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 newstr=pTVDispInfo->item.pszText;
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,pTVDispInfo->item.pszText);
((t_SiteManagerItem*)m_cTree.GetItemData(pTVDispInfo->item.hItem))->name = pTVDispInfo->item.pszText;
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;
if (RegOpenKey(HKEY_CURRENT_USER,"Software\\FileZilla\\Site Manager\\"+substring,&key)==ERROR_SUCCESS)
{
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(substring);
if (site)
{
if (GetKey(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();
m_pDragImage->DragShowNolock(TRUE);
}
}
}
else if (ptDropPoint.y>(rect.bottom-5))
{
if (!m_nDragScrollTimerID)
{
HTREEITEM hItem=m_cTree.GetFirstVisibleItem();
while(hItem)
{
RECT iRect;
m_cTree.GetItemRect(hItem, &iRect, TRUE);
if (iRect.bottom>=(rect.bottom-rect.top))
{
m_nDragScrollTimerID=SetTimer(365, 250, 0);
m_pDragImage->DragShowNolock(FALSE);
m_cTree.EnsureVisible(hItem);
m_pDragImage->DragShowNolock(TRUE);
break;
}
hItem=m_cTree.GetNextItem(hItem, TVGN_NEXTVISIBLE);
}
}
}
else
{
if (m_nDragScrollTimerID)
KillTimer(m_nDragScrollTimerID);
m_nDragScrollTimerID=0;
}
}
if (pDropWnd != &m_cTree)
{
SetCursor(m_hcNo);
return;
}
HTREEITEM hItem=m_cTree.HitTest(point);
if (hItem!=m_hDropItem)
{
m_pDragImage->DragShowNolock(FALSE);
m_cTree.SelectDropTarget(hItem);
m_pDragImage->DragShowNolock(TRUE);
m_hDropItem=hItem;
}
int bError=FALSE;
if (hItem==m_hDragItem)
bError=FALSE;
else if (!hItem || ((t_SiteManagerItem *)m_cTree.GetItemData(hItem))->NodeType == SITE)
bError=TRUE;
else
bError=FALSE;
HTREEITEM hTemp=hItem;
hTemp=m_cTree.GetParentItem(hTemp);
while ( (hTemp) )
{
if (hTemp==m_hDragItem)
bError=TRUE;
hTemp=m_cTree.GetParentItem(hTemp);
}
if (!bError)
{
CString dragstr=m_cTree.GetItemText(m_hDragItem);
dragstr.MakeLower();
HTREEITEM hChild=m_cTree.GetChildItem(hItem);
while (hChild && !bError)
{
if (hChild!=m_hDragItem)
{
CString str=m_cTree.GetItemText(hChild);
str.MakeLower();
if (str==dragstr)
bError=TRUE;
else
hChild=m_cTree.GetNextItem(hChild, TVGN_NEXT);
}
else
hChild=m_cTree.GetNextItem(hChild, TVGN_NEXT);
}
}
SetCursor( bError ? m_hcNo : m_hcArrow );
return;
}
CDialog::OnMouseMove(nFlags, point);
}
void CSiteManager::OnLButtonUp(UINT nFlags, CPoint point)
{
if (m_pDragImage) // In Drag&Drop mode ?
{
if (m_nDragScrollTimerID)
KillTimer(m_nDragScrollTimerID);
m_nDragScrollTimerID=0;
ASSERT(m_hDragItem);
HTREEITEM hDropItem=m_cTree.GetDropHilightItem();
m_cTree.SelectDropTarget(0);
::ReleaseCapture();
m_pDragImage->DragLeave(GetDesktopWindow());
m_pDragImage->EndDrag();
CPoint pt(point);
ClientToScreen(&pt);
CWnd* m_pDropWnd = WindowFromPoint(pt);
if (m_pDropWnd == &m_cTree)
{
BOOL nError=0;
if (hDropItem==m_hDragItem || m_cTree.GetParentItem(m_hDragItem)==hDropItem)
nError=2;
else if (!hDropItem || ((t_SiteManagerItem*)m_cTree.GetItemData(hDropItem))->NodeType == SITE)
nError=1;
else
nError=0;
HTREEITEM hTemp=hDropItem;
hTemp=m_cTree.GetParentItem(hTemp);
while ( (hTemp) )
{
if (hTemp==m_hDragItem)
nError=1;
hTemp=m_cTree.GetParentItem(hTemp);
}
if (!nError)
{
CString dragstr=m_cTree.GetItemText(m_hDragItem);
dragstr.MakeLower();
HTREEITEM hChild=m_cTree.GetChildItem(hDropItem);
while (hChild && !nError)
{
if (hChild!=m_hDragItem)
{
CString str=m_cTree.GetItemText(hChild);
str.MakeLower();
if (str==dragstr)
nError=1;
else
hChild=m_cTree.GetNextItem(hChild, TVGN_NEXT);
}
else
hChild=m_cTree.GetNextItem(hChild, TVGN_NEXT);
}
}
if (nError==1)
MessageBeep(MB_ICONEXCLAMATION);
if (!nError)
{ //Do the actual moving
HTREEITEM hDragParent=m_cTree.GetParentItem(m
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -