BUG: fix cache updates

This commit is contained in:
Bill Hoffman 2001-04-24 13:32:31 -04:00
parent 818b0e5bc1
commit 37468fad3a
3 changed files with 29 additions and 8 deletions

View File

@ -96,6 +96,7 @@ CMakeSetupDialog::CMakeSetupDialog(CWnd* pParent /*=NULL*/)
m_WhereSource = startPath;
this->LoadFromRegistry();
m_InitMakefile = false;
m_GUIInitialized = false;
this->InitMakefile();
}
@ -104,8 +105,14 @@ void CMakeSetupDialog::InitMakefile()
{
if(m_InitMakefile)
{
// 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 == "")
{
m_WhereBuild = m_WhereSource;
@ -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;
}
}
}

View File

@ -31,8 +31,11 @@ protected:
enum { IDD = IDD_CMakeSetupDialog_DIALOG };
cmMakefile m_Makefile;
bool m_InitMakefile;
bool m_GUIInitialized;
CString m_WhereSource;
CString m_WhereBuild;
CString m_WhereSourceLast;
CString m_WhereBuildLast;
CPropertyList m_CacheEntriesList;
//}}AFX_DATA

View File

@ -144,10 +144,8 @@ int CPropertyList::AddProperty(const char* name,
}
}
// if it is not found, then create a new one
int nIndex = AddString(_T(""));
pItem = new CPropertyItem(name, value, type, comboItems);
SetItemDataPtr(nIndex,pItem);
return nIndex;
return this->AddPropItem(pItem);
}
int CPropertyList::OnCreate(LPCREATESTRUCT lpCreateStruct)