📄 useraccountsdlg.cpp
字号:
/****************************************************************/
/* */
/* UserAccountsDlg.cpp */
/* */
/* Implementation of the CUserAccountsDlg class. */
/* */
/* Programmed by Pablo van der Meer */
/* Copyright Pablo Software Solutions 2002 */
/* http://www.pablovandermeer.nl */
/* */
/* Last updated: 10 july 2002 */
/* */
/****************************************************************/
#include "stdafx.h"
#include "FTPServerApp.h"
#include "UserAccountsDlg.h"
#include "AddUserDlg.h"
#include "DirectoryDlg.h"
#include "WizardPages.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CFTPServerApp theApp;
CUserAccountsDlg::CUserAccountsDlg(CWnd* pParent /*=NULL*/)
: CDialogResize(CUserAccountsDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CUserAccountsDlg)
m_strPassword = _T("");
m_bDisableAccount = FALSE;
//}}AFX_DATA_INIT
m_nPreviousIndex = LB_ERR;
m_hIcon = AfxGetApp()->LoadIcon(IDI_FTPSERVER);
}
CUserAccountsDlg::~CUserAccountsDlg()
{
}
void CUserAccountsDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogResize::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CUserAccountsDlg)
DDX_Control(pDX, IDC_USERS, m_UsersList);
DDX_Control(pDX, IDC_DIR_LIST, m_DirectoryList);
DDX_Text(pDX, IDC_PASSWORD, m_strPassword);
DDX_Check(pDX, IDC_DISABLE_ACCOUNT, m_bDisableAccount);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CUserAccountsDlg, CDialogResize)
//{{AFX_MSG_MAP(CUserAccountsDlg)
ON_LBN_SELCHANGE(IDC_USER_LIST, OnSelchangeUserlist)
ON_NOTIFY(NM_DBLCLK, IDC_DIR_LIST, OnDblclkDirlist)
ON_BN_CLICKED(IDC_ADD_DIR, OnAddDir)
ON_BN_CLICKED(IDC_EDIT_DIR, OnEditDir)
ON_BN_CLICKED(IDC_DEL_DIR, OnDelDir)
ON_BN_CLICKED(IDC_SET_HOME, OnSetHome)
ON_BN_CLICKED(IDC_ADD_USER, OnAddUser)
ON_BN_CLICKED(IDC_EDIT_USER, OnEditUser)
ON_BN_CLICKED(IDC_DEL_USER, OnDelUser)
ON_UPDATE_COMMAND_UI(IDC_EDIT_USER, OnUpdateControls)
ON_UPDATE_COMMAND_UI(IDC_DISABLE_ACCOUNT, OnUpdateDisableAccount)
ON_NOTIFY(NM_CLICK, IDC_USERS, OnClickUsers)
ON_NOTIFY(LVN_KEYDOWN, IDC_USERS, OnKeydownUsers)
ON_BN_CLICKED(IDC_DISABLE_ACCOUNT, OnDisableAccount)
ON_UPDATE_COMMAND_UI(IDC_DEL_USER, OnUpdateControls)
ON_UPDATE_COMMAND_UI(IDC_PASSWORD, OnUpdateControls)
ON_UPDATE_COMMAND_UI(IDC_DIR_LIST, OnUpdateControls)
ON_UPDATE_COMMAND_UI(IDC_ADD_DIR, OnUpdateControls)
ON_UPDATE_COMMAND_UI(IDC_EDIT_DIR, OnUpdateControls)
ON_UPDATE_COMMAND_UI(IDC_DEL_DIR, OnUpdateControls)
ON_UPDATE_COMMAND_UI(IDC_SET_HOME, OnUpdateControls)
ON_BN_CLICKED(IDC_WIZARD, OnWizard)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BEGIN_DLGRESIZE_MAP(CUserAccountsDlg)
DLGRESIZE_CONTROL(IDC_ADD_DIR, DLSZ_MOVE_Y)
DLGRESIZE_CONTROL(IDC_EDIT_DIR, DLSZ_MOVE_Y)
DLGRESIZE_CONTROL(IDC_DEL_DIR, DLSZ_MOVE_X | DLSZ_MOVE_Y)
DLGRESIZE_CONTROL(IDC_SET_HOME, DLSZ_MOVE_X | DLSZ_MOVE_Y)
DLGRESIZE_CONTROL(IDCANCEL, DLSZ_MOVE_X | DLSZ_MOVE_Y)
DLGRESIZE_CONTROL(IDOK, DLSZ_MOVE_X | DLSZ_MOVE_Y)
DLGRESIZE_CONTROL(IDC_DIR_LIST, DLSZ_SIZE_X | DLSZ_SIZE_Y)
DLGRESIZE_CONTROL(IDC_STATIC3, DLSZ_SIZE_X | DLSZ_SIZE_Y)
DLGRESIZE_CONTROL(IDC_STATIC1, DLSZ_SIZE_Y)
DLGRESIZE_CONTROL(IDC_STATIC2, DLSZ_SIZE_X)
DLGRESIZE_CONTROL(IDC_USERS, DLSZ_SIZE_Y)
DLGRESIZE_CONTROL(IDC_ADD_USER, DLSZ_MOVE_Y)
DLGRESIZE_CONTROL(IDC_EDIT_USER, DLSZ_MOVE_Y)
DLGRESIZE_CONTROL(IDC_DEL_USER, DLSZ_MOVE_Y)
DLGRESIZE_CONTROL(IDC_WIZARD, DLSZ_MOVE_Y)
END_DLGRESIZE_MAP()
/********************************************************************/
/* */
/* Function name : OnInitDialog */
/* Description : Initialize dialog */
/* */
/********************************************************************/
BOOL CUserAccountsDlg::OnInitDialog()
{
CDialogResize::OnInitDialog();
InitResizing();
// Set the icon for this dialog.
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
CRect rc;
m_UsersList.GetClientRect(rc);
m_UsersList.InsertColumn(0, "Users", LVCFMT_LEFT, rc.Width()-5);
// fill user list
for (int i=0; i < m_UserArray.GetSize(); i++)
{
int nIndex = m_UsersList.InsertItem(0, m_UserArray[i].m_strName, 2);
m_UsersList.SetItemData(nIndex, i);
}
// setup directory list
m_DirectoryList.InsertColumn(0, "Physical Path", LVCFMT_LEFT, 100);
m_DirectoryList.InsertColumn(1, "Virtual Path", LVCFMT_LEFT, 100);
m_DirectoryList.InsertColumn(2, "Download", LVCFMT_LEFT, 10);
m_DirectoryList.InsertColumn(3, "Upload", LVCFMT_LEFT, 10);
m_DirectoryList.InsertColumn(4, "Rename", LVCFMT_LEFT, 10);
m_DirectoryList.InsertColumn(5, "Delete", LVCFMT_LEFT, 10);
m_DirectoryList.InsertColumn(6, "Create Dir", LVCFMT_LEFT, 10);
// create and attach imagelist
m_ImageList.Create(16, 16, ILC_MASK, 3, 3);
HICON hIcon = AfxGetApp()->LoadIcon(IDI_NONE);
m_ImageList.Add(hIcon);
DestroyIcon(hIcon);
hIcon = AfxGetApp()->LoadIcon(IDI_HOME);
m_ImageList.Add(hIcon);
DestroyIcon(hIcon);
hIcon = AfxGetApp()->LoadIcon(IDI_USER);
m_ImageList.Add(hIcon);
DestroyIcon(hIcon);
m_DirectoryList.SetImageList(&m_ImageList, LVSIL_SMALL);
m_UsersList.SetImageList(&m_ImageList, LVSIL_SMALL);
// select preferred user ?
if (!m_strUserName.IsEmpty())
{
LVFINDINFO info;
info.flags = LVFI_STRING;
info.psz = (LPCTSTR)m_strUserName;
int nIndex = m_UsersList.FindItem(&info);
m_UsersList.SetItemState(nIndex ,LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
}
else
{
m_UsersList.SetItemState(0 ,LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
}
GetDlgItem(IDC_PASSWORD)->ModifyStyle(NULL, ES_PASSWORD);
((CEdit *)GetDlgItem(IDC_PASSWORD))->SetPasswordChar('*');
OnSelchangeUserlist();
UpdateDialogControls(this, FALSE);
AutoSizeColumns();
return TRUE;
}
/********************************************************************/
/* */
/* Function name : OnClickUsers */
/* Description : Selection in the user listcontrol has changed. */
/* */
/********************************************************************/
void CUserAccountsDlg::OnClickUsers(NMHDR* pNMHDR, LRESULT* pResult)
{
OnSelchangeUserlist();
*pResult = 0;
}
/********************************************************************/
/* */
/* Function name : OnKeydownUsers */
/* Description : Selection in the user listcontrol has changed. */
/* */
/********************************************************************/
void CUserAccountsDlg::OnKeydownUsers(NMHDR* pNMHDR, LRESULT* pResult)
{
LV_KEYDOWN* pLVKeyDow = (LV_KEYDOWN*)pNMHDR;
// get index of selected item
int nIndex = m_UsersList.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);
if(nIndex == -1)
return;
if (pLVKeyDow->wVKey == VK_DOWN)
{
if (m_UsersList.GetItemCount()-1 > nIndex)
{
m_UsersList.SetItemState(nIndex + 1, LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
}
}
else
if (pLVKeyDow->wVKey == VK_UP)
{
if (nIndex > 0)
{
m_UsersList.SetItemState(nIndex - 1, LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
}
}
else
if (pLVKeyDow->wVKey == VK_NEXT)
{
m_UsersList.SetItemState(m_UsersList.GetItemCount()-1, LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
}
else
if (pLVKeyDow->wVKey == VK_PRIOR)
{
m_UsersList.SetItemState(0, LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
}
OnSelchangeUserlist();
*pResult = 1;
}
/********************************************************************/
/* */
/* Function name : OnSelchangeUserlist */
/* Description : Selection in the user listcontrol has changed. */
/* */
/********************************************************************/
void CUserAccountsDlg::OnSelchangeUserlist()
{
UpdateData();
// save data of previous selected user
if (m_nPreviousIndex != -1)
{
int nOldindex = m_UsersList.GetItemData(m_nPreviousIndex);
m_UserArray[nOldindex].m_strPassword = m_strPassword;
m_UserArray[nOldindex].m_bAccountDisabled = m_bDisableAccount;
}
// get selected user
int nSelIndex = m_UsersList.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);
if (nSelIndex != -1)
{
int nUserIndex = m_UsersList.GetItemData(nSelIndex);
// update dialog variables
m_strPassword = m_UserArray[nUserIndex].m_strPassword;
m_bDisableAccount = m_UserArray[nUserIndex].m_bAccountDisabled;
m_DirectoryList.DeleteAllItems();
// fill the directory list
for (int i=0; i < m_UserArray[nUserIndex].m_DirectoryArray.GetSize(); i++)
{
int nItem = m_DirectoryList.InsertItem(i, m_UserArray[nUserIndex].m_DirectoryArray[i].m_strDir);
m_DirectoryList.SetItemText(nItem, 1, m_UserArray[nUserIndex].m_DirectoryArray[i].m_strAlias);
m_DirectoryList.SetItemText(nItem, 2, m_UserArray[nUserIndex].m_DirectoryArray[i].m_bAllowDownload ? "Y" : "N");
m_DirectoryList.SetItemText(nItem, 3, m_UserArray[nUserIndex].m_DirectoryArray[i].m_bAllowUpload ? "Y" : "N");
m_DirectoryList.SetItemText(nItem, 4, m_UserArray[nUserIndex].m_DirectoryArray[i].m_bAllowRename ? "Y" : "N");
m_DirectoryList.SetItemText(nItem, 5, m_UserArray[nUserIndex].m_DirectoryArray[i].m_bAllowDelete ? "Y" : "N");
m_DirectoryList.SetItemText(nItem, 6, m_UserArray[nUserIndex].m_DirectoryArray[i].m_bAllowCreateDirectory ? "Y" : "N");
LVITEM lvi;
ZeroMemory(&lvi, sizeof (LV_ITEM));
lvi.mask = LVIF_IMAGE|LVIF_PARAM;
lvi.iItem = nItem;
m_DirectoryList.GetItem(&lvi);
lvi.lParam = i;
lvi.iImage = m_UserArray[nUserIndex].m_DirectoryArray[i].m_bIsHomeDir ? 1 : 0;
m_DirectoryList.SetItem(&lvi);
}
m_nPreviousIndex = nSelIndex;
}
else
{
// nothing selected...
m_DirectoryList.DeleteAllItems();
m_strPassword = "";
m_bDisableAccount = FALSE;
}
UpdateData(FALSE);
UpdateDialogControls(this, FALSE);
AutoSizeColumns();
}
/********************************************************************/
/* */
/* Function name : OnOK */
/* Description : Called when the user clicks the OK button. */
/* */
/********************************************************************/
void CUserAccountsDlg::OnOK()
{
m_UsersList.SetItemState(-1 ,LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
// force update
OnSelchangeUserlist();
CDialogResize::OnOK();
}
/********************************************************************/
/* */
/* Function name : OnDblclkDirlist */
/* Description : Double clicked a directy item. */
/* */
/********************************************************************/
void CUserAccountsDlg::OnDblclkDirlist(NMHDR* pNMHDR, LRESULT* pResult)
{
OnEditDir();
*pResult = 0;
}
/********************************************************************/
/* */
/* Function name : OnAddUser */
/* Description : Add a new user account. */
/* */
/********************************************************************/
void CUserAccountsDlg::OnAddUser()
{
CAddUserDlg dlg;
if (dlg.DoModal() == IDOK)
{
for (int i=0; i<m_UsersList.GetItemCount(); i++)
{
CString strName;
strName = m_UsersList.GetItemText(i, 0);
if (strName.CompareNoCase(dlg.m_strName) == 0)
{
AfxMessageBox("Sorry, this user already exists!");
return;
}
}
CUser user;
user.m_strName = dlg.m_strName;
user.m_strPassword = "";
int nItem = m_UsersList.InsertItem(0, user.m_strName, 2);
if (nItem <= m_nPreviousIndex)
m_nPreviousIndex++;
int index = m_UserArray.Add(user);
m_UsersList.SetItemData(nItem, index);
m_UsersList.SetItemState(nItem, LVIS_SELECTED | LVIS_FOCUSED , LVIS_SELECTED | LVIS_FOCUSED);
OnSelchangeUserlist();
}
}
/********************************************************************/
/* */
/* Function name : OnEditUser */
/* Description : Edit user account name. */
/* */
/********************************************************************/
void CUserAccountsDlg::OnEditUser()
{
// get selected user
int nSelIndex = m_UsersList.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED);
if(nSelIndex == -1)
return;
int nUserIndex = m_UsersList.GetItemData(nSelIndex);
CAddUserDlg dlg;
dlg.m_strTitle = "Edit User";
dlg.m_strName = m_UserArray[nUserIndex].m_strName;
if (dlg.DoModal() == IDOK)
{
// check if user already exists
for (int i=0; i<m_UsersList.GetItemCount(); i++)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -