CMake/Source/MFCDialog/CMakeGenDialog.cpp

130 lines
3.2 KiB
C++

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