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


// PageComboBox.cpp : implementation file
//

#include "stdafx.h"
#include "Resource.h"
#include "PageComboBox.h"

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

/////////////////////////////////////////////////////////////////////////////
// CPageComboBox property page

IMPLEMENT_DYNCREATE(CPageComboBox, CConfigWizPage)

void CPageComboBox::InitData(void)
{
	//{{AFX_DATA_INIT(CPageComboBox)
	m_strInstruction = _T("");
	m_strComboBox = _T("");
	//}}AFX_DATA_INIT

   m_astrValues.RemoveAll();
   m_iDefaultValue = -1;

   m_fFirstInit = TRUE;
}

CPageComboBox::CPageComboBox() : CConfigWizPage()
{
   InitData();
}

CPageComboBox::CPageComboBox(int const eMode, UINT nIDCaption /* = 0 */, CConfigObject const * const pOwner /* = NULL */, int const nState /* = -1 */, CString const & strTitle /* = TEXT("") */, CString const & strInstruction /* = TEXT("") */) : CConfigWizPage()
{
   InitData();
   Construct(eMode, nIDCaption, pOwner, nState, strTitle, strInstruction);
}

void CPageComboBox::Construct(int const eMode, UINT nIDCaption /* = 0 */, CConfigObject const * const pOwner /* = NULL */, int const nState /* = -1 */, CString const & strTitle /* = TEXT("") */, CString const & strInstruction /* = TEXT("") */)
{
   CConfigWizPage::Construct((eMode == WIZARD) ? IDD_WizPageComboBox : IDD_PropPageComboBox, nIDCaption, pOwner, nState);

   SetTitle(strTitle);
   m_strInstruction = strInstruction;
}

CPageComboBox::~CPageComboBox()
{
}

void CPageComboBox::DoDataExchange(CDataExchange* pDX)
{
	CConfigWizPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPageComboBox)
	DDX_Text(pDX, IDC_PageComboBox_Instruction, m_strInstruction);
	DDX_CBString(pDX, IDC_PageComboBox_ComboBox, m_strComboBox);
	//}}AFX_DATA_MAP
}


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

BOOL CPageComboBox::SetValues(CStringArray const & astrValues, int const iDefaultValue /* = 0 */)
{
   BOOL fSuccess = FALSE;

   try
   {
      AffirmThrow(astrValues.GetSize() > 0);
      AffirmThrow(iDefaultValue >= 0);
      AffirmThrow(iDefaultValue < astrValues.GetSize());

      m_astrValues.RemoveAll();
      m_astrValues.Copy(astrValues);
      m_iDefaultValue = iDefaultValue;

      RefreshValues(TRUE);

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

   return fSuccess;
}

int CPageComboBox::GetChoice(void)
{
   int iChoice = m_iDefaultValue;

   try
   {
      if (m_hWnd != NULL) UpdateData();
	      
      for (int i = 0; i < m_astrValues.GetSize(); i++)
      {
         if (m_strComboBox == m_astrValues[i])
         {
            iChoice = i;
            break;
         }
      }
   }
   catch (CAffirmException ae)
   {
   }

   return iChoice;
}

void CPageComboBox::RefreshValues(BOOL const fUseDefault /* = FALSE */)
{
   try
   {
      AffirmThrow(m_astrValues.GetSize() > 0);
      AffirmThrow(m_iDefaultValue >= 0);
      AffirmThrow(m_iDefaultValue < m_astrValues.GetSize());

      if (fUseDefault) m_strComboBox = m_astrValues[m_iDefaultValue];

      if (m_hWnd != NULL)
      {
         CComboBox * pwndComboBox = (CComboBox *) GetDlgItem(IDC_PageComboBox_ComboBox);
         AffirmThrow(pwndComboBox != NULL);

         pwndComboBox->ResetContent();

         for (int i = 0; i < m_astrValues.GetSize(); i++)
         {
            AffirmThrow(pwndComboBox->AddString(m_astrValues[i]) >= 0);
         }

         UpdateData(FALSE);
      }
   }
   catch (CAffirmException ae)
   {
   }

   return;
}

/////////////////////////////////////////////////////////////////////////////
// CPageComboBox message handlers

BOOL CPageComboBox::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
}
