/**********************************************************************/ /** 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; }