24 #ifndef KLF_ITERATORSEARCHABLE_H 25 #define KLF_ITERATORSEARCHABLE_H 30 #include <QApplication> 91 virtual SearchIterator searchIterBegin() = 0;
96 virtual SearchIterator searchIterEnd() = 0;
100 virtual SearchIterator searchIterAdvance(
const SearchIterator& pos,
bool forward) = 0;
103 inline SearchIterator
searchIterNext(
const SearchIterator& pos) {
return searchIterAdvance(pos,
true); }
106 inline SearchIterator
searchIterPrev(
const SearchIterator& pos) {
return searchIterAdvance(pos,
false); }
116 { Q_UNUSED(forward);
return searchIterEnd(); }
123 virtual bool searchIterMatches(
const SearchIterator& pos,
const QString& queryString) = 0;
135 { Q_UNUSED(resultMatchPosition); Q_UNUSED(found); Q_UNUSED(queryString); }
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
208 SearchIterator it = searchIterFindNext(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);
236 klfDbg(
"advanced. pCurPos="<<pCurPos) ;
239 if (pCurPos == searchIterEnd())
251 qApp->processEvents();
253 klfDbg(
"interrupting...") ;
261 return tee_notify_search_result(pCurPos);
265 return tee_notify_search_result(searchIterEnd());
275 SearchIterator startit = iteratorForPos(fromPos);
276 SearchIterator matchit = searchIterFind(startit, queryString, forward);
277 return posForIterator(matchit);
296 bool forward = (n>0);
300 SearchIterator a = it;
302 a = safe_cycl_advance_iterator(a, forward);
312 bool forward = (n >= 0);
315 SearchIterator it2 = it;
317 it2 = safe_cycl_advance_iterator(it2, forward);
318 if (it2 == searchIterEnd() && skipEnd)
319 it2 = safe_cycl_advance_iterator(it2, forward);
330 SearchIterator 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)
367 searchPerformed(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);
virtual ~KLFIteratorSearchable()
virtual SearchIterator searchIterFind(const SearchIterator &startPos, const QString &queryString, bool forward)
Find occurence of a search string.
An object that can be searched with a KLFSearchBar.
virtual void setSearchInterruptRequested(bool on)
virtual Pos searchStartFrom(bool forward)
Base declarations for klatexformula and some utilities.
virtual QString searchQueryString() const
The current query string.
virtual void searchPerformed(const SearchIterator &resultMatchPosition, bool found, const QString &queryString)
A Searchable object interface based on iterative searching.
#define klfDbg(streamableItems)
print debug stream items
SearchIterator searchCurrentIterPos() const
#define KLF_DEBUG_BLOCK(msg)
Utility to debug the execution of a block.
#define KLF_ASSERT_NOT_NULL(ptr, msg, failaction)
Asserting Non-NULL pointers (NON-FATAL)
virtual void searchMoveToIterPos(const SearchIterator &pos)
SearchIterator searchIterNext(const SearchIterator &pos)
SearchIterator searchAdvanceIteratorSafe(const SearchIterator &it, int n=1)
virtual void searchPerformed(const SearchIterator &resultMatchPosition)
virtual void searchPerformed(const QString &queryString, bool found, const Pos &pos)
virtual SearchIterator searchIterFindNext(bool forward)
Find the next occurence of previous search string.
virtual SearchIterator searchIterStartFrom(bool forward)
SearchIterator searchIterPrev(const SearchIterator &pos)
virtual bool searchHasInterruptRequested()
#define KLF_DEBUG_TIME_BLOCK(msg)
Utility to time the execution of a block.
virtual Pos searchFind(const QString &queryString, const Pos &fromPos, bool forward)
KLFRefPtr< PosData > posdata
Stores the actual position data, see PosData.
An abstract position in a searchable object.
SearchIterator searchAdvanceIteratorCycle(const SearchIterator &it, int n=1, bool skipEnd=false)
virtual void searchPerformed(const QString &queryString, bool found, const Pos &pos)
TT * data() const
A shorthand for retrieving the posdata cast into the custom type.
A Base class for storing abstract position data.
virtual void searchMoveToPos(const Pos &pos)
virtual void searchAborted()