diff options
Diffstat (limited to 'Source/MFCDialog/CMakeSetupDialog.cpp')
-rw-r--r-- | Source/MFCDialog/CMakeSetupDialog.cpp | 30 |
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; } } } |