author | zecke <zecke> | 2004-02-18 23:19:17 (UTC) |
---|---|---|
committer | zecke <zecke> | 2004-02-18 23:19:17 (UTC) |
commit | 28b63b3270b8162fcea4449b53b75fa325d740ad (patch) (unidiff) | |
tree | eed2c5064cd05c080ac6e9da38996857cd9008b7 | |
parent | f8caabcef314cad5007fec940af48d8cd4612c49 (diff) | |
download | opie-28b63b3270b8162fcea4449b53b75fa325d740ad.zip opie-28b63b3270b8162fcea4449b53b75fa325d740ad.tar.gz opie-28b63b3270b8162fcea4449b53b75fa325d740ad.tar.bz2 |
Add Documentation on how we search and why we do stuff
-rw-r--r-- | core/pim/datebook/datebook.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/core/pim/datebook/datebook.cpp b/core/pim/datebook/datebook.cpp index 832b2f8..24affd0 100644 --- a/core/pim/datebook/datebook.cpp +++ b/core/pim/datebook/datebook.cpp | |||
@@ -976,74 +976,86 @@ bool catComp( QArray<int> cats, int category ) | |||
976 | } | 976 | } |
977 | } | 977 | } |
978 | return returnMe; | 978 | return returnMe; |
979 | } | 979 | } |
980 | 980 | ||
981 | 981 | ||
982 | void DateBook::slotDoFind( const QString& txt, const QDate &dt, | 982 | void DateBook::slotDoFind( const QString& txt, const QDate &dt, |
983 | bool caseSensitive, bool /*backwards*/, | 983 | bool caseSensitive, bool /*backwards*/, |
984 | int category ) | 984 | int category ) |
985 | { | 985 | { |
986 | QDateTime dtEnd( QDate(3001, 1, 1), QTime(0, 0, 0) ), | 986 | QDateTime dtEnd( QDate(3001, 1, 1), QTime(0, 0, 0) ), |
987 | next; | 987 | next; |
988 | 988 | ||
989 | QRegExp r( txt ); | 989 | QRegExp r( txt ); |
990 | r.setCaseSensitive( caseSensitive ); | 990 | r.setCaseSensitive( caseSensitive ); |
991 | 991 | ||
992 | 992 | ||
993 | static Event rev, nonrev; | 993 | static Event rev, nonrev; |
994 | if ( !inSearch ) { | 994 | if ( !inSearch ) { |
995 | rev.setStart( QDateTime(QDate(1960, 1, 1), QTime(0, 0, 0)) ); | 995 | rev.setStart( QDateTime(QDate(1960, 1, 1), QTime(0, 0, 0)) ); |
996 | nonrev.setStart( rev.start() ); | 996 | nonrev.setStart( rev.start() ); |
997 | inSearch = true; | 997 | inSearch = true; |
998 | } | 998 | } |
999 | static QDate searchDate = dt; | 999 | static QDate searchDate = dt; |
1000 | // if true at the end we will start at the begin again and afterwards | ||
1001 | // we will emit string not found | ||
1000 | static bool wrapAround = true; | 1002 | static bool wrapAround = true; |
1001 | bool candidtate; | 1003 | bool candidtate; |
1002 | candidtate = false; | 1004 | candidtate = false; |
1003 | 1005 | ||
1004 | QValueList<Event> repeats = db->getRawRepeats(); | 1006 | QValueList<Event> repeats = db->getRawRepeats(); |
1005 | 1007 | ||
1006 | // find the candidate for the first repeat that matches... | 1008 | // find the candidate for the first repeat that matches... |
1009 | // first check if there can ever be a match and then compute | ||
1010 | // the next occurence from start. See if this event is closer | ||
1011 | // to the beginning (start. next < dtEnd) and not smaller then the last | ||
1012 | // result. If we find a canditate we set the dtEnd to the time | ||
1013 | // of the ocurrence and rev to this occurence. | ||
1014 | // set wrap around to true because there might be more events coming | ||
1015 | // and we're not at the end. | ||
1007 | QValueListConstIterator<Event> it; | 1016 | QValueListConstIterator<Event> it; |
1008 | QDate start = dt; | 1017 | QDate start = dt; |
1009 | for ( it = repeats.begin(); it != repeats.end(); ++it ) { | 1018 | for ( it = repeats.begin(); it != repeats.end(); ++it ) { |
1010 | if ( catComp( (*it).categories(), category ) ) { | 1019 | if ( catComp( (*it).categories(), category ) ) { |
1011 | if ( (*it).match( r ) ) { | 1020 | if ( (*it).match( r ) ) { |
1012 | if ( nextOccurance( *it, start, next ) ) { | 1021 | if ( nextOccurance( *it, start, next ) ) { |
1013 | if ( next < dtEnd && !(next <= rev.start() ) ) { | 1022 | if ( next < dtEnd && !(next <= rev.start() ) ) { |
1014 | rev = *it; | 1023 | rev = *it; |
1015 | dtEnd = next; | 1024 | dtEnd = next; |
1016 | rev.setStart( next ); | 1025 | rev.setStart( next ); |
1017 | candidtate = true; | 1026 | candidtate = true; |
1018 | wrapAround = true; | 1027 | wrapAround = true; |
1019 | } | 1028 | } |
1020 | } | 1029 | } |
1021 | } | 1030 | } |
1022 | } | 1031 | } |
1023 | } | 1032 | } |
1024 | 1033 | ||
1025 | // now the for first non repeat... | 1034 | // now the for first non repeat... |
1035 | // dtEnd is set by the previous iteration of repeatingEvents | ||
1036 | // check if we find a closer item. Also set dtEnd to find even | ||
1037 | // more close occurrence | ||
1026 | QValueList<Event> nonRepeats = db->getNonRepeatingEvents( dt, dtEnd.date() ); | 1038 | QValueList<Event> nonRepeats = db->getNonRepeatingEvents( dt, dtEnd.date() ); |
1027 | qHeapSort( nonRepeats.begin(), nonRepeats.end() ); | 1039 | qHeapSort( nonRepeats.begin(), nonRepeats.end() ); |
1028 | for ( it = nonRepeats.begin(); it != nonRepeats.end(); ++it ) { | 1040 | for ( it = nonRepeats.begin(); it != nonRepeats.end(); ++it ) { |
1029 | if ( catComp( (*it).categories(), category ) ) { | 1041 | if ( catComp( (*it).categories(), category ) ) { |
1030 | if ( (*it).start() < dtEnd ) { | 1042 | if ( (*it).start() < dtEnd ) { |
1031 | if ( (*it).match( r ) && !(*it <= nonrev) ) { | 1043 | if ( (*it).match( r ) && !(*it <= nonrev) ) { |
1032 | nonrev = *it; | 1044 | nonrev = *it; |
1033 | dtEnd = nonrev.start(); | 1045 | dtEnd = nonrev.start(); |
1034 | candidtate = true; | 1046 | candidtate = true; |
1035 | wrapAround = true; | 1047 | wrapAround = true; |
1036 | break; | 1048 | break; |
1037 | } | 1049 | } |
1038 | } | 1050 | } |
1039 | } | 1051 | } |
1040 | } | 1052 | } |
1041 | if ( candidtate ) { | 1053 | if ( candidtate ) { |
1042 | dayView->setStartViewTime( dtEnd.time().hour() ); | 1054 | dayView->setStartViewTime( dtEnd.time().hour() ); |
1043 | dayView->setDate( dtEnd.date().year(), dtEnd.date().month(), | 1055 | dayView->setDate( dtEnd.date().year(), dtEnd.date().month(), |
1044 | dtEnd.date().day() ); | 1056 | dtEnd.date().day() ); |
1045 | } else { | 1057 | } else { |
1046 | if ( wrapAround ) { | 1058 | if ( wrapAround ) { |
1047 | emit signalWrapAround(); | 1059 | emit signalWrapAround(); |
1048 | rev.setStart( QDateTime(QDate(1960, 1, 1), QTime(0, 0, 0)) ); | 1060 | rev.setStart( QDateTime(QDate(1960, 1, 1), QTime(0, 0, 0)) ); |
1049 | nonrev.setStart( rev.start() ); | 1061 | nonrev.setStart( rev.start() ); |