bool CEditTreeCtrl::NewItem(TVINSERTSTRUCT & ins) { TRACE1(_T("CEditTreeCtrl::NewItem('%s')\n"), ins.item.pszText ? ins.item.pszText : _T("NULL")); if(!CanInsertItem(ins.hParent)) return false; HTREEITEM hItem = InsertItem(&ins); if(hItem) { SelectItem(hItem); OnNewItem(hItem); EditLabel(hItem); } return hItem != 0; }
CXTPRecentFileListItem* CXTPRecentFileList::AddItem(LPCTSTR lpszPathName) { ASSERT(m_arrNames != NULL); ASSERT(lpszPathName != NULL); ASSERT(AfxIsValidString(lpszPathName)); // fully qualify the path name TCHAR szTemp[_MAX_PATH]; AfxFullPath(szTemp, lpszPathName); int iMRU = 0; CXTPRecentFileListItem* pItem = NULL; // update the MRU list, if an existing MRU string matches file name for (; iMRU < m_nSize - 1; iMRU++) { if (AfxComparePath(m_arrNames[iMRU], szTemp)) { pItem = m_pItems[iMRU]; break; // iMRU will point to matching entry } } if (iMRU == m_nSize - 1) // Not found { for (; iMRU >= 0; iMRU--) { if (!m_pItems[iMRU] || !m_pItems[iMRU]->IsPinned()) break; } } if (iMRU < 0) return NULL; if (pItem == NULL && m_pItems[iMRU] != NULL) { CMDTARGET_RELEASE(m_pItems[iMRU]); } // move MRU strings before this one down for (; iMRU > 0; iMRU--) { ASSERT(iMRU > 0); ASSERT(iMRU < m_nSize); m_arrNames[iMRU] = m_arrNames[iMRU - 1]; m_pItems[iMRU] = m_pItems[iMRU - 1]; } // place this one at the beginning m_arrNames[0] = szTemp; if (pItem) { m_pItems[0] = pItem; } else { pItem = new CXTPRecentFileListItem(this); pItem->m_strPathName = m_arrNames[0]; m_pItems[0] = pItem; OnNewItem(pItem); } return pItem; }