24 #ifndef KLF_ITERATORSEARCHABLE_H
25 #define KLF_ITERATORSEARCHABLE_H
30 #include <QApplication>
116 { Q_UNUSED(forward);
return searchIterEnd(); }
135 { Q_UNUSED(resultMatchPosition); Q_UNUSED(found); Q_UNUSED(queryString); }
140 virtual void searchMoveToIterPos(
const SearchIterator& pos)
147 virtual void searchPerformed(
const SearchIterator& resultMatchPosition)
148 { Q_UNUSED(resultMatchPosition); }
171 return posForIterator(searchIterStartFrom(forward));
184 searchMoveToIterPos(iteratorForPos(pos));
204 Q_UNUSED(queryString) ;
205 klfDbg(
" s="<<queryString<<
" from "<<startPos<<
" forward="<<forward
218 virtual SearchIterator searchIterFindNext(
bool forward)
223 klfDbg(
"empty search query string.") ;
224 return tee_notify_search_result(searchIterEnd());
231 klfDbg(
"advancing iterator in search... pCurPos="<<pCurPos) ;
234 pCurPos = safe_cycl_advance_iterator(pCurPos, forward);
239 if (pCurPos == searchIterEnd())
251 qApp->processEvents();
253 klfDbg(
"interrupting...") ;
261 return tee_notify_search_result(pCurPos);
265 return tee_notify_search_result(searchIterEnd());
271 virtual Pos
searchFind(
const QString& queryString,
const Pos& fromPos,
bool forward)
275 SearchIterator startit = iteratorForPos(fromPos);
276 SearchIterator matchit = searchIterFind(startit, queryString, forward);
277 return posForIterator(matchit);
292 SearchIterator searchAdvanceIteratorSafe(
const SearchIterator& it,
int n = 1)
296 bool forward = (n>0);
300 SearchIterator a = it;
302 a = safe_cycl_advance_iterator(a, forward);
312 bool forward = (n >= 0);
317 it2 = safe_cycl_advance_iterator(it2, forward);
318 if (it2 == searchIterEnd() && skipEnd)
319 it2 = safe_cycl_advance_iterator(it2, forward);
326 inline SearchIterator searchCurrentIterPos()
const {
return pCurPos; }
334 IterPosData(Iter iterator) : it(iterator) { }
340 IterPosData * itpd = dynamic_cast<IterPosData*>(other);
342 return (it == itpd->it) ;
350 return searchIterEnd();
351 IterPosData *itpd = p.
data<IterPosData>();
359 if (it == searchIterEnd())
361 p.posdata =
new IterPosData(it);
365 inline SearchIterator tee_notify_search_result(
const SearchIterator& iter)
371 inline SearchIterator safe_cycl_advance_iterator(
const SearchIterator& it,
bool forward)
374 if (it == searchIterEnd())
375 return searchIterBegin();
376 return searchIterNext(it);
378 if (it == searchIterBegin())
379 return searchIterEnd();
380 return searchIterPrev(it);