00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "sortmode.h"
00022 #include "field.h"
00023
00024 using namespace KABC;
00025
00026 SortMode::~SortMode()
00027 {
00028 }
00029
00030 class NameSortMode::Private
00031 {
00032 public:
00033 NameType mNameType;
00034 bool mAscendingOrder;
00035 };
00036
00037 NameSortMode::NameSortMode()
00038 : d( new Private )
00039 {
00040 d->mNameType = FormattedName;
00041 d->mAscendingOrder = true;
00042 }
00043
00044 NameSortMode::NameSortMode( NameType type, bool ascending )
00045 : d( new Private )
00046 {
00047 d->mNameType = type;
00048 d->mAscendingOrder = ascending;
00049 }
00050
00051 NameSortMode::~NameSortMode()
00052 {
00053 delete d;
00054 }
00055
00056 bool NameSortMode::lesser( const KABC::Addressee &first, const KABC::Addressee &second ) const
00057 {
00058 bool lesser = false;
00059
00060 switch ( d->mNameType ) {
00061 case FormattedName:
00062 lesser = QString::localeAwareCompare( first.formattedName(), second.formattedName() ) < 0;
00063 break;
00064 case FamilyName:
00065 lesser = QString::localeAwareCompare( first.familyName(), second.familyName() ) < 0;
00066 break;
00067 case GivenName:
00068 lesser = QString::localeAwareCompare( first.givenName(), second.givenName() ) < 0;
00069 break;
00070 default:
00071 lesser = false;
00072 break;
00073 }
00074
00075 if ( !d->mAscendingOrder ) {
00076 lesser = !lesser;
00077 }
00078
00079 return lesser;
00080 }
00081
00082 class FieldSortMode::Private
00083 {
00084 public:
00085 KABC::Field *mField;
00086 bool mAscendingOrder;
00087 };
00088
00089 FieldSortMode::FieldSortMode( KABC::Field *field, bool ascending )
00090 : d( new Private )
00091 {
00092 d->mField = field;
00093 d->mAscendingOrder = ascending;
00094 }
00095
00096 FieldSortMode::~FieldSortMode()
00097 {
00098 delete d;
00099 }
00100
00101 bool FieldSortMode::lesser( const KABC::Addressee &first, const KABC::Addressee &second ) const
00102 {
00103 if ( !d->mField ) {
00104 return false;
00105 } else {
00106 bool lesser =
00107 QString::localeAwareCompare( d->mField->value( first ), d->mField->value( second ) ) < 0;
00108 if ( !d->mAscendingOrder ) {
00109 lesser = !lesser;
00110 }
00111
00112 return lesser;
00113 }
00114 }