|
|
/**********************************************************************/ /** Microsoft Windows/NT **/ /** Copyright(c) Microsoft Corporation, 1997 - 1999 **/ /**********************************************************************/
/*
OptCfg.h Option configuration pages. The option configuration pages keep lists off all of the default options for a given class ID. For the pre-NT5 and default case, the class name is null indicating no associated class. When there is a class defined, a CClassTracker object with the class name is created. Only the advanced page uses CClassTrackers with non-null names. If there are no non-null class names then the advanced page will be disabled. FILE HISTORY: */
#ifndef _OPTCFG_H
#define _OPTCFG_H
#ifndef _LISTVIEW_H
#include "listview.h"
#endif
#ifndef _CTRLGRP_H
#include <ctrlgrp.h>
#endif
#ifndef _DHCPHAND_H
#include "dhcphand.h"
#endif
#ifndef _CLASSED_H
#include "classed.h"
#endif
#ifndef _CLASSID_H
#include "classmod.h"
#endif
#ifndef _SERVER_H
#include "server.h"
#endif
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
class CDhcpOptionItem;
#define OPTION_STATE_ACTIVE 1
#define OPTION_STATE_INACTIVE 2
#define WM_SELECTOPTION WM_USER + 200
#define WM_SELECTCLASSES WM_USER + 201
// this class builds the correct help map for the given option sheet
class CHelpMap { public: CHelpMap(); ~CHelpMap();
void BuildMap(DWORD pdwParentHelpMap[]); DWORD * GetMap();
protected: int CountMap(const DWORD * pdwHelpMap); void ResetMap();
DWORD * m_pdwHelpMap; };
// This class tracks a given option to see if it has been modified, etc
class COptionTracker { public: COptionTracker() { m_uInitialState = OPTION_STATE_INACTIVE; m_uCurrentState = OPTION_STATE_INACTIVE; m_bDirty = FALSE; m_pOption = NULL; }
~COptionTracker() { if (m_pOption) delete m_pOption; }
UINT GetInitialState() { return m_uInitialState; } void SetInitialState(UINT uInitialState) { m_uInitialState = uInitialState; }
UINT GetCurrentState() { return m_uCurrentState; } void SetCurrentState(UINT uCurrentState) { m_uCurrentState = uCurrentState; }
void SetDirty(BOOL bDirty) { m_bDirty = bDirty; } BOOL IsDirty() { return m_bDirty; }
CDhcpOption * m_pOption;
protected: UINT m_uInitialState; UINT m_uCurrentState; BOOL m_bDirty; };
typedef CList<COptionTracker *, COptionTracker *> COptionTrackerListBase; class COptionTrackerList : public COptionTrackerListBase { public: ~COptionTrackerList() { // cleanup the list
while (!IsEmpty()) delete RemoveHead(); } };
// this class tracks the option set for a given User Class ID
class CClassTracker { public: CClassTracker() {}; ~CClassTracker() {};
LPCTSTR GetClassName() { return m_strClassName; } void SetClassName(LPCTSTR pClassName) { m_strClassName = pClassName; }
public: CString m_strClassName; BOOL m_bIsVendor; COptionTrackerList m_listOptions; };
typedef CList<CClassTracker *, CClassTracker *> CClassTrackerListBase; class CClassTrackerList : public CClassTrackerListBase { public: ~CClassTrackerList() { // cleanup the list
while (!IsEmpty()) delete RemoveHead(); } };
// this class tracks the user classes for a vendor option class option set
class CVendorTracker { public: CVendorTracker() {}; ~CVendorTracker() {};
LPCTSTR GetClassName() { return m_strClassName; } void SetClassName(LPCTSTR pClassName) { m_strClassName = pClassName; }
public: CString m_strClassName; BOOL m_bIsVendor; CClassTrackerList m_listUserClasses; };
typedef CList<CVendorTracker *, CVendorTracker *> CVendorTrackerListBase; class CVendorTrackerList : public CVendorTrackerListBase { public: ~CVendorTrackerList() { // cleanup the list
while (!IsEmpty()) delete RemoveHead(); } };
/////////////////////////////////////////////////////////////////////////////
// COptionsCfgBasic dialog
class COptionsCfgPropPage : public CPropertyPageBase { DECLARE_DYNCREATE(COptionsCfgPropPage)
// Construction
public: COptionsCfgPropPage(); COptionsCfgPropPage(UINT nIDTemplate, UINT nIDCaption = 0); ~COptionsCfgPropPage();
// Dialog Data
//{{AFX_DATA(COptionsCfgPropPage)
enum { IDD = IDP_OPTION_BASIC }; CMyListCtrl m_listctrlOptions; //}}AFX_DATA
CImageList m_StateImageList; ControlGroupSwitcher m_cgsTypes; CWndHexEdit m_hexData; // Hex Data
void LoadBitmaps(); void InitListCtrl(); void SelectOption(CDhcpOption * pOption); void SwitchDataEntry(int datatype, int optiontype, BOOL fRouteArray, BOOL bEnable); void FillDataEntry(CDhcpOption * pOption);
void HandleActivationIpArray(); void HandleActivationValueArray(); void HandleActivationRouteArray(CDhcpOptionValue *optValue = NULL); BOOL HandleValueEdit();
void MoveValue(BOOL bValues, BOOL bUp);
// Context Help Support
virtual DWORD * GetHelpMap() { return m_helpMap.GetMap(); } virtual BOOL OnPropertyChange(BOOL bScope, LONG_PTR *ChangeMask);
// Overrides
// ClassWizard generate virtual function overrides
//{{AFX_VIRTUAL(COptionsCfgPropPage)
public: virtual BOOL OnSetActive(); virtual BOOL OnApply(); protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected: // Generated message map functions
//{{AFX_MSG(COptionsCfgPropPage)
virtual BOOL OnInitDialog(); afx_msg void OnDestroy(); afx_msg void OnItemchangedListOptions(NMHDR* pNMHDR, LRESULT* pResult); //}}AFX_MSG
// IpAddress array controls
afx_msg void OnButtonIpAddrDown(); afx_msg void OnButtonIpAddrUp(); afx_msg void OnButtonIpAddrAdd(); afx_msg void OnButtonIpAddrDelete(); afx_msg void OnSelchangeListIpAddrs(); afx_msg void OnChangeIpAddressArray(); afx_msg void OnChangeEditServerName(); afx_msg void OnButtonResolve();
// value array controls
afx_msg void OnButtonValueDown(); afx_msg void OnButtonValueUp(); afx_msg void OnButtonValueAdd(); afx_msg void OnButtonValueDelete(); afx_msg void OnChangeEditValue(); afx_msg void OnClickedRadioDecimal(); afx_msg void OnClickedRadioHex(); afx_msg void OnSelchangeListValues();
// single value controls
afx_msg void OnChangeEditDword();
// string value controls
afx_msg void OnChangeEditString();
// single ip address controls
afx_msg void OnChangeIpAddress();
// single string controls
// binary and encapsulated data
afx_msg void OnChangeValueData();
// route array controls
afx_msg void OnButtonAddRoute(); afx_msg void OnButtonDelRoute();
afx_msg long OnSelectOption(UINT wParam, long lParam);
DECLARE_MESSAGE_MAP()
BOOL m_bInitialized; BYTE m_BinaryBuffer[MAXDATA_LENGTH]; CHelpMap m_helpMap; };
// the general page
class COptionCfgGeneral : public COptionsCfgPropPage { DECLARE_DYNCREATE(COptionCfgGeneral)
public: COptionCfgGeneral(); COptionCfgGeneral(UINT nIDTemplate, UINT nIDCaption = 0); ~COptionCfgGeneral();
// Dialog Data
//{{AFX_DATA(COptionCfgGeneral)
enum { IDD = IDP_OPTION_BASIC }; //}}AFX_DATA
// Overrides
// ClassWizard generate virtual function overrides
//{{AFX_VIRTUAL(COptionCfgGeneral)
protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected: // Generated message map functions
//{{AFX_MSG(COptionCfgGeneral)
virtual BOOL OnInitDialog(); //}}AFX_MSG
DECLARE_MESSAGE_MAP() };
/////////////////////////////////////////////////////////////////////////////
// CAddRoute dialog
class CAddRoute : public CBaseDialog { // Construction
public: CAddRoute(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CAddRoute)
enum { IDD = IDD_ADD_ROUTE_DIALOG }; //}}AFX_DATA
// Ip address for destination, mask and router fields
CWndIpAddress m_ipaDest, m_ipaMask, m_ipaRouter; BOOL m_bChange; DHCP_IP_ADDRESS Dest, Mask, Router; // Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAddRoute)
protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(CAddRoute)
virtual BOOL OnInitDialog(); virtual void OnOK(); //}}AFX_MSG
DECLARE_MESSAGE_MAP() };
// the advanced page
class COptionCfgAdvanced : public COptionsCfgPropPage { DECLARE_DYNCREATE(COptionCfgAdvanced)
public: COptionCfgAdvanced(); COptionCfgAdvanced(UINT nIDTemplate, UINT nIDCaption = 0); ~COptionCfgAdvanced();
// Dialog Data
//{{AFX_DATA(COptionCfgAdvanced)
enum { IDD = IDP_OPTION_ADVANCED }; CComboBox m_comboUserClasses; CComboBox m_comboVendorClasses; //}}AFX_DATA
// Overrides
// ClassWizard generate virtual function overrides
//{{AFX_VIRTUAL(COptionCfgAdvanced)
protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected: // Generated message map functions
//{{AFX_MSG(COptionCfgAdvanced)
virtual BOOL OnInitDialog(); afx_msg void OnSelendokComboUserClass(); afx_msg void OnSelendokComboVendorClass(); //}}AFX_MSG
afx_msg long OnSelectClasses(UINT wParam, LONG lParam);
BOOL m_bNoClasses;
DECLARE_MESSAGE_MAP() };
// the holder class for the pages
class COptionsConfig : public CPropertyPageHolderBase { public: COptionsConfig(ITFSNode * pNode, ITFSNode * pServerNode, IComponentData * pComponentData, ITFSComponentData * pTFSCompData, COptionValueEnum * pOptionValueEnum, LPCTSTR pszSheetName, CDhcpOptionItem * pSelOption = NULL); virtual ~COptionsConfig();
ITFSComponentData * GetTFSCompData() { if (m_spTFSCompData) m_spTFSCompData->AddRef(); return m_spTFSCompData; }
ITFSNode * GetServerNode() { if (m_spServerNode) m_spServerNode->AddRef(); return m_spServerNode; }
DWORD InitData(); void FillOptions(LPCTSTR pVendorName, LPCTSTR pClassName, CMyListCtrl & ListCtrl); void UpdateActiveOptions(); void SetTitle(); LPWSTR GetServerAddress(); void AddClassTracker(CVendorTracker * pVendorTracker, LPCTSTR pClassName); CVendorTracker * AddVendorTracker(LPCTSTR pVendorName);
public: COptionCfgGeneral m_pageGeneral; COptionCfgAdvanced m_pageAdvanced;
COptionValueEnum * m_pOptionValueEnum; CVendorTrackerList m_listVendorClasses;
LARGE_INTEGER m_liServerVersion;
// these descibe the option to focus on.
CString m_strStartVendor; CString m_strStartClass; DHCP_OPTION_ID m_dhcpStartId;
protected: SPITFSComponentData m_spTFSCompData; SPITFSNode m_spServerNode; BOOL m_bInitialized; };
#endif _OPTCFG_H
|