COptionTreeItem * COptionTree::InsertItem(COptionTreeItem *otiItem, COptionTreeItem *otiParent) { // Declare variables COptionTreeItem* otiNext; // Make sure item is not NULL if (otiItem == NULL) { return NULL; } // If parent is NULL, becomes root if (otiParent == NULL) { otiParent = &m_otiRoot; } // Set child if (otiParent->GetChild() == NULL) { otiParent->SetChild(otiItem); } else { // -- Add to end of the sibling list otiNext = otiParent->GetChild(); while (otiNext->GetSibling() != NULL) { otiNext = otiNext->GetSibling(); } otiNext->SetSibling(otiItem); } // Auto generate a default ID m_uLastUID++; otiItem->SetCtrlID(m_uLastUID); // Set item information otiItem->SetParent(otiParent); otiItem->SetOptionsOwner(this); // Send notification to user SendNotify(OT_NOTIFY_INSERTITEM, otiItem); //// Updated items //UpdatedItems(); //// Force redraw //Invalidate(); //// Update window //UpdateWindow(); return otiItem; }
void COptionTree::Delete(COptionTreeItem *otiItem) { // Declare variables COptionTreeItem* otiIter; COptionTreeItem* otiNext; // Clear visible list ClearVisibleList(); // Send notify to user SendNotify(OT_NOTIFY_DELETEITEM, otiItem); // Passing in a NULL deletes frm root if (otiItem == NULL) { otiItem = &m_otiRoot; } // Delete children otiIter = otiItem->GetChild(); while (otiIter != NULL) { // -- Get sibling otiNext = otiIter->GetSibling(); // -- Delete DeleteItem(otiIter); // -- Get next otiIter = otiNext; } // Unlink from tree if (otiItem->GetParent() != NULL) { if (otiItem->GetParent()->GetChild() == otiItem) { otiItem->GetParent()->SetChild(otiItem->GetSibling()); } else { otiIter = otiItem->GetParent()->GetChild(); while (otiIter->GetSibling() && otiIter->GetSibling() != otiItem) { otiIter = otiIter->GetSibling(); } if (otiIter->GetSibling()) { otiIter->SetSibling(otiItem->GetSibling()); } } } // Delete item if (otiItem != &m_otiRoot) { if (otiItem == GetFocusedItem()) { SetFocusedItem(NULL); } otiItem->CleanDestroyWindow(); delete otiItem; } }