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

📄 useraccountsdlg.cpp

📁 It can also accept a number of ftp connection (multithreaded), and with most of the commercial ftp s
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/****************************************************************/
/*																*/
/*  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 + -