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


// WizPageSpin.cpp : implementation file
//

#include "stdafx.h"
#include "Resource.h"
#include "WizPageSpin.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CWizPageSpin property page

IMPLEMENT_DYNCREATE(CWizPageSpin, CConfigWizPage)

CWizPageSpin::CWizPageSpin(CConfigObject const * const pOwner /* = NULL */, int const nState /* = -1 */, CString const & strTitle /* = TEXT("") */, CString const & strInstruction /* = TEXT("") */) : CConfigWizPage()
{
	//{{AFX_DATA_INIT(CWizPageSpin)
	m_strInstruction = TEXT("");
	m_nSpin = 0;
	//}}AFX_DATA_INIT

   m_nMin = 0;
   m_nMax = 0;
   m_nDefaultValue = 0;

   m_fFirstInit = TRUE;

   Construct(pOwner, nState, strTitle, strInstruction);
}

void CWizPageSpin::Construct(CConfigObject const * const pOwner /* = NULL */, int const nState /* = -1 */, CString const & strTitle /* = TEXT("") */, CString const & strInstruction /* = TEXT("") */)
{
   CConfigWizPage::Construct(IDD_WizPageSpin, 0, pOwner, nState);

   SetTitle(strTitle);
   m_strInstruction = strInstruction;
}

CWizPageSpin::~CWizPageSpin()
{
}

void CWizPageSpin::DoDataExchange(CDataExchange* pDX)
{
	CConfigWizPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CWizPageSpin)
	DDX_Control(pDX, IDC_WizPageSpin_Spin, m_ctrlSpin);
	DDX_Text(pDX, IDC_WizPageSpin_Instruction, m_strInstruction);
	DDX_Text(pDX, IDC_WizPageSpin_Edit, m_nSpin);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CWizPageSpin, CConfigWizPage)
	//{{AFX_MSG_MAP(CWizPageSpin)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BOOL CWizPageSpin::SetValues(int const nMin, int const nMax, int const nDefaultValue /* = 0 */)
{
   BOOL fSuccess = FALSE;

   try
   {
      AffirmThrow(nMin < nMax);
      AffirmThrow(nDefaultValue >= nMin);
      AffirmThrow(nDefaultValue <= nMax);

      m_nMin = nMin;
      m_nMax = nMax;
      m_nDefaultValue = nDefaultValue;

      RefreshValues(TRUE);

      fSuccess = TRUE;
   }
   catch (CAffirmException ae)
   {
   }

   return fSuccess;
}

int CWizPageSpin::GetChoice(void)
{
   if (m_hWnd != NULL) UpdateData();
   return m_nSpin;
}

void CWizPageSpin::RefreshValues(BOOL const fUseDefault /* = FALSE */)
{
   try
   {
      AffirmThrow(m_nMin < m_nMax);
      AffirmThrow(m_nDefaultValue >= m_nMin);
      AffirmThrow(m_nDefaultValue <= m_nMax);

      if (fUseDefault) m_nSpin = m_nDefaultValue;

      if (m_hWnd != NULL)
      {
         m_ctrlSpin.SetRange(m_nMin, m_nMax);
         UpdateData(FALSE);
      }
   }
   catch (CAffirmException ae)
   {
   }

   return;
}

/////////////////////////////////////////////////////////////////////////////
// CWizPageSpin message handlers

BOOL CWizPageSpin::OnInitDialog() 
{
	CConfigWizPage::OnInitDialog();
	
   //	Because of the way our wizard pages work (ie. they get removed from the sheet when
   // the back button is pushed), we may actually wind up here any number of times.
   // So, ... remember that we have been here, and only RefreshValues() using defaults on
   // the first time!
   RefreshValues(m_fFirstInit);
   m_fFirstInit = FALSE;
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}
