/*****************************************************************************
* Copyright (c) 1990-98 Digi International Inc., All Rights Reserved
* 
* This software contains proprietary and confidential information of Digi
* International Inc.  By accepting transfer of this copy, Recipient agrees
* to retain this software in confidence, to prevent disclosure to others,
* and to make no use of this software other than that for which it was
* delivered.  This is an unpublished copyrighted work of Digi International
* Inc.  Except as permitted by federal law, 17 USC 117, copying is strictly
* prohibited.
* 
* Restricted Rights Legend
*
* Use, duplication, or disclosure by the Government is subject to
* restrictions set forth in sub-paragraph (c)(1)(ii) of The Rights in
* Technical Data and Computer Software clause at DFARS 252.227-7031 or
* subparagraphs (c)(1) and (2) of the Commercial Computer Software -
* Restricted Rights at 48 CFR 52.227-19, as applicable.
*
* Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343
*
*****************************************************************************/


#if !defined(CONFIGWIZPAGE_H)
#define CONFIGWIZPAGE_H

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


#include "Dib.h"
#include "ConfigObject.h"

class CConfigWizSheet;

/////////////////////////////////////////////////////////////////////////////
// CConfigWizPage dialog

class FW_EXPORTED_CLASS CConfigWizPage : public CPropertyPage
{
	DECLARE_DYNCREATE(CConfigWizPage)

public:
// Construction/Destruction
	CConfigWizPage();
	CConfigWizPage(UINT nIDTemplate, UINT nIDCaption = 0, CConfigObject const * const pOwner = NULL, int const nState = -1);
   void Construct(UINT nIDTemplate, UINT nIDCaption = 0, CConfigObject const * const pOwner = NULL, int const nState = -1);

	~CConfigWizPage();

   void SetOwner(CConfigObject const * const pOwner) { m_pOwner = (CConfigObject *)pOwner; }
   CConfigObject * GetOwner() const { return m_pOwner; }

   void SetState(int const nState) { m_nState = nState; }
   int GetState(void) const { return m_nState; }

   void SetTitle(CString const & strTitle) { m_strTitle = strTitle; }
   CString GetTitle(void) const { return m_strTitle; }

   void SetPageBitmap(CDib const * const pBmp, CPoint const & ptPlacement, BOOL const fUseDefault = FALSE);

// Operations
	BOOL AddPage(CConfigWizPage* pPage, BOOL fSkipOnBack = FALSE, BOOL fPermanent = FALSE);
	BOOL InsertPage(CConfigWizPage* pPage, BOOL fSkipOnBack = FALSE, BOOL fPermanent = FALSE);
	BOOL RemovePage(CConfigWizPage* pPage);

   // For radio and combo box wiz pages
   virtual BOOL SetValues(CStringArray const & astrValues, int const iDefaultValue = 0) { ASSERT(FALSE); return FALSE; }

   // For spin wiz pages
   virtual BOOL SetValues(int const nMin, int const nMax, int const nDefaultValue = 0) { ASSERT(FALSE); return FALSE; }

   // For all
   virtual int GetChoice(void) { ASSERT(FALSE); return 0; }


   int DoRealizePalette(BOOL const fForeground);


// Dialog Data
	//{{AFX_DATA(CConfigWizPage)
		// 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(CConfigWizPage)
	public:
	virtual LRESULT OnWizardBack();
	virtual LRESULT OnWizardNext();
	virtual BOOL OnSetActive();
	virtual BOOL OnWizardFinish();
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
private:
   CConfigObject * m_pOwner;
   UINT m_nState;

   CString m_strTitle;

   BOOL m_fUseDefaultBmp;
   CPoint m_ptPageBmpPlacement;
   CDib * m_pPageBmp;

   void InitData(void);

   BOOL InWizardMode() const;
	CConfigWizSheet* GetOwnerSheet() const;

protected:
	// Generated message map functions
	//{{AFX_MSG(CConfigWizPage)
	virtual BOOL OnInitDialog();
	afx_msg BOOL OnEraseBkgnd(CDC* pDC);
	afx_msg void OnPaletteChanged(CWnd* pFocusWnd);
	afx_msg BOOL OnQueryNewPalette();
	afx_msg void OnSetFocus(CWnd* pOldWnd);
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

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

#endif // !defined(CONFIGWIZPAGE_H)
