Windows-Server-2003/net/mmc/tapi/edituser.cpp

205 lines
4.9 KiB
C++

/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corporation, 1997 - 1999 **/
/**********************************************************************/
/*
edituser.h
Edit user dialog implementation file
FILE HISTORY:
*/
#include "stdafx.h"
#include "EditUser.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CEditUsers dialog
CEditUsers::CEditUsers(CTapiDevice * pTapiDevice, CWnd* pParent /*=NULL*/)
: CBaseDialog(CEditUsers::IDD, pParent),
m_pTapiDevice(pTapiDevice),
m_bDirty(FALSE)
{
//{{AFX_DATA_INIT(CEditUsers)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CEditUsers::DoDataExchange(CDataExchange* pDX)
{
CBaseDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CEditUsers)
DDX_Control(pDX, IDC_LIST_USERS, m_listUsers);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CEditUsers, CBaseDialog)
//{{AFX_MSG_MAP(CEditUsers)
ON_BN_CLICKED(IDC_BUTTON_ADD_USER, OnButtonAdd)
ON_BN_CLICKED(IDC_BUTTON_REMOVE_USER, OnButtonRemove)
ON_LBN_SELCHANGE(IDC_LIST_USERS, OnSelchangeListUsers)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CEditUsers message handlers
BOOL CEditUsers::OnInitDialog()
{
CBaseDialog::OnInitDialog();
for (int i = 0; i < m_pTapiDevice->m_arrayUsers.GetSize(); i++)
{
CString strDisplay;
FormatName(m_pTapiDevice->m_arrayUsers[i].m_strFullName,
m_pTapiDevice->m_arrayUsers[i].m_strName,
strDisplay);
int nIndex = m_listUsers.AddString(strDisplay);
m_listUsers.SetItemData(nIndex, i);
}
UpdateButtons();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
//
// Refresh the list box and rebuild the index
//
void CEditUsers::RefreshList()
{
m_listUsers.ResetContent();
for (int i = 0; i < m_pTapiDevice->m_arrayUsers.GetSize(); i++)
{
CString strDisplay;
FormatName(m_pTapiDevice->m_arrayUsers[i].m_strFullName,
m_pTapiDevice->m_arrayUsers[i].m_strName,
strDisplay);
int nIndex = m_listUsers.AddString(strDisplay);
m_listUsers.SetItemData(nIndex, i);
}
}
void CEditUsers::OnButtonAdd()
{
CGetUsers getUsers(TRUE);
if (!getUsers.GetUsers(GetSafeHwnd()))
return;
for (int nCount = 0; nCount < getUsers.GetSize(); nCount++)
{
CUserInfo userTemp;
userTemp = getUsers[nCount];
// check for duplicates
BOOL fDuplicate = FALSE;
for (int i = 0; i < m_pTapiDevice->m_arrayUsers.GetSize(); i++)
{
if (m_pTapiDevice->m_arrayUsers[i].m_strName.CompareNoCase(userTemp.m_strName) == 0)
{
fDuplicate = TRUE;
break;
}
}
if (!fDuplicate)
{
// add to the array
int nIndex = (int)m_pTapiDevice->m_arrayUsers.Add(userTemp);
// now add to the listbox
CString strDisplay;
FormatName(m_pTapiDevice->m_arrayUsers[nIndex].m_strFullName,
m_pTapiDevice->m_arrayUsers[nIndex].m_strName,
strDisplay);
int nListboxIndex = m_listUsers.AddString(strDisplay);
m_listUsers.SetItemData(nListboxIndex, nIndex);
}
else
{
// tell the user we're not adding this to the list
CString strMessage;
AfxFormatString1(strMessage, IDS_USER_ALREADY_AUTHORIZED, userTemp.m_strName);
AfxMessageBox(strMessage);
}
SetDirty(TRUE);
}
UpdateButtons();
}
void CEditUsers::OnButtonRemove()
{
CString strSelectedName, strFullName, strDomainName;
int nCurSel = m_listUsers.GetCurSel();
int nIndex = (int)m_listUsers.GetItemData(nCurSel);
// remove from the list
m_pTapiDevice->m_arrayUsers.RemoveAt(nIndex);
//Fix bug 386474, we need to rebuild the index <-> string mapping in the list box.
//So reload the users to the list box
RefreshList();
SetDirty(TRUE);
UpdateButtons();
}
void CEditUsers::OnOK()
{
if (IsDirty())
{
}
CBaseDialog::OnOK();
}
void CEditUsers::UpdateButtons()
{
// enable the remove button if something is selected
BOOL fEnable = (m_listUsers.GetCurSel() != LB_ERR);
CWnd * pwndRemove = GetDlgItem(IDC_BUTTON_REMOVE_USER);
//if we will disable the remove button and the remove button has the focus,
//we should change focus to the OK button
if (!fEnable && GetFocus() == pwndRemove)
{
SetDefID(IDOK);
GetDlgItem(IDOK)->SetFocus();
((CButton*)pwndRemove)->SetButtonStyle(BS_PUSHBUTTON);
}
pwndRemove->EnableWindow(fEnable);
}
void CEditUsers::OnSelchangeListUsers()
{
UpdateButtons();
}