/**********************************************************************/
/**                       Microsoft Windows/NT                       **/
/**                Copyright(c) Microsoft Corporation, 1997 - 1999 **/
/**********************************************************************/

/*
	mscopewiz.h
		DHCP multicast scope creation dialog
		
    FILE HISTORY:
        
*/

#if !defined _MSCOPWIZ_H
#define _MSCOPWIZ_H

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

/////////////////////////////////////////////////////////////////////////////
//
// CMScopeWizName dialog
//
/////////////////////////////////////////////////////////////////////////////
class CMScopeWizName : public CPropertyPageBase
{
	DECLARE_DYNCREATE(CMScopeWizName)

// Construction
public:
	CMScopeWizName();
	~CMScopeWizName();

// Dialog Data
	//{{AFX_DATA(CMScopeWizName)
	enum { IDD = IDW_MSCOPE_NAME };
	CEdit	m_editScopeName;
	CEdit	m_editScopeComment;
	CString	m_strName;
	CString	m_strComment;
	//}}AFX_DATA


// Overrides
	// ClassWizard generate virtual function overrides
	//{{AFX_VIRTUAL(CMScopeWizName)
	public:
	virtual LRESULT OnWizardNext();
	virtual BOOL OnSetActive();
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
public:
	void UpdateButtons();

protected:
	// Generated message map functions
	//{{AFX_MSG(CMScopeWizName)
	virtual BOOL OnInitDialog();
	afx_msg void OnChangeEditScopeName();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()

};

/////////////////////////////////////////////////////////////////////////////
//
// CMScopeWizInvalidName dialog
//
/////////////////////////////////////////////////////////////////////////////
class CMScopeWizInvalidName : public CPropertyPageBase
{
	DECLARE_DYNCREATE(CMScopeWizInvalidName)

// Construction
public:
	CMScopeWizInvalidName();
	~CMScopeWizInvalidName();

// Dialog Data
	//{{AFX_DATA(CMScopeWizInvalidName)
	enum { IDD = IDW_MSCOPE_INVALID_NAME };
		// NOTE - ClassWizard will add data members here.
		//    DO NOT EDIT what you see in these blocks of generated code !
	//}}AFX_DATA


// Overrides
	// ClassWizard generate virtual function overrides
	//{{AFX_VIRTUAL(CMScopeWizInvalidName)
	public:
	virtual LRESULT OnWizardBack();
	virtual BOOL OnSetActive();
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	// Generated message map functions
	//{{AFX_MSG(CMScopeWizInvalidName)
	virtual BOOL OnInitDialog();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()

};

/////////////////////////////////////////////////////////////////////////////
//
// CMScopeWizSetRange dialog
//
/////////////////////////////////////////////////////////////////////////////
class CMScopeWizSetRange : public CPropertyPageBase
{
	DECLARE_DYNCREATE(CMScopeWizSetRange)

// Construction
public:
	CMScopeWizSetRange();
	~CMScopeWizSetRange();

// Dialog Data
	//{{AFX_DATA(CMScopeWizSetRange)
	enum { IDD = IDW_MSCOPE_SET_SCOPE };
	CSpinButtonCtrl	m_spinTTL;
	CEdit	m_editTTL;
	//}}AFX_DATA

    CWndIpAddress m_ipaStart;       //  Start Address
    CWndIpAddress m_ipaEnd;         //  End Address

// Overrides
	// ClassWizard generate virtual function overrides
	//{{AFX_VIRTUAL(CMScopeWizSetRange)
	public:
	virtual LRESULT OnWizardNext();
	virtual LRESULT OnWizardBack();
	virtual BOOL OnSetActive();
	virtual BOOL OnKillActive();
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
public:
	BOOL	GetScopeRange(CDhcpIpRange * pdhcpIpRange);
    BYTE    GetTTL();

protected:
	BOOL	m_fPageActive;

	// Generated message map functions
	//{{AFX_MSG(CMScopeWizSetRange)
	virtual BOOL OnInitDialog();
	afx_msg void OnKillfocusPoolStart();
	afx_msg void OnKillfocusPoolStop();
	afx_msg void OnChangeEditMaskLength();
	afx_msg void OnKillfocusSubnetMask();

	afx_msg void OnChangePoolStart();
	afx_msg void OnChangePoolStop();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()

	void UpdateButtons();
};

/////////////////////////////////////////////////////////////////////////////
//
// CMScopeWizSetExclusions dialog
//
/////////////////////////////////////////////////////////////////////////////
class CMScopeWizSetExclusions : public CPropertyPageBase
{
	DECLARE_DYNCREATE(CMScopeWizSetExclusions)

// Construction
public:
	CMScopeWizSetExclusions();
	~CMScopeWizSetExclusions();

// Dialog Data
	//{{AFX_DATA(CMScopeWizSetExclusions)
	enum { IDD = IDW_MSCOPE_SET_EXCLUSIONS };
	CListBox	m_listboxExclusions;
	CButton	m_buttonExclusionDelete;
	CButton	m_buttonExclusionAdd;
	//}}AFX_DATA

    CWndIpAddress m_ipaStart;       //  Start Address
    CWndIpAddress m_ipaEnd;         //  End Address

// Overrides
	// ClassWizard generate virtual function overrides
	//{{AFX_VIRTUAL(CMScopeWizSetExclusions)
	public:
	virtual LRESULT OnWizardNext();
	virtual LRESULT OnWizardBack();
	virtual BOOL OnSetActive();
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
public:
	CExclusionList * GetExclusionList() { return &m_listExclusions; }

protected:
	// Generated message map functions
	//{{AFX_MSG(CMScopeWizSetExclusions)
	virtual BOOL OnInitDialog();
	afx_msg void OnButtonExclusionAdd();
	afx_msg void OnButtonExclusionDelete();
	//}}AFX_MSG
	
    afx_msg void OnChangeExclusionStart();
    afx_msg void OnChangeExclusionEnd();
	
	DECLARE_MESSAGE_MAP()

	CExclusionList m_listExclusions;

    //  Fill the exclusions listbox from the current list
    void Fill ( int nCurSel = 0, BOOL bToggleRedraw = TRUE ) ;

    //  Return TRUE if the given range overlaps an already-defined range
    BOOL IsOverlappingRange ( CDhcpIpRange & dhcIpRange ) ;

    //  Store the excluded IP range values into a range object
    BOOL GetExclusionRange (CDhcpIpRange & dhcIpRange ) ;

    //  Format an IP range pair into the exclusion edit controls
    void FillExcl ( CDhcpIpRange * pdhcIpRange ) ;

	void UpdateButtons();
};

/////////////////////////////////////////////////////////////////////////////
//
// CMScopeWizLeaseTime dialog
//
/////////////////////////////////////////////////////////////////////////////
class CMScopeWizLeaseTime : public CPropertyPageBase
{
	DECLARE_DYNCREATE(CMScopeWizLeaseTime)

// Construction
public:
	CMScopeWizLeaseTime();
	~CMScopeWizLeaseTime();

// Dialog Data
	//{{AFX_DATA(CMScopeWizLeaseTime)
	enum { IDD = IDW_MSCOPE_LEASE_TIME };
	CSpinButtonCtrl	m_spinMinutes;
	CSpinButtonCtrl	m_spinHours;
	CSpinButtonCtrl	m_spinDays;
	CEdit	m_editMinutes;
	CEdit	m_editHours;
	CEdit	m_editDays;
	//}}AFX_DATA

	static int m_nDaysDefault;
	static int m_nHoursDefault;
	static int m_nMinutesDefault;

// Overrides
	// ClassWizard generate virtual function overrides
	//{{AFX_VIRTUAL(CMScopeWizLeaseTime)
	public:
	virtual LRESULT OnWizardNext();
	virtual LRESULT OnWizardBack();
	virtual BOOL OnSetActive();
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
public:
	DWORD GetLeaseTime();

protected:
	// Generated message map functions
	//{{AFX_MSG(CMScopeWizLeaseTime)
	virtual BOOL OnInitDialog();
	afx_msg void OnRadioLeaseLimited();
	afx_msg void OnRadioLeaseUnlimited();
	afx_msg void OnChangeEditLeaseHours();
	afx_msg void OnChangeEditLeaseMinutes();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()

	void ActivateDuration(BOOL fActive);
};

/////////////////////////////////////////////////////////////////////////////
//
// CMScopeWizFinished dialog
//
/////////////////////////////////////////////////////////////////////////////
class CMScopeWizFinished : public CPropertyPageBase
{
	DECLARE_DYNCREATE(CMScopeWizFinished)

// Construction
public:
	CMScopeWizFinished();
	~CMScopeWizFinished();

// Dialog Data
	//{{AFX_DATA(CMScopeWizFinished)
	enum { IDD = IDW_MSCOPE_FINISHED };
	CStatic	m_staticTitle;
	//}}AFX_DATA

   	CFont	m_fontBig;

// Overrides
	// ClassWizard generate virtual function overrides
	//{{AFX_VIRTUAL(CMScopeWizFinished)
	public:
	virtual BOOL OnWizardFinish();
	virtual BOOL OnSetActive();
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	// Generated message map functions
	//{{AFX_MSG(CMScopeWizFinished)
	virtual BOOL OnInitDialog();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()

};

/////////////////////////////////////////////////////////////////////////////
// CMScopeWizWelcome dialog

class CMScopeWizWelcome : public CPropertyPageBase
{
	DECLARE_DYNCREATE(CMScopeWizWelcome)

// Construction
public:
	CMScopeWizWelcome();
	~CMScopeWizWelcome();

// Dialog Data
	//{{AFX_DATA(CMScopeWizWelcome)
	enum { IDD = IDW_MSCOPE_WELCOME };
	CStatic	m_staticTitle;
	//}}AFX_DATA

   	CFont	m_fontBig;

// Overrides
	// ClassWizard generate virtual function overrides
	//{{AFX_VIRTUAL(CMScopeWizWelcome)
	public:
	virtual BOOL OnSetActive();
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	// Generated message map functions
	//{{AFX_MSG(CMScopeWizWelcome)
	virtual BOOL OnInitDialog();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()

};

/////////////////////////////////////////////////////////////////////////////
// CMScopeWizActivate dialog

class CMScopeWizActivate : public CPropertyPageBase
{
	DECLARE_DYNCREATE(CMScopeWizActivate)

// Construction
public:
	CMScopeWizActivate();
	~CMScopeWizActivate();

// Dialog Data
	//{{AFX_DATA(CMScopeWizActivate)
	enum { IDD = IDW_MSCOPE_ACTIVATE };
	CButton	m_radioYes;
	//}}AFX_DATA

    BOOL    m_fActivate;

// Overrides
	// ClassWizard generate virtual function overrides
	//{{AFX_VIRTUAL(CMScopeWizActivate)
	public:
	virtual LRESULT OnWizardNext();
	virtual BOOL OnSetActive();
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	// Generated message map functions
	//{{AFX_MSG(CMScopeWizActivate)
	virtual BOOL OnInitDialog();
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()

};

//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
//}}AFX

///////////////////////////////////////////////////////////////////////////////
//
// CMScopeWiz
//	page holder to contain multicast scope wizard pages
//
/////////////////////////////////////////////////////////////////////////////
class CMScopeWiz : public CPropertyPageHolderBase
{
	friend class CMScopeWizWelcome;
	friend class CMScopeWizName;
	friend class CMScopeWizInvalidName;
	friend class CMScopeWizSetRange;
	friend class CMScopeWizSetExclusions;
	friend class CMScopeWizLeaseTime;
	friend class CMScopeWizFinished;

public:
	CMScopeWiz(ITFSNode *		  pNode,
			  IComponentData *	  pComponentData,
			  ITFSComponentData * pTFSCompData,
			  LPCTSTR			  pszSheetName);
	virtual ~CMScopeWiz();

	virtual DWORD OnFinish();
	BOOL GetScopeRange(CDhcpIpRange * pdhcpIpRange);

	ITFSComponentData * GetTFSCompData()
	{
		if (m_spTFSCompData)
			m_spTFSCompData->AddRef();
		return m_spTFSCompData;
	}

public:
	CMScopeWizWelcome			m_pageWelcome;
	CMScopeWizName				m_pageName;
	CMScopeWizInvalidName		m_pageInvalidName;
	CMScopeWizSetRange			m_pageSetRange;
	CMScopeWizSetExclusions		m_pageSetExclusions;
	CMScopeWizLeaseTime			m_pageLeaseTime;
	CMScopeWizActivate			m_pageActivate;
	CMScopeWizFinished			m_pageFinished;

protected:
	DWORD CreateScope();

	SPITFSComponentData		m_spTFSCompData;
};

#endif // !defined _MSCOPWIZ_H