int CHistoryCombo::AddString(const CString& str, INT_PTR pos /* = -1*/, BOOL isSel /* = TRUE */) { if (str.IsEmpty()) return -1; if (pos < 0) pos = GetCount(); CString combostring = str; combostring.Replace('\r', ' '); combostring.Replace('\n', ' '); if (m_bTrim) combostring.Trim(); if (combostring.IsEmpty()) return -1; //search the Combo for another string like this //and do not insert if found int nIndex = m_bCaseSensitive ? FindStringExactCaseSensitive(-1, combostring) : FindStringExact(-1, combostring); if (nIndex != -1) { if (nIndex > pos) { DeleteItem(nIndex); m_arEntries.RemoveAt(nIndex); } else { if(isSel) SetCurSel(nIndex); return nIndex; } } //truncate list to m_nMaxHistoryItems int nNumItems = GetCount(); for (int n = m_nMaxHistoryItems; n < nNumItems; n++) { DeleteItem(m_nMaxHistoryItems); m_arEntries.RemoveAt(m_nMaxHistoryItems); } int nRet = InsertEntry(combostring, pos); if (isSel) SetCurSel(nRet); return nRet; }
int CHistoryCombo::AddString(CString str, INT_PTR pos,BOOL isSel) { if (str.IsEmpty()) return -1; if (pos < 0) pos = GetCount(); if (m_bTrim) str.Trim(_T(" ")); CString combostring = str; combostring.Replace('\r', ' '); combostring.Replace('\n', ' '); if (m_bTrim) combostring.Trim(); //search the Combo for another string like this //and do not insert if found int nIndex = m_bCaseSensitive ? FindStringExactCaseSensitive(-1, combostring) : FindStringExact(-1, combostring); if (nIndex != -1) { if (nIndex > pos) { DeleteItem(nIndex); m_arEntries.RemoveAt(nIndex); } else { if(isSel) SetCurSel(nIndex); return nIndex; } } //truncate list to m_nMaxHistoryItems int nNumItems = GetCount(); for (int n = m_nMaxHistoryItems; n < nNumItems; n++) { DeleteItem(m_nMaxHistoryItems); m_arEntries.RemoveAt(m_nMaxHistoryItems); } COMBOBOXEXITEM cbei; SecureZeroMemory(&cbei, sizeof cbei); cbei.mask = CBEIF_TEXT; cbei.iItem = pos; cbei.pszText = const_cast<LPTSTR>(combostring.GetString()); #ifdef HISTORYCOMBO_WITH_SYSIMAGELIST if (m_bURLHistory) { cbei.iImage = SYS_IMAGE_LIST().GetFileIconIndex(str); if (cbei.iImage == 0 || cbei.iImage == SYS_IMAGE_LIST().GetDefaultIconIndex()) { if (str.Left(5) == _T("http:")) cbei.iImage = SYS_IMAGE_LIST().GetFileIconIndex(_T(".html")); else if (str.Left(6) == _T("https:")) cbei.iImage = SYS_IMAGE_LIST().GetFileIconIndex(_T(".html")); else if (str.Left(5) == _T("file:")) cbei.iImage = SYS_IMAGE_LIST().GetDirIconIndex(); else if (str.Left(4) == _T("git:")) cbei.iImage = m_nGitIconIndex; else if (str.Left(4) == _T("ssh:")) cbei.iImage = m_nGitIconIndex; else cbei.iImage = SYS_IMAGE_LIST().GetDirIconIndex(); } cbei.iSelectedImage = cbei.iImage; cbei.mask |= CBEIF_IMAGE | CBEIF_SELECTEDIMAGE; } if (m_bPathHistory) { cbei.iImage = SYS_IMAGE_LIST().GetFileIconIndex(str); if (cbei.iImage == SYS_IMAGE_LIST().GetDefaultIconIndex()) { cbei.iImage = SYS_IMAGE_LIST().GetDirIconIndex(); } cbei.iSelectedImage = cbei.iImage; cbei.mask |= CBEIF_IMAGE | CBEIF_SELECTEDIMAGE; } #endif int nRet = InsertItem(&cbei); if (nRet >= 0) m_arEntries.InsertAt(nRet, str); if(isSel) SetCurSel(nRet); return nRet; }