kabc
sortmode.cpp
00001 /* 00002 This file is part of libkabc. 00003 Copyright (c) 2004 Tobias Koenig <tokoe@kde.org> 00004 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Library General Public 00007 License as published by the Free Software Foundation; either 00008 version 2 of the License, or (at your option) any later version. 00009 00010 This library is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 Library General Public License for more details. 00014 00015 You should have received a copy of the GNU Library General Public License 00016 along with this library; see the file COPYING.LIB. If not, write to 00017 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 00018 Boston, MA 02110-1301, USA. 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 }