📄 connectdlg.cpp
字号:
/****************************************************************/
/* */
/* 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 + -