author | paule <paule> | 2007-01-13 09:00:15 (UTC) |
---|---|---|
committer | paule <paule> | 2007-01-13 09:00:15 (UTC) |
commit | 5c03ec2b2d0d6b10f7581b8b447cbcb1935e7e67 (patch) (unidiff) | |
tree | 0ae38a54d489376ce3ac7df2441046075fb8cf14 /libopie2 | |
parent | a1360b0af73518d97ebe63ad3cd156cd8b57c8b5 (diff) | |
download | opie-5c03ec2b2d0d6b10f7581b8b447cbcb1935e7e67.zip opie-5c03ec2b2d0d6b10f7581b8b447cbcb1935e7e67.tar.gz opie-5c03ec2b2d0d6b10f7581b8b447cbcb1935e7e67.tar.bz2 |
Implement default sort functions for contact last name and birthday/anniversary. The latter is required for sorting birthdays/anniversaries correctly on the today screen.
Fixes bug #1760.
-rw-r--r-- | libopie2/opiepim/private/opimcontactsortvector.cpp | 14 | ||||
-rw-r--r-- | libopie2/opiepim/private/opimsortvector.h | 24 |
2 files changed, 38 insertions, 0 deletions
diff --git a/libopie2/opiepim/private/opimcontactsortvector.cpp b/libopie2/opiepim/private/opimcontactsortvector.cpp index 8c7d5ca..c8de4d1 100644 --- a/libopie2/opiepim/private/opimcontactsortvector.cpp +++ b/libopie2/opiepim/private/opimcontactsortvector.cpp | |||
@@ -64,6 +64,9 @@ int OPimContactSortVector::compareItems( const OPimContact& left, | |||
64 | ret = testString( left.middleName(), right.middleName() ); | 64 | ret = testString( left.middleName(), right.middleName() ); |
65 | soMiddleName = true; | 65 | soMiddleName = true; |
66 | break; | 66 | break; |
67 | case OPimContactAccess::SortLastName: | ||
68 | ret = testString( left.lastName(), right.lastName() ); | ||
69 | break; | ||
67 | case OPimContactAccess::SortSuffix: | 70 | case OPimContactAccess::SortSuffix: |
68 | ret = testString( left.suffix(), right.suffix() ); | 71 | ret = testString( left.suffix(), right.suffix() ); |
69 | soSuffix = true; | 72 | soSuffix = true; |
@@ -93,6 +96,17 @@ int OPimContactSortVector::compareItems( const OPimContact& left, | |||
93 | ret = testString( left.gender(), right.gender() ); | 96 | ret = testString( left.gender(), right.gender() ); |
94 | soGender = true; | 97 | soGender = true; |
95 | break; | 98 | break; |
99 | case OPimContactAccess::SortBirthdayWithoutYear: | ||
100 | // This doesn't actually just sort by the date without year, | ||
101 | // it actually works out the days until the next occurrence, | ||
102 | // which is more useful since it will work correctly when | ||
103 | // crossing year boundaries. - Paul Eggleton Dec 2006 | ||
104 | ret = testDaysUntilNextDate( left.birthday(), right.birthday() ); | ||
105 | break; | ||
106 | case OPimContactAccess::SortAnniversaryWithoutYear: | ||
107 | // (as above) | ||
108 | ret = testDaysUntilNextDate( left.anniversary(), right.anniversary() ); | ||
109 | break; | ||
96 | } | 110 | } |
97 | 111 | ||
98 | /* twist to honor ascending/descending setting as QVector only sorts ascending*/ | 112 | /* twist to honor ascending/descending setting as QVector only sorts ascending*/ |
diff --git a/libopie2/opiepim/private/opimsortvector.h b/libopie2/opiepim/private/opimsortvector.h index 11a40ac..9684ca1 100644 --- a/libopie2/opiepim/private/opimsortvector.h +++ b/libopie2/opiepim/private/opimsortvector.h | |||
@@ -56,6 +56,8 @@ protected: | |||
56 | int testTime( const QTime&, const QTime& )const; | 56 | int testTime( const QTime&, const QTime& )const; |
57 | int testDateTime( const QDateTime& left, | 57 | int testDateTime( const QDateTime& left, |
58 | const QDateTime& right )const; | 58 | const QDateTime& right )const; |
59 | int testDaysUntilNextDate( const QDate& left, | ||
60 | const QDate& right )const; | ||
59 | protected: | 61 | protected: |
60 | bool sortAscending()const; | 62 | bool sortAscending()const; |
61 | int sortOrder()const; | 63 | int sortOrder()const; |
@@ -166,6 +168,28 @@ inline int OPimSortVector<T>::testDateTime( const QDateTime& left, | |||
166 | 168 | ||
167 | } | 169 | } |
168 | 170 | ||
171 | template<class T> | ||
172 | inline int OPimSortVector<T>::testDaysUntilNextDate( const QDate& left, | ||
173 | const QDate& right )const { | ||
174 | int ret = 0; | ||
175 | if ( !left .isValid() ) ret++; | ||
176 | if ( !right.isValid() ) ret--; | ||
177 | |||
178 | if ( left.isValid() && right.isValid() ){ | ||
179 | int currentYear = QDate::currentDate().year(); | ||
180 | QDate nextLeft( currentYear, left.month(), left.day() ); | ||
181 | if ( QDate::currentDate().daysTo(nextLeft) < 0 ) | ||
182 | nextLeft.setYMD( currentYear+1, left.month(), left.day() ); | ||
183 | QDate nextRight( currentYear, right.month(), right.day() ); | ||
184 | if ( QDate::currentDate().daysTo(nextRight) < 0 ) | ||
185 | nextRight.setYMD( currentYear+1, right.month(), right.day() ); | ||
186 | |||
187 | ret += QDate::currentDate().daysTo(nextLeft) < QDate::currentDate().daysTo(nextRight) ? -1 : 1; | ||
188 | } | ||
189 | |||
190 | return ret; | ||
191 | } | ||
192 | |||
169 | } | 193 | } |
170 | } | 194 | } |
171 | 195 | ||