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

📄 connectdlg.cpp

📁 FTP客户端
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/****************************************************************/
/*																*/
/*  ConnectDlg.cpp												*/
/*																*/
/*  Implementation of the CConnectDlg class.					*/
/*																*/
/*  Programmed by Pablo van der Meer							*/
/*  Copyright Pablo Software Solutions 2002						*/
/*	http://www.pablovandermeer.nl								*/
/*																*/
/*  Last updated: 15 may 2002									*/
/*																*/
/****************************************************************/


#include "stdafx.h"
#include "ftpwanderer.h"
#include "ConnectDlg.h"
#include "WizardPages.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


CConnectDlg::CConnectDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CConnectDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CConnectDlg)
	m_strAddress = _T("");
	m_bAnonymous = FALSE;
	m_nRetries = 3;
	m_strDescription = _T("");
	m_strLocalPath = _T("");
	m_strLogin = _T("");
	m_strName = _T("");
	m_strPassword = _T("");
	m_nPort = 21;
	m_strRemotePath = _T("");
	m_nRetryDelay = 10;
	m_bUsePASVMode = FALSE;
	//}}AFX_DATA_INIT

	GetAppDir(m_strFilename);
	m_strFilename += "sites.dat";

	m_bModified = FALSE;
}


void CConnectDlg::DoDataExchange(CDataExchange* pDX)
{	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CConnectDlg)
	DDX_Control(pDX, IDC_PROFILE_NAME, m_wndInfobarCtrl);
	DDX_Control(pDX, IDC_SITES, m_listSites);
	DDX_Text(pDX, IDC_ADDRESS, m_strAddress);
	DDX_Check(pDX, IDC_ANONYMOUS, m_bAnonymous);
	DDX_Text(pDX, IDC_RETRIES, m_nRetries);
	DDX_Text(pDX, IDC_DESCRIPTION, m_strDescription);
	DDX_Text(pDX, IDC_LOCALPATH, m_strLocalPath);
	DDX_Text(pDX, IDC_LOGIN, m_strLogin);
	DDX_Text(pDX, IDC_NAME, m_strName);
	DDX_Text(pDX, IDC_PASSWORD, m_strPassword);
	DDX_Text(pDX, IDC_PORT, m_nPort);
	DDX_Text(pDX, IDC_REMOTEPATH, m_strRemotePath);
	DDX_Text(pDX, IDC_RETRYDELAY, m_nRetryDelay);
	DDX_Check(pDX, IDC_USE_PASVMODE, m_bUsePASVMode);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CConnectDlg, CDialog)
	//{{AFX_MSG_MAP(CConnectDlg)
	ON_BN_CLICKED(IDC_SAVE, OnSave)
	ON_BN_CLICKED(IDC_ADD, OnAdd)
	ON_LBN_SELCHANGE(IDC_SITES, OnSelchangeSites)
	ON_BN_CLICKED(IDC_REMOVE, OnRemove)
	ON_BN_CLICKED(IDC_BROWSE, OnBrowse)
	ON_LBN_DBLCLK(IDC_SITES, OnDblclkSites)
	ON_BN_CLICKED(IDC_ANONYMOUS, OnAnonymous)
	ON_EN_CHANGE(IDC_NAME, OnChangeName)
	ON_BN_CLICKED(IDC_WIZARD, OnWizard)
	ON_EN_CHANGE(IDC_LOCALPATH, OnSomethingChanged)
	ON_EN_CHANGE(IDC_DESCRIPTION, OnSomethingChanged)
	ON_EN_CHANGE(IDC_RETRIES, OnSomethingChanged)
	ON_EN_CHANGE(IDC_ADDRESS, OnSomethingChanged)
	ON_EN_CHANGE(IDC_PASSWORD, OnSomethingChanged)
	ON_EN_CHANGE(IDC_PORT, OnSomethingChanged)
	ON_EN_CHANGE(IDC_REMOTEPATH, OnSomethingChanged)
	ON_EN_CHANGE(IDC_RETRYDELAY, OnSomethingChanged)
	ON_BN_CLICKED(IDC_USE_PASVMODE, OnSomethingChanged)
	ON_EN_CHANGE(IDC_LOGIN, OnChangeLogin)
	//}}AFX_MSG_MAP
	ON_UPDATE_COMMAND_UI(IDC_SAVE, OnUpdateSave)
	ON_UPDATE_COMMAND_UI(IDC_REMOVE, OnUpdateRemove)
	ON_UPDATE_COMMAND_UI(IDOK, OnUpdateConnect)
END_MESSAGE_MAP()


/********************************************************************/
/*																	*/
/* Function name : OnInitDialog										*/
/* Description   : Initialize dialog								*/
/*																	*/
/********************************************************************/
BOOL CConnectDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// center in parent
	CenterWindow();

	// get site data
	Serialize(FALSE);	

	// fill sites list
	for (int i=0; i < m_SitesArray.GetSize(); i++)
	{
		int nIndex = m_listSites.AddString(m_SitesArray[i].m_strName);
		m_listSites.SetItemData(nIndex, i);
	}
	int nIndex = AfxGetApp()->GetProfileInt("Settings", "LastSelectedSite", 0);
	m_listSites.SetCurSel(nIndex);
	OnSelchangeSites();

	return TRUE;
}


/********************************************************************/
/*																	*/
/* Function name : Serialize										*/
/* Description   : Call this function to store/load the site data	*/
/*																	*/
/********************************************************************/
BOOL CConnectDlg::Serialize(BOOL bStoring)
{
	static const TCHAR* lpszSignature = _T("Pablo Software Solutions - StoreObject");

	CFile file;

	if (file.Open(m_strFilename, bStoring ? CFile::modeWrite|CFile::modeCreate : CFile::modeRead))
	{
		TRY
		{
			CString str; 
			CArchive ar(&file, bStoring ? CArchive::store : CArchive::load);
			
			if (bStoring)
			{
				// save signature
				ar << CString(lpszSignature);

				// Save the changed site details
				for (int i=0; i < m_SitesArray.GetSize(); i++)
				{
					m_SitesArray[i].Serialize(ar);
				}

				ar.Flush();
				m_bModified = FALSE;
//				UpdateDialogControls(this, FALSE);	
			}
			else
			{
				// load signature
				ar >> str;
				// if this the file we are looking for ?
				if (str.Compare(lpszSignature) == 0)
				{
					int nCount=0;

					while(!ar.IsBufferEmpty())
					{
						CFtpSite ftpSite;

						// get site data
						ftpSite.Serialize(ar);
						
						// add site to array
						m_SitesArray.Add(ftpSite);
					}
				}
			}
			ar.Close();
			file.Close();
		}
		CATCH_ALL(e)
		{
			// catch all exceptions that might happen ...
			return FALSE;
		}
		END_CATCH_ALL
	}
	return TRUE;
}


/********************************************************************/
/*																	*/
/* Function name : OnAdd											*/
/* Description   : Add the entered site to the list					*/
/*																	*/
/********************************************************************/
void CConnectDlg::OnAdd() 
{
	// check stuff ...
	if (!ValidateData())
		return;

	for (int i=0; i<m_listSites.GetCount(); i++)
	{
		CString strName;
		m_listSites.GetText(i, strName);
		if (strName.CompareNoCase(m_strName) == 0)
		{
			// clear name field !
			GetDlgItem(IDC_NAME)->SetWindowText("");
			GetDlgItem(IDC_NAME)->SetFocus();
			return;
		}
	}

	CFtpSite ftpSite;

	int nIndex = m_listSites.AddString(m_strName);
	int nItem = m_SitesArray.Add(ftpSite);
	
	m_listSites.SetItemData(nIndex, nItem);
	m_listSites.SetCurSel(nIndex);	

	m_SitesArray[nItem].m_bUsePASVMode = m_bUsePASVMode;
	m_SitesArray[nItem].m_nRetries = m_nRetries;
	m_SitesArray[nItem].m_nPort = m_nPort;
	m_SitesArray[nItem].m_nRetryDelay = m_nRetryDelay;
	m_SitesArray[nItem].m_strAddress = m_strAddress;
	m_SitesArray[nItem].m_strDescription = m_strDescription;
	m_SitesArray[nItem].m_strLocalPath = m_strLocalPath;
	m_SitesArray[nItem].m_strLogin = m_strLogin;
	m_SitesArray[nItem].m_strName = m_strName;
	m_SitesArray[nItem].m_strPassword = m_strPassword;
	m_SitesArray[nItem].m_strRemotePath = m_strRemotePath;
	
//	UpdateDialogControls(this, FALSE);	
	Serialize(TRUE);
	UpdateDialogControls(this, FALSE);	
}


/********************************************************************/
/*																	*/
/* Function name : OnSave											*/
/* Description   : Save entered data								*/
/*																	*/
/********************************************************************/
void CConnectDlg::OnSave() 
{
	// check stuff ...
	if (!ValidateData())
		return;

	int nIndex = m_listSites.GetCurSel();
	if (nIndex != LB_ERR)
	{
		int nItem = m_listSites.GetItemData(nIndex);
		m_SitesArray[nItem].m_bUsePASVMode = m_bUsePASVMode;
		m_SitesArray[nItem].m_nRetries = m_nRetries;
		m_SitesArray[nItem].m_nPort = m_nPort;
		m_SitesArray[nItem].m_nRetryDelay = m_nRetryDelay;
		m_SitesArray[nItem].m_strAddress = m_strAddress;
		m_SitesArray[nItem].m_strDescription = m_strDescription;
		m_SitesArray[nItem].m_strLocalPath = m_strLocalPath;
		m_SitesArray[nItem].m_strLogin = m_strLogin;
		m_SitesArray[nItem].m_strName = m_strName;
		m_SitesArray[nItem].m_strPassword = m_strPassword;
		m_SitesArray[nItem].m_strRemotePath = m_strRemotePath;
		m_listSites.DeleteString(nIndex);
		nIndex = m_listSites.AddString(m_strName);

		m_listSites.SetItemData(nIndex, nItem);
		m_listSites.SetCurSel(nIndex);	
		Serialize(TRUE);	
		UpdateDialogControls(this, FALSE);	
	}
}


/********************************************************************/
/*																	*/
/* Function name : OnRemove											*/
/* Description   : Remove selected entry from the list				*/
/*																	*/
/********************************************************************/
void CConnectDlg::OnRemove() 
{
	int nIndex = m_listSites.GetCurSel();
	if (nIndex == LB_ERR)
		return;

	int nItem = m_listSites.GetItemData(nIndex);
	// remove site from listbox
	m_listSites.DeleteString(nIndex);
	// remove site from array
	m_SitesArray.RemoveAt(nItem);

	// update item data values
	for (int i=0; i<m_listSites.GetCount(); i++)
	{
		int nItemData = m_listSites.GetItemData(i);
		if (nItemData > nIndex)
			m_listSites.SetItemData(i, nItemData-1);
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -