1 | /* |
2 | This file is part of libkabc. |
3 | Copyright (c) 2004 Tobias Koenig <tokoe@kde.org> |
4 | |
5 | This library is free software; you can redistribute it and/or |
6 | modify it under the terms of the GNU Library General Public |
7 | License as published by the Free Software Foundation; either |
8 | version 2 of the License, or (at your option) any later version. |
9 | |
10 | This library is distributed in the hope that it will be useful, |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
13 | Library General Public License for more details. |
14 | |
15 | You should have received a copy of the GNU Library General Public License |
16 | along with this library; see the file COPYING.LIB. If not, write to |
17 | the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
18 | Boston, MA 02110-1301, USA. |
19 | */ |
20 | |
21 | #include "sortmode.h" |
22 | #include "field.h" |
23 | |
24 | using namespace KABC; |
25 | |
26 | SortMode::~SortMode() |
27 | { |
28 | } |
29 | |
30 | class NameSortMode::Private |
31 | { |
32 | public: |
33 | NameType mNameType; |
34 | bool mAscendingOrder; |
35 | }; |
36 | |
37 | NameSortMode::NameSortMode() |
38 | : d( new Private ) |
39 | { |
40 | d->mNameType = FormattedName; |
41 | d->mAscendingOrder = true; |
42 | } |
43 | |
44 | NameSortMode::NameSortMode( NameType type, bool ascending ) |
45 | : d( new Private ) |
46 | { |
47 | d->mNameType = type; |
48 | d->mAscendingOrder = ascending; |
49 | } |
50 | |
51 | NameSortMode::~NameSortMode() |
52 | { |
53 | delete d; |
54 | } |
55 | |
56 | bool NameSortMode::lesser( const KABC::Addressee &first, const KABC::Addressee &second ) const |
57 | { |
58 | bool lesser = false; |
59 | |
60 | switch ( d->mNameType ) { |
61 | case FormattedName: |
62 | lesser = QString::localeAwareCompare( first.formattedName(), second.formattedName() ) < 0; |
63 | break; |
64 | case FamilyName: |
65 | lesser = QString::localeAwareCompare( first.familyName(), second.familyName() ) < 0; |
66 | break; |
67 | case GivenName: |
68 | lesser = QString::localeAwareCompare( first.givenName(), second.givenName() ) < 0; |
69 | break; |
70 | default: |
71 | lesser = false; |
72 | break; |
73 | } |
74 | |
75 | if ( !d->mAscendingOrder ) { |
76 | lesser = !lesser; |
77 | } |
78 | |
79 | return lesser; |
80 | } |
81 | |
82 | class FieldSortMode::Private |
83 | { |
84 | public: |
85 | KABC::Field *mField; |
86 | bool mAscendingOrder; |
87 | }; |
88 | |
89 | FieldSortMode::FieldSortMode( KABC::Field *field, bool ascending ) |
90 | : d( new Private ) |
91 | { |
92 | d->mField = field; |
93 | d->mAscendingOrder = ascending; |
94 | } |
95 | |
96 | FieldSortMode::~FieldSortMode() |
97 | { |
98 | delete d; |
99 | } |
100 | |
101 | bool FieldSortMode::lesser( const KABC::Addressee &first, const KABC::Addressee &second ) const |
102 | { |
103 | if ( !d->mField ) { |
104 | return false; |
105 | } else { |
106 | bool lesser = |
107 | QString::localeAwareCompare( d->mField->value( first ), d->mField->value( second ) ) < 0; |
108 | if ( !d->mAscendingOrder ) { |
109 | lesser = !lesser; |
110 | } |
111 | |
112 | return lesser; |
113 | } |
114 | } |
115 | |