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

📄 sitemanager.cpp

📁 一个支持FTP,SFTP的客户端程序
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			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 + -