Originally posted by: Mihai
// 1.
// 2.
//3.
// 4.
Now, you need to insert two new functions:
// Function name : CTreeMultiColumnCtrl::Delete
// protected function
Hi,
The idea is to store all deleted items. Else, you need to make big changes. Anyway with this work. You
need to make some changes into source files: TreeCtrlMultiColumn.h and into TreeCtrlMultiColumn.cpp.
So: First add a new member as:
private: CMap<int,int,BOOL,BOOL> m_mapItemDeleted;
Update the folowing functions with the current body:
// Function name : CTreeMultiColumnCtrl::ItemHasChildren
// Description : Return TRUE if item iItem has at least one children
// Return type : BOOL
// Argument : int iItem
BOOL CTreeMultiColumnCtrl::ItemHasChildren(int iItem)
{
int key = -1;
int value = -1;
POSITION position = m_mapParents.GetStartPosition();
while (position)
{
m_mapParents.GetNextAssoc(position, key, value);
if (!IsDeleted(value))
if (!IsDeleted(key))
if (value == iItem)
return TRUE;
}
return FALSE;
}
// Function name : CTreeMultiColumnCtrl::GetFirstItemChild
// Description : Return the index of first item child of nItem
// Return type : int
// Argument : int nItem
int CTreeMultiColumnCtrl::GetFirstItemChild(int nItem)
{
m_nLastItemFind = -1;
m_nLastItemFound = nItem;
return GetNextItemChild();
}
// Function name : CTreeMultiColumnCtrl::GetNextItemChild
// Description : Return the index of next item child of nItem
// Return type : int
int CTreeMultiColumnCtrl::GetNextItemChild()
{
m_nLastItemFind++;
while (IsDeleted(m_nLastItemFind) || ((m_nLastItemFind < m_listItems.GetItemCount()) &&
(GetItemParent(m_nLastItemFind) != m_nLastItemFound)))
m_nLastItemFind++;
if (m_nLastItemFind < m_listItems.GetItemCount())
return m_nLastItemFind;
return -1;
}
// Function name : CTreeMultiColumnCtrl::IsLastChildren
// Description : Check if iItem is last children
// Return type : BOOL
// Argument : int iItem
BOOL CTreeMultiColumnCtrl::IsLastChildren(int iItem)
{
int iParent = GetItemParent(iItem);
int cItem = m_listItems.GetItemCount();
int i = iItem + 1;
while (i < cItem)
{
if (!IsDeleted(i))
if (!IsDeleted(GetItemParent(i)))
if (GetItemParent(i) == iParent)
return FALSE;
i++;
}
return TRUE;
}
// Description :
// Return type : BOOL
// Argument : int nItem
// Argument : BOOL bRecurse
BOOL CTreeMultiColumnCtrl::Delete(int nItem)
{
int nTrueItem = GetItemData(nItem);
if (!ItemHasChildren(nTrueItem))
{
m_bInsideCode++;
DeleteItem(nItem);
m_mapItemDeleted[nTrueItem] = TRUE;
int lItem = max(0, nItem - 1);
RedrawItems(lItem, lItem);
m_bInsideCode--;
return TRUE;
}
return FALSE;
}
// Function name : CTreeMultiColumnCtrl::IsDeleted
// Description :
// Return type : BOOL
// Argument : int nItem
BOOL CTreeMultiColumnCtrl::IsDeleted(int nItem)
{
BOOL bValue = FALSE;
m_mapItemDeleted.Lookup(nItem, bValue);
return bValue;
}
Sincerely, Mihai Filimon
P.S. I will make the changes to site.