Explorar el Código

BUG: fix duplicate property items

Bill Hoffman hace 25 años
padre
commit
b5746484e4

+ 2 - 2
Source/MFCDialog/CMakeSetupDialog.cpp

@@ -453,8 +453,8 @@ void CMakeSetupDialog::FillCacheManagerFromCacheEditor()
 { 
   cmCacheManager::CacheEntryMap cache =
     cmCacheManager::GetInstance()->GetCacheMap();
-  std::list<CPropertyItem*> items = m_CacheEntriesList.GetItems();
-  for(std::list<CPropertyItem*>::iterator i = items.begin();
+  std::set<CPropertyItem*> items = m_CacheEntriesList.GetItems();
+  for(std::set<CPropertyItem*>::iterator i = items.begin();
       i != items.end(); ++i)
     {
     CPropertyItem* item = *i; 

+ 20 - 3
Source/MFCDialog/PropertyList.cpp

@@ -20,7 +20,7 @@ CPropertyList::CPropertyList()
 
 CPropertyList::~CPropertyList()
 {
-  for(std::list<CPropertyItem*>::iterator i = m_PropertyItems.begin();
+  for(std::set<CPropertyItem*>::iterator i = m_PropertyItems.begin();
       i != m_PropertyItems.end(); ++i)
     {
     delete *i;
@@ -118,7 +118,7 @@ int CPropertyList::AddPropItem(CPropertyItem* pItem)
 {
   int nIndex = AddString(_T(""));
   SetItemDataPtr(nIndex,pItem);
-  m_PropertyItems.push_back(pItem);
+  m_PropertyItems.insert(pItem);
   return nIndex;
 }
 
@@ -143,8 +143,25 @@ int CPropertyList::AddProperty(const char* name,
       return i;
       }
     }
+  // if it is not in the displayed list, then
+  // check for it in the m_PropertyItems list as
+  // a removed item
+  for(std::set<CPropertyItem*>::iterator 
+        p = m_PropertyItems.begin();
+      p != m_PropertyItems.end(); ++p)
+    {
+    if((*p)->m_propName == name)
+      {
+      pItem = *p;
+      pItem->m_Removed = false;
+      }
+    }
   // if it is not found, then create a new one
-  pItem = new CPropertyItem(name, value, type, comboItems);
+  if(!pItem)
+    {
+    pItem = new CPropertyItem(name, value, type, comboItems);
+    }
+  
   return this->AddPropItem(pItem);
 }
 

+ 3 - 3
Source/MFCDialog/PropertyList.h

@@ -19,7 +19,7 @@
 #define IDC_PROPBTNCTRL  714
 #define IDC_PROPCHECKBOXCTRL 715
 
-#include <list>
+#include "../cmStandardIncludes.h"
 
 /////////////////////////////////////////////////////////////////////////////
 //CPropertyList Items
@@ -63,7 +63,7 @@ public:
                   const char* value,
                   int type,
                   const char* comboItems);
-  std::list<CPropertyItem*> GetItems() 
+  std::set<CPropertyItem*> GetItems() 
     {
       return m_PropertyItems;
     }
@@ -130,7 +130,7 @@ protected:
   BOOL m_bDivIsSet;
   HCURSOR m_hCursorArrow;
   HCURSOR m_hCursorSize;
-  std::list<CPropertyItem*> m_PropertyItems;
+  std::set<CPropertyItem*> m_PropertyItems;
 };
 
 /////////////////////////////////////////////////////////////////////////////