|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1999 - 1999
//
// File: servbind.cpp
//
//--------------------------------------------------------------------------
// servbind.cpp : implementation file
//
#include "stdafx.h"
#include "servbind.h"
#include "server.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
#define BINDINGS_COLUMNS 2
/////////////////////////////////////////////////////////////////////////////
// CServerBindings dialog
CServerBindings::CServerBindings(CWnd* pParent /*=NULL*/) : CBaseDialog(CServerBindings::IDD, pParent) { //{{AFX_DATA_INIT(CServerBindings)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
CServerBindings::CServerBindings(CDhcpServer *pServer, CWnd *pParent) : CBaseDialog(CServerBindings::IDD, pParent) { m_Server = pServer; m_BindingsInfo = NULL; }
CServerBindings::~CServerBindings() { ::DhcpRpcFreeMemory(m_BindingsInfo); m_BindingsInfo = NULL;
//
// if needed destory the list ctrl also
//
if( m_listctrlBindingsList.GetSafeHwnd() != NULL ) { m_listctrlBindingsList.SetImageList(NULL, LVSIL_STATE); m_listctrlBindingsList.DeleteAllItems(); } m_listctrlBindingsList.DestroyWindow(); }
void CServerBindings::DoDataExchange(CDataExchange* pDX) { CBaseDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CServerBindings)
DDX_Control(pDX, IDC_LIST_BINDINGS, m_listctrlBindingsList); //}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CServerBindings, CBaseDialog) //{{AFX_MSG_MAP(CServerBindings)
ON_BN_CLICKED(IDCANCEL, OnBindingsCancel) ON_BN_CLICKED(IDOK, OnBindingsOK) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CServerBindings message handlers
BOOL CServerBindings::OnInitDialog() { ULONG dwError; CBaseDialog::OnInitDialog(); // initialize the list ctrl
InitListCtrl();
BEGIN_WAIT_CURSOR; // get the state from the server..
dwError = m_Server->GetBindings(m_BindingsInfo);
END_WAIT_CURSOR;
if( 0 != dwError) { ::DhcpMessageBox(dwError); m_BindingsInfo = NULL;
// can't do anything if we don't have what we want.
// so cancel the window itself.
OnCancel();
} else {
int col_width = 0, col2_width = 0, base_width;
// basic fudge factor
base_width = 15 + m_listctrlBindingsList.GetStringWidth(TEXT("++"));
// now set each item..
for( ULONG i = 0; i < m_BindingsInfo->NumElements ; i ++ ) { LPWSTR IpString = NULL;
if( 0 != m_BindingsInfo->Elements[i].AdapterPrimaryAddress ) { IpString = ::UtilDupIpAddrToWstr( htonl(m_BindingsInfo->Elements[i].AdapterPrimaryAddress) ); } int width = m_listctrlBindingsList.GetStringWidth(IpString); if( col_width < width) col_width = width;
if( m_BindingsInfo->Elements[i].IfDescription != NULL ) { width = m_listctrlBindingsList.GetStringWidth( m_BindingsInfo->Elements[i].IfDescription ); if( col2_width < width) col2_width = width; }
int nIndex = m_listctrlBindingsList.AddItem( IpString, m_BindingsInfo->Elements[i].IfDescription, LISTVIEWEX_NOT_CHECKED );
if( m_BindingsInfo->Elements[i].fBoundToDHCPServer ) { m_listctrlBindingsList.CheckItem(nIndex); } if( IpString ) delete IpString; } m_listctrlBindingsList.SetColumnWidth(0, col_width + base_width); m_listctrlBindingsList.SetColumnWidth(1, col2_width + base_width/2); // if there are any elements, set focus on this window.
if( m_BindingsInfo->NumElements ) { m_listctrlBindingsList.SelectItem(0); m_listctrlBindingsList.SetFocus(); //
// return false to indicate that we have set focus.
//
return FALSE; } } return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CServerBindings::InitListCtrl() { // set image lists
m_StateImageList.Create(IDB_LIST_STATE, 16, 1, RGB(255, 0, 0));
m_listctrlBindingsList.SetImageList(NULL, LVSIL_NORMAL); m_listctrlBindingsList.SetImageList(NULL, LVSIL_SMALL); m_listctrlBindingsList.SetImageList(&m_StateImageList, LVSIL_STATE);
// insert a column so we can see the items
LV_COLUMN lvc; CString strColumnHeader;
for (int i = 0; i < BINDINGS_COLUMNS; i++) { lvc.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT;; lvc.iSubItem = i; lvc.fmt = LVCFMT_LEFT; lvc.pszText = NULL;
m_listctrlBindingsList.InsertColumn(i, &lvc); }
m_listctrlBindingsList.SetFullRowSel(TRUE); }
void CServerBindings::OnBindingsCancel() { CBaseDialog::OnCancel(); }
void CServerBindings::OnBindingsOK() { DWORD dwError;
if( NULL != m_BindingsInfo ) { //
// Save that onto the dhcp server
//
UpdateBindingInfo(); dwError = m_Server->SetBindings(m_BindingsInfo); if( NO_ERROR != dwError ) { ::DhcpMessageBox(dwError); } else { CBaseDialog::OnOK(); } } else { CBaseDialog::OnOK(); } }
void CServerBindings::UpdateBindingInfo() { for( int i = 0; i < m_listctrlBindingsList.GetItemCount() ; i ++ ) { BOOL fBound;
if( m_listctrlBindingsList.GetCheck(i) ) { m_BindingsInfo->Elements[i].fBoundToDHCPServer = TRUE; } else { m_BindingsInfo->Elements[i].fBoundToDHCPServer = FALSE; } } }
|