1/*
2 This file is part of the kcalcore library.
3
4 Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
5 Contact: Alvaro Manera <alvaro.manera@nokia.com>
6
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version.
11
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details.
16
17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 Boston, MA 02110-1301, USA.
21*/
22#include "sorting.h"
23#include "event.h"
24#include "journal.h"
25#include "todo.h"
26
27#include <KDateTime>
28
29// PENDING(kdab) Review
30// The QString::compare() need to be replace by a DUI string comparisons.
31// See http://qt.gitorious.org/maemo-6-ui-framework/libdui
32// If not compiled in "meego-mode" should we be using locale compares?
33
34using namespace KCalCore;
35
36bool KCalCore::Events::startDateLessThan(const Event::Ptr &e1, const Event::Ptr &e2)
37{
38 const KDateTime d1= e1->dtStart();
39 KDateTime::Comparison res = d1.compare(e2->dtStart());
40 if (res == KDateTime::Equal) {
41 return Events::summaryLessThan(e1, e2);
42 } else {
43 return (res & KDateTime::Before || res & KDateTime::AtStart);
44 }
45}
46
47bool KCalCore::Events::startDateMoreThan(const Event::Ptr &e1, const Event::Ptr &e2)
48{
49 const KDateTime d1= e1->dtStart();
50 KDateTime::Comparison res = d1.compare(e2->dtStart());
51 if (res == KDateTime::Equal) {
52 return Events::summaryMoreThan(e1, e2);
53 } else {
54 return (res & KDateTime::After || res & KDateTime::AtEnd);
55 }
56}
57
58bool KCalCore::Events::summaryLessThan(const Event::Ptr &e1, const Event::Ptr &e2)
59{
60 return QString::compare(e1->summary(), e2->summary(), Qt::CaseInsensitive) < 0;
61}
62
63bool KCalCore::Events::summaryMoreThan(const Event::Ptr &e1, const Event::Ptr &e2)
64{
65 return QString::compare(e1->summary(), e2->summary(), Qt::CaseInsensitive) > 0;
66}
67
68bool KCalCore::Events::endDateLessThan(const Event::Ptr &e1, const Event::Ptr &e2)
69{
70 const KDateTime d1= e1->dtEnd();
71 KDateTime::Comparison res = d1.compare(e2->dtEnd());
72 if (res == KDateTime::Equal) {
73 return Events::summaryLessThan(e1, e2);
74 } else {
75 return (res & KDateTime::Before || res & KDateTime::AtStart);
76 }
77}
78
79bool KCalCore::Events::endDateMoreThan(const Event::Ptr &e1, const Event::Ptr &e2)
80{
81 const KDateTime d1= e1->dtEnd();
82 KDateTime::Comparison res = d1.compare(e2->dtEnd());
83 if (res == KDateTime::Equal) {
84 return Events::summaryMoreThan(e1, e2);
85 } else {
86 return (res & KDateTime::After || res & KDateTime::AtEnd);
87 }
88}
89
90bool KCalCore::Journals::dateLessThan(const Journal::Ptr &j1, const Journal::Ptr &j2)
91{
92 const KDateTime d1 = j1->dtStart();
93 KDateTime::Comparison res = d1.compare(j2->dtStart());
94 return (res & KDateTime::Before || res & KDateTime::AtStart);
95}
96
97bool KCalCore::Journals::dateMoreThan(const Journal::Ptr &j1, const Journal::Ptr &j2)
98{
99 const KDateTime d1= j1->dtStart();
100 KDateTime::Comparison res = d1.compare(j2->dtStart());
101 return (res & KDateTime::After || res & KDateTime::AtEnd);
102}
103
104bool KCalCore::Journals::summaryLessThan(const Journal::Ptr &j1, const Journal::Ptr &j2)
105{
106
107 return QString::compare(j1->summary(), j2->summary(), Qt::CaseInsensitive) < 0;
108}
109
110bool KCalCore::Journals::summaryMoreThan(const Journal::Ptr &j1, const Journal::Ptr &j2)
111{
112 return QString::compare(j1->summary(), j2->summary(), Qt::CaseInsensitive) > 0;
113}
114
115bool KCalCore::Todos::startDateLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2)
116{
117 const KDateTime d1= t1->dtStart();
118 KDateTime::Comparison res = d1.compare(t2->dtStart());
119 if (res == KDateTime::Equal) {
120 return Todos::summaryLessThan(t1, t2);
121 } else {
122 return (res & KDateTime::Before || res & KDateTime::AtStart);
123 }
124}
125
126bool KCalCore::Todos::startDateMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2)
127{
128 const KDateTime d1= t1->dtStart();
129 KDateTime::Comparison res = d1.compare(t2->dtStart());
130 if (res == KDateTime::Equal) {
131 return Todos::summaryMoreThan(t1, t2);
132 } else {
133 return (res & KDateTime::After || res & KDateTime::AtEnd);
134 }
135}
136
137bool KCalCore::Todos::dueDateLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2)
138{
139 const KDateTime d1= t1->dtDue();
140 KDateTime::Comparison res = d1.compare(t2->dtDue());
141 if (res == KDateTime::Equal) {
142 return Todos::summaryLessThan(t1, t2);
143 } else {
144 return (res & KDateTime::Before || res & KDateTime::AtStart);
145 }
146}
147
148bool KCalCore::Todos::dueDateMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2)
149{
150 const KDateTime d1= t1->dtDue();
151 KDateTime::Comparison res = d1.compare(t2->dtDue());
152 if (res == KDateTime::Equal) {
153 return Todos::summaryMoreThan(t1, t2);
154 } else {
155 return (res & KDateTime::After || res & KDateTime::AtEnd);
156 }
157}
158
159bool KCalCore::Todos::priorityLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2)
160{
161 if (t1->priority() < t2->priority()) {
162 return true;
163 } else if (t1->priority() == t2->priority()) {
164 return Todos::summaryLessThan(t1, t2);
165 } else {
166 return false;
167 }
168}
169
170bool KCalCore::Todos::priorityMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2)
171{
172 if (t1->priority() > t2->priority()) {
173 return true;
174 } else if (t1->priority() == t2->priority()) {
175 return Todos::summaryMoreThan(t1, t2);
176 } else {
177 return false;
178 }
179}
180
181bool KCalCore::Todos::percentLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2)
182{
183 if (t1->percentComplete() < t2->percentComplete()) {
184 return true;
185 } else if (t1->percentComplete() == t2->percentComplete()) {
186 return Todos::summaryLessThan(t1, t2);
187 } else {
188 return false;
189 }
190}
191
192bool KCalCore::Todos::percentMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2)
193{
194 if (t1->percentComplete() > t2->percentComplete()) {
195 return true;
196 } else if (t1->percentComplete() == t2->percentComplete()) {
197 return Todos::summaryMoreThan(t1, t2);
198 } else {
199 return false;
200 }
201}
202
203bool KCalCore::Todos::summaryLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2)
204{
205 return QString::compare(t1->summary(), t2->summary(), Qt::CaseInsensitive) < 0;
206}
207
208bool KCalCore::Todos::summaryMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2)
209{
210 return QString::compare(t1->summary(), t2->summary(), Qt::CaseInsensitive) > 0;
211}
212
213bool KCalCore::Todos::createdLessThan(const Todo::Ptr &t1, const Todo::Ptr &t2)
214{
215 const KDateTime d1= t1->created();
216 KDateTime::Comparison res = d1.compare(t2->created());
217 if (res == KDateTime::Equal) {
218 return Todos::summaryLessThan(t1, t2);
219 } else {
220 return (res & KDateTime::Before || res & KDateTime::AtStart);
221 }
222}
223
224bool KCalCore::Todos::createdMoreThan(const Todo::Ptr &t1, const Todo::Ptr &t2)
225{
226 const KDateTime d1= t1->created();
227 KDateTime::Comparison res = d1.compare(t2->created());
228 if (res == KDateTime::Equal) {
229 return Todos::summaryMoreThan(t1, t2);
230 } else {
231 return (res & KDateTime::After || res & KDateTime::AtEnd);
232 }
233}
234
235bool KCalCore::Incidences::dateLessThan(const Incidence::Ptr &i1,
236 const Incidence::Ptr &i2)
237{
238 const KDateTime d1 = i1->dateTime(Incidence::RoleSort);
239 const KDateTime d2 = i2->dateTime(Incidence::RoleSort);
240
241 KDateTime::Comparison res = d1.compare(d2);
242 if (res == KDateTime::Equal) {
243 return Incidences::summaryLessThan(i1, i2);
244 } else {
245 return (res & KDateTime::Before || res & KDateTime::AtStart);
246 }
247}
248
249bool KCalCore::Incidences::dateMoreThan(const Incidence::Ptr &i1,
250 const Incidence::Ptr &i2)
251{
252 const KDateTime d1 = i1->dateTime(Incidence::RoleSort);
253 const KDateTime d2 = i2->dateTime(Incidence::RoleSort);
254
255 KDateTime::Comparison res = d1.compare(d2);
256 if (res == KDateTime::Equal) {
257 return Incidences::summaryMoreThan(i1, i2);
258 } else {
259 return (res & KDateTime::After || res & KDateTime::AtEnd);
260 }
261}
262
263bool KCalCore::Incidences::createdLessThan(const Incidence::Ptr &i1,
264 const Incidence::Ptr &i2)
265{
266 const KDateTime d1= i1->created();
267 KDateTime::Comparison res = d1.compare(i2->created());
268 if (res == KDateTime::Equal) {
269 return Incidences::summaryLessThan(i1, i2);
270 } else {
271 return (res & KDateTime::Before || res & KDateTime::AtStart);
272 }
273}
274
275bool KCalCore::Incidences::createdMoreThan(const Incidence::Ptr &i1,
276 const Incidence::Ptr &i2)
277{
278 const KDateTime d1= i1->created();
279 KDateTime::Comparison res = d1.compare(i2->created());
280 if (res == KDateTime::Equal) {
281 return Incidences::summaryMoreThan(i1, i2);
282 } else {
283 return (res & KDateTime::After || res & KDateTime::AtEnd);
284 }
285}
286
287bool KCalCore::Incidences::summaryLessThan(const Incidence::Ptr &i1,
288 const Incidence::Ptr &i2)
289{
290 return QString::compare(i1->summary(), i2->summary(), Qt::CaseInsensitive) < 0;
291}
292
293bool KCalCore::Incidences::summaryMoreThan(const Incidence::Ptr &i1,
294 const Incidence::Ptr &i2)
295{
296 return QString::compare(i1->summary(), i2->summary(), Qt::CaseInsensitive) > 0;
297}
298
299bool KCalCore::Persons::countMoreThan(const Person::Ptr &p1, const Person::Ptr &p2)
300{
301 return p1->count() > p2->count();
302}
303