windows-nt/Source/XPSP1/NT/net/mmc/dhcp/classes.cpp

257 lines
7 KiB
C++
Raw Normal View History

2020-09-26 03:20:57 -05:00
/**********************************************************************/
/** Microsoft Windows/NT **/
/** Copyright(c) Microsoft Corporation, 1997 - 1999 **/
/**********************************************************************/
/*
Classes.h
This file contains all of the prototypes for the
option class dialog.
FILE HISTORY:
*/
#include "stdafx.h"
#include "classes.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDhcpClasses dialog
CDhcpClasses::CDhcpClasses(CClassInfoArray * pClassArray, LPCTSTR pszServer, DWORD dwType, CWnd* pParent /*=NULL*/)
: CBaseDialog(CDhcpClasses::IDD, pParent)
{
//{{AFX_DATA_INIT(CDhcpClasses)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_dwType = dwType;
m_strServer = pszServer;
m_pClassInfoArray = pClassArray;
}
void CDhcpClasses::DoDataExchange(CDataExchange* pDX)
{
CBaseDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDhcpClasses)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDhcpClasses, CBaseDialog)
//{{AFX_MSG_MAP(CDhcpClasses)
ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
ON_BN_CLICKED(IDC_BUTTON_EDIT, OnButtonEdit)
ON_BN_CLICKED(IDC_BUTTON_NEW, OnButtonNew)
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_CLASSES, OnItemchangedListClasses)
ON_NOTIFY(NM_DBLCLK, IDC_LIST_CLASSES, OnDblclkListClasses)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDhcpClasses message handlers
BOOL CDhcpClasses::OnInitDialog()
{
CBaseDialog::OnInitDialog();
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CString strTitle;
if (m_dwType == CLASS_TYPE_VENDOR)
{
strTitle.LoadString(IDS_VENDOR_CLASSES);
}
else
{
strTitle.LoadString(IDS_USER_CLASSES);
}
this->SetWindowText(strTitle);
CListCtrl * pListCtrl = (CListCtrl *) GetDlgItem(IDC_LIST_CLASSES);
LV_COLUMN lvColumn;
CString strText;
strText.LoadString(IDS_NAME);
ListView_SetExtendedListViewStyle(pListCtrl->GetSafeHwnd(), LVS_EX_FULLROWSELECT);
lvColumn.mask = LVCF_TEXT | LVCF_FMT | LVCF_WIDTH;
lvColumn.fmt = LVCFMT_LEFT;
lvColumn.cx = 125;
lvColumn.pszText = (LPTSTR) (LPCTSTR) strText;
pListCtrl->InsertColumn(0, &lvColumn);
strText.LoadString(IDS_COMMENT);
lvColumn.pszText = (LPTSTR) (LPCTSTR) strText;
lvColumn.cx = 175;
pListCtrl->InsertColumn(1, &lvColumn);
UpdateList();
UpdateButtons();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CDhcpClasses::OnButtonDelete()
{
CListCtrl * pListCtrl = (CListCtrl *) GetDlgItem(IDC_LIST_CLASSES);
int nSelectedItem = pListCtrl->GetNextItem(-1, LVNI_SELECTED);
CClassInfo * pClassInfo = (CClassInfo *) pListCtrl->GetItemData(nSelectedItem);
CString strMessage;
AfxFormatString1(strMessage, IDS_CONFIRM_CLASS_DELETE, pClassInfo->strName);
if (AfxMessageBox(strMessage, MB_YESNO) == IDYES)
{
DWORD dwError = ::DhcpDeleteClass((LPTSTR) ((LPCTSTR) m_strServer),
0,
(LPTSTR) ((LPCTSTR) pClassInfo->strName));
if (dwError != ERROR_SUCCESS)
{
::DhcpMessageBox(dwError);
return;
}
else
{
m_pClassInfoArray->RemoveClass(pClassInfo->strName);
UpdateList();
UpdateButtons();
}
}
}
void CDhcpClasses::OnButtonEdit()
{
CDhcpModifyClass dlgModify(m_pClassInfoArray, m_strServer, FALSE, m_dwType);
CListCtrl * pListCtrl = (CListCtrl *) GetDlgItem(IDC_LIST_CLASSES);
// Find the selected item
int nSelectedItem = pListCtrl->GetNextItem(-1, LVNI_SELECTED);
CClassInfo * pClassInfo = (CClassInfo *) pListCtrl->GetItemData(nSelectedItem);
dlgModify.m_EditValueParam.pValueName = (LPTSTR) ((LPCTSTR) pClassInfo->strName);
dlgModify.m_EditValueParam.pValueComment = (LPTSTR) ((LPCTSTR) pClassInfo->strComment);
dlgModify.m_EditValueParam.pValueData = pClassInfo->baData.GetData();
dlgModify.m_EditValueParam.cbValueData = (UINT)pClassInfo->baData.GetSize();
if (dlgModify.DoModal() == IDOK)
{
// need to refresh the view.
UpdateList();
UpdateButtons();
}
}
void CDhcpClasses::OnButtonNew()
{
CDhcpModifyClass dlgModify(m_pClassInfoArray, m_strServer, TRUE, m_dwType);
if (dlgModify.DoModal() == IDOK)
{
// need to refresh the view.
UpdateList();
UpdateButtons();
}
}
void CDhcpClasses::OnOK()
{
CBaseDialog::OnOK();
}
void CDhcpClasses::UpdateList()
{
CListCtrl * pListCtrl = (CListCtrl *) GetDlgItem(IDC_LIST_CLASSES);
pListCtrl->DeleteAllItems();
for (int i = 0; i < m_pClassInfoArray->GetSize(); i++)
{
// add the appropriate classes depending on what we are looking at
if ( (m_dwType == CLASS_TYPE_VENDOR &&
(*m_pClassInfoArray)[i].bIsVendor) ||
(m_dwType == CLASS_TYPE_USER &&
!(*m_pClassInfoArray)[i].bIsVendor) )
{
int nPos = pListCtrl->InsertItem(i, (*m_pClassInfoArray)[i].strName);
pListCtrl->SetItemText(nPos, 1, (*m_pClassInfoArray)[i].strComment);
pListCtrl->SetItemData(nPos, (LPARAM) &(*m_pClassInfoArray)[i]);
}
}
}
void CDhcpClasses::UpdateButtons()
{
CListCtrl * pListCtrl = (CListCtrl *) GetDlgItem(IDC_LIST_CLASSES);
BOOL bEnable = TRUE;
CWnd * pCurFocus = GetFocus();
if (pListCtrl->GetSelectedCount() == 0)
{
bEnable = FALSE;
}
CWnd * pEdit = GetDlgItem(IDC_BUTTON_EDIT);
CWnd * pDelete = GetDlgItem(IDC_BUTTON_DELETE);
if ( !bEnable &&
((pCurFocus == pEdit) ||
(pCurFocus == pDelete)) )
{
GetDlgItem(IDCANCEL)->SetFocus();
SetDefID(IDCANCEL);
((CButton *) pEdit)->SetButtonStyle(BS_PUSHBUTTON);
((CButton *) pDelete)->SetButtonStyle(BS_PUSHBUTTON);
}
// disable delete if this is the dynamic bootp class
int nSelectedItem = pListCtrl->GetNextItem(-1, LVNI_SELECTED);
if (nSelectedItem != -1)
{
CClassInfo * pClassInfo = (CClassInfo *) pListCtrl->GetItemData(nSelectedItem);
if (pClassInfo->IsSystemClass() ||
pClassInfo->IsRRASClass() ||
pClassInfo->IsDynBootpClass())
{
bEnable = FALSE;
}
}
pDelete->EnableWindow(bEnable);
pEdit->EnableWindow(bEnable);
}
void CDhcpClasses::OnItemchangedListClasses(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
UpdateButtons();
*pResult = 0;
}
void CDhcpClasses::OnDblclkListClasses(NMHDR* pNMHDR, LRESULT* pResult)
{
if (GetDlgItem(IDC_BUTTON_EDIT)->IsWindowEnabled())
OnButtonEdit();
*pResult = 0;
}