summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/private/opimcontactsortvector.cpp14
-rw-r--r--libopie2/opiepim/private/opimsortvector.h24
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
@@ -66,2 +66,5 @@ int OPimContactSortVector::compareItems( const OPimContact& left,
break;
+ case OPimContactAccess::SortLastName:
+ ret = testString( left.lastName(), right.lastName() );
+ break;
case OPimContactAccess::SortSuffix:
@@ -95,2 +98,13 @@ int OPimContactSortVector::compareItems( const OPimContact& left,
break;
+ case OPimContactAccess::SortBirthdayWithoutYear:
+ // This doesn't actually just sort by the date without year,
+ // it actually works out the days until the next occurrence,
+ // which is more useful since it will work correctly when
+ // crossing year boundaries. - Paul Eggleton Dec 2006
+ ret = testDaysUntilNextDate( left.birthday(), right.birthday() );
+ break;
+ case OPimContactAccess::SortAnniversaryWithoutYear:
+ // (as above)
+ ret = testDaysUntilNextDate( left.anniversary(), right.anniversary() );
+ break;
}
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
@@ -58,2 +58,4 @@ protected:
const QDateTime& right )const;
+ int testDaysUntilNextDate( const QDate& left,
+ const QDate& right )const;
protected:
@@ -168,2 +170,24 @@ inline int OPimSortVector<T>::testDateTime( const QDateTime& left,
+template<class T>
+inline int OPimSortVector<T>::testDaysUntilNextDate( const QDate& left,
+ const QDate& right )const {
+ int ret = 0;
+ if ( !left .isValid() ) ret++;
+ if ( !right.isValid() ) ret--;
+
+ if ( left.isValid() && right.isValid() ){
+ int currentYear = QDate::currentDate().year();
+ QDate nextLeft( currentYear, left.month(), left.day() );
+ if ( QDate::currentDate().daysTo(nextLeft) < 0 )
+ nextLeft.setYMD( currentYear+1, left.month(), left.day() );
+ QDate nextRight( currentYear, right.month(), right.day() );
+ if ( QDate::currentDate().daysTo(nextRight) < 0 )
+ nextRight.setYMD( currentYear+1, right.month(), right.day() );
+
+ ret += QDate::currentDate().daysTo(nextLeft) < QDate::currentDate().daysTo(nextRight) ? -1 : 1;
+ }
+
+ return ret;
+}
+
}