From: Vadim Zeitlin Date: Thu, 6 Jun 2002 19:37:52 +0000 (+0000) Subject: make the incremental kbd search wrap to the beginning if necessary X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/526b8142e132f7aafa48956aa6fa9115d6825762 make the incremental kbd search wrap to the beginning if necessary git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15767 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/generic/treectlg.cpp b/src/generic/treectlg.cpp index 289d6a3cd3..104b899c6d 100644 --- a/src/generic/treectlg.cpp +++ b/src/generic/treectlg.cpp @@ -1195,13 +1195,40 @@ wxTreeItemId wxGenericTreeCtrl::FindItem(const wxTreeItemId& idParent, // would be too bothersome wxString prefix = prefixOrig.Lower(); + // determine the starting point: we shouldn't take the current item (this + // allows to switch between two items starting with the same letter just by + // pressing it) but we shouldn't jump to the next one if the user is + // continuing to type as otherwise he might easily skip the item he wanted wxTreeItemId id = idParent; + if ( prefix.length() == 1 ) + { + id = GetNext(id); + } + // look for the item starting with the given prefix after it while ( id.IsOk() && !GetItemText(id).Lower().StartsWith(prefix) ) { id = GetNext(id); } + // if we haven't found anything... + if ( !id.IsOk() ) + { + // ... wrap to the beginning + id = GetRootItem(); + if ( HasFlag(wxTR_HIDE_ROOT) ) + { + // can't select virtual root + id = GetNext(id); + } + + // and try all the items (stop when we get to the one we started from) + while ( id != idParent && !GetItemText(id).Lower().StartsWith(prefix) ) + { + id = GetNext(id); + } + } + return id; }