// 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 names; this->m_CMakeInstance->GetRegisteredGenerators(names); for(std::vector::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 }