// CMakeGenDialog.cpp : implementation file
//

#include "stdafx.h"
#include "CMakeSetup.h"
#include "CMakeGenDialog.h"
#include "../cmake.h"

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

/////////////////////////////////////////////////////////////////////////////
// CCMakeGenDialog dialog


CCMakeGenDialog::CCMakeGenDialog(CWnd* pParent /*=NULL*/)
  : CDialog(CCMakeGenDialog::IDD, pParent)
{
  //{{AFX_DATA_INIT(CCMakeGenDialog)
  //}}AFX_DATA_INIT
}


void CCMakeGenDialog::DoDataExchange(CDataExchange* pDX)
{
  CDialog::DoDataExchange(pDX);
  //{{AFX_DATA_MAP(CCMakeGenDialog)
  DDX_Control(pDX, IDC_BuildForLabel, m_BuildForLabel);
  DDX_Control(pDX, IDC_Generator, m_GeneratorChoice);
  DDX_CBStringExact(pDX, IDC_Generator, m_GeneratorChoiceString);
  //}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CCMakeGenDialog, CDialog)
  //{{AFX_MSG_MAP(CCMakeGenDialog)
  // NOTE: the ClassWizard will add message map macros here
  ON_CBN_EDITCHANGE(IDC_Generator, OnEditchangeGenerator)
  //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCMakeGenDialog message handler
  
  void CCMakeGenDialog::OnEditchangeGenerator() 
{
        // TODO: Add your control notification handler code here
        
}


BOOL CCMakeGenDialog::OnInitDialog()
{
  CDialog::OnInitDialog();
  std::vector<std::string> names;
  this->m_CMakeInstance->GetRegisteredGenerators(names);
  for(std::vector<std::string>::iterator i = names.begin();
      i != names.end(); ++i)
    {
    m_GeneratorChoice.AddString(i->c_str());
    }

  // we want to pick the best generator for their system first we check to
  // see if they have run cmake before, if so we use that generator
  std::string mp;
  bool done = false;
  
  // is the last generator set? If so use it
  mp = "[HKEY_CURRENT_USER\\Software\\Kitware\\CMakeSetup\\Settings\\StartPath;LastGenerator]";
  cmSystemTools::ExpandRegistryValues(mp);
  if(mp != "/registry")
    {
    m_GeneratorChoiceString = mp.c_str();
    done = true;
    }

  // look for VS8
  if (!done)
    {
    // check for vs8 in registry then decide what default to use
    mp = 
      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup;Dbghelp_path]";
    cmSystemTools::ExpandRegistryValues(mp);
    if(mp != "/registry")
      {
      m_GeneratorChoiceString = "Visual Studio 8 2005";
      done = true;
      }
    }
  
  // look for VS7.1
  if (!done)
    {
    mp = "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\7.1;InstallDir]";
    cmSystemTools::ExpandRegistryValues(mp);
    if (mp != "/registry")
      {
      m_GeneratorChoiceString = "Visual Studio 7 .NET 2003";
      done = true;
      }
    }
  
  // look for VS7
  if (!done)
    {
    mp = "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\7.0;InstallDir]";
    cmSystemTools::ExpandRegistryValues(mp);
    if (mp != "/registry")
      {
      m_GeneratorChoiceString = "Visual Studio 7";
      done = true;
      }
    }
  
  // if still not done just guess on VS 6
  if (!done)
    {
    m_GeneratorChoiceString = "Visual Studio 6";
    }

  this->UpdateData(FALSE);
  
  return TRUE;  // return TRUE  unless you set the focus to a control
}