CMake/Source/MFCDialog/CMakeGenDialog.cpp

123 lines
3.2 KiB
C++
Raw Normal View History

// 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;
}
struct regToGen
{
const char* Registry;
const char* GeneratorName;
};
regToGen installedGenerators[] = {
// VS 9
{ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft"
"\\VisualStudio\\9.0\\Setup;Dbghelp_path]", "Visual Studio 9 2008"},
// VS 8
{ "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft"
"\\VisualStudio\\8.0\\Setup;Dbghelp_path]", "Visual Studio 8 2005"},
// VS 7.1
{"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft"
"\\VisualStudio\\7.1;InstallDir]", "Visual Studio 7 .NET 2003"},
// VS 7
{"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft"
"\\VisualStudio\\7.0;InstallDir]", "Visual Studio 7"},
{0,0}
};
for(regToGen* ptr = installedGenerators; ptr->Registry != 0 && !done; ptr++)
{
mp = ptr->Registry;
cmSystemTools::ExpandRegistryValues(mp);
if(mp != "/registry")
{
m_GeneratorChoiceString = ptr->GeneratorName;
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
}