24 #ifndef KLF_ITERATORSEARCHABLE_H 25 #define KLF_ITERATORSEARCHABLE_H 29 #include <QApplication> 82 virtual SearchIterator searchIterBegin() = 0;
87 virtual SearchIterator searchIterEnd() = 0;
91 virtual SearchIterator
searchIterAdvance(
const SearchIterator& pos,
bool forward) {
return forward ? (pos+1) : (pos-1); }
94 inline SearchIterator
searchIterNext(
const SearchIterator& pos) {
return searchIterAdvance(pos,
true); }
97 inline SearchIterator
searchIterPrev(
const SearchIterator& pos) {
return searchIterAdvance(pos,
false); }
108 {
return forward ? searchIterBegin() : searchIterEnd(); }
115 virtual bool searchIterMatches(
const SearchIterator& pos,
const QString& queryString) = 0;
126 virtual void searchPerformed(
const SearchIterator& resultMatchPosition) { Q_UNUSED(resultMatchPosition); }
147 klfDbg(
" s="<<queryString<<
" from "<<startPos<<
" forward="<<forward ) ;
152 pCurPos = safe_cycl_advance_iterator(startPos, !forward);
153 pSearchAborted =
false;
154 pQString = queryString;
155 SearchIterator it = searchIterFindNext(forward);
168 pSearchAborted =
false;
169 if (pQString.isEmpty())
170 return tee_notify_search_result(searchIterEnd());
178 pCurPos = safe_cycl_advance_iterator(pCurPos, forward);
181 if (pCurPos == searchIterEnd())
186 if ( searchIterMatches(pCurPos, pQString) ) {
193 qApp->processEvents();
200 klfDbg(
"found "<<pQString<<
" at "<<pCurPos ) ;
201 return tee_notify_search_result(pCurPos);
205 return tee_notify_search_result(searchIterEnd());
217 return KLF_DEBUG_TEE( ! (searchIterFind(searchIterStartFrom(forward), queryString, forward)
218 == searchIterEnd()) );
227 return KLF_DEBUG_TEE( ! (searchIterFindNext(forward) == searchIterEnd()) );
240 pSearchAborted =
true;
256 bool forward = (n>0);
260 SearchIterator a = it;
262 a = safe_cycl_advance_iterator(a, forward);
275 SearchIterator pCurPos;
279 inline SearchIterator tee_notify_search_result(
const SearchIterator& iter)
281 searchPerformed(iter);
285 inline SearchIterator safe_cycl_advance_iterator(
const SearchIterator& it,
bool forward)
288 if (it == searchIterEnd())
289 return searchIterBegin();
290 return searchIterNext(it);
292 if (it == searchIterBegin())
293 return searchIterEnd();
294 return searchIterPrev(it);
SearchIterator searchIterPrev(const SearchIterator &pos)
virtual bool searchFind(const QString &queryString, bool forward)
An interface for objects that can be I-searched with a KLFSearchBar.
QString searchQueryString() const
#define KLF_DEBUG_TEE(expr)
virtual SearchIterator searchIterFindNext(bool forward)
Find the next occurence of previous search string.
#define klfDbg(streamableItems)
#define KLF_DEBUG_BLOCK(msg)
virtual SearchIterator searchIterAdvance(const SearchIterator &pos, bool forward)
virtual void searchPerformed(const SearchIterator &resultMatchPosition)
virtual bool searchFindNext(bool forward)
virtual void searchAbort()
#define KLF_DEBUG_TIME_BLOCK(msg)
SearchIterator searchIterNext(const SearchIterator &pos)
A Searchable object interface based on iterative searching.
virtual ~KLFIteratorSearchable()
SearchIterator searchAdvanceIteratorSafe(const SearchIterator &it, int n=1)
virtual SearchIterator searchIterFind(const SearchIterator &startPos, const QString &queryString, bool forward)
Find occurence of a search string.
virtual SearchIterator searchIterStartFrom(bool forward)
SearchIterator searchCurrentIterPos() const