summaryrefslogtreecommitdiffstats
path: root/Source/MFCDialog/CMakeSetupDialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/MFCDialog/CMakeSetupDialog.cpp')
-rw-r--r--Source/MFCDialog/CMakeSetupDialog.cpp30
1 files changed, 25 insertions, 5 deletions
diff --git a/Source/MFCDialog/CMakeSetupDialog.cpp b/Source/MFCDialog/CMakeSetupDialog.cpp
index 9d55322..add242b 100644
--- a/Source/MFCDialog/CMakeSetupDialog.cpp
+++ b/Source/MFCDialog/CMakeSetupDialog.cpp
@@ -96,6 +96,7 @@ CMakeSetupDialog::CMakeSetupDialog(CWnd* pParent /*=NULL*/)
m_WhereSource = startPath;
this->LoadFromRegistry();
m_InitMakefile = false;
+ m_GUIInitialized = false;
this->InitMakefile();
}
@@ -104,7 +105,13 @@ void CMakeSetupDialog::InitMakefile()
{
if(m_InitMakefile)
{
- return;
+ // if no change in source or build then
+ // do not re-init the m_Makefile
+ if(m_WhereSource == m_WhereSourceLast
+ && m_WhereBuild == m_WhereBuildLast)
+ {
+ return;
+ }
}
if(m_WhereBuild == "")
{
@@ -114,6 +121,10 @@ void CMakeSetupDialog::InitMakefile()
{
return;
}
+ // save the values for these so we can detect
+ // when the GUI has changed them
+ m_WhereBuildLast = m_WhereBuild;
+ m_WhereSourceLast = m_WhereSource;
m_InitMakefile = true;
// set up the cmMakefile member
m_Makefile.SetMakefileGenerator(new cmMSProjectGenerator);
@@ -128,6 +139,11 @@ void CMakeSetupDialog::InitMakefile()
m_Makefile.MakeStartDirectoriesCurrent();
// Create a string for the cache file
cmCacheManager::GetInstance()->LoadCache(&m_Makefile);
+ // if the GUI is already up, then reset it to the loaded cache
+ if(m_GUIInitialized)
+ {
+ this->FillCacheEditorFromCacheManager();
+ }
}
void CMakeSetupDialog::DoDataExchange(CDataExchange* pDX)
@@ -187,6 +203,7 @@ BEGIN_MESSAGE_MAP(CMakeSetupDialog, CDialog)
{
this->FillCacheEditorFromCacheManager();
}
+ m_GUIInitialized = true;
return TRUE; // return TRUE unless you set the focus to a control
}
@@ -365,9 +382,11 @@ void CMakeSetupDialog::LoadFromRegistry()
void CMakeSetupDialog::OnBuildProjects()
{
+ ::SetCursor(LoadCursor(NULL, IDC_WAIT));
// get all the info from the screen
this->UpdateData();
- ::SetCursor(LoadCursor(NULL, IDC_WAIT));
+ // re-init the m_Makefile
+ this->InitMakefile();
// copy the GUI cache values into the cache manager
this->FillCacheManagerFromCacheEditor();
CString makefileIn = m_WhereSource;
@@ -438,16 +457,17 @@ void CMakeSetupDialog::FillCacheManagerFromCacheEditor()
for(std::list<CPropertyItem*>::iterator i = items.begin();
i != items.end(); ++i)
{
+ CPropertyItem* item = *i;
// check to see if the editor has removed the cache entry
- if((*i)->m_Removed)
+ if(item->m_Removed)
{
cmCacheManager::GetInstance()->RemoveCacheEntry((*i)->m_propName);
}
else
{
cmCacheManager::CacheEntryMap::iterator p =
- cache.find((const char*)(*i)->m_propName);
- (*p).second.m_Value = (*i)->m_curValue;
+ cache.find((const char*)item->m_propName);
+ (*p).second.m_Value = item->m_curValue;
}
}
}