wxTreeItemId CConfigTree::FindNextItemId(wxTreeItemId treeItemId, const wxString& text, bool checkFirst, bool matchCase, bool matchWord) { wxString ctext(text); if (!matchCase) { ctext.MakeLower(); } wxTreeItemId found; wxTreeItemId id; wxTreeItemId currentId = treeItemId; CConfigItem *item = NULL; wxTreeItemIdValue dummy; while (currentId.IsOk()) { if (checkFirst) { CTreeItemData *data = (CTreeItemData *)GetItemData(currentId); if (data) { if ((item = data->GetConfigItem()) != NULL) { wxString name = item->GetName(); wxString brief = item->GetBriefDescription(); wxString desc = item->GetDescription(); if (!matchCase) { name.MakeLower(); brief.MakeLower(); desc.MakeLower(); } if (CUtils::FindString(name, ctext, matchWord) || CUtils::FindString(brief, ctext, matchWord) || CUtils::FindString(desc, ctext, matchWord)) { found = currentId; break; } } } } checkFirst = true; id = GetFirstChild(currentId, dummy); if (!id.IsOk()) { id = GetNextSibling(currentId); if (!id.IsOk()) { wxTreeItemId parentId = currentId; do { parentId = GetItemParent(parentId); if (!parentId.IsOk()) { break; } id = GetNextSibling(parentId); } while (!id.IsOk()); } } currentId = id; } return found; }