summaryrefslogtreecommitdiff
authortille <tille>2003-05-14 15:24:00 (UTC)
committer tille <tille>2003-05-14 15:24:00 (UTC)
commitdbda71abdc7c13ac0acde21320ee00726d95dec4 (patch) (unidiff)
tree4049f593592b6d7e8a32d9837819c96c6592ae38
parent20509790738fae5e63a081183c8c3be3891a5bdb (diff)
downloadopie-dbda71abdc7c13ac0acde21320ee00726d95dec4.zip
opie-dbda71abdc7c13ac0acde21320ee00726d95dec4.tar.gz
opie-dbda71abdc7c13ac0acde21320ee00726d95dec4.tar.bz2
lastHitField impl
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/pim/oevent.cpp20
-rw-r--r--libopie/pim/otodo.cpp12
-rw-r--r--libopie2/opiepim/oevent.cpp20
-rw-r--r--libopie2/opiepim/otodo.cpp12
4 files changed, 46 insertions, 18 deletions
diff --git a/libopie/pim/oevent.cpp b/libopie/pim/oevent.cpp
index cda12f9..2b138c0 100644
--- a/libopie/pim/oevent.cpp
+++ b/libopie/pim/oevent.cpp
@@ -87,266 +87,276 @@ OEvent& OEvent::operator=( const OEvent& ev) {
87 87
88 OPimRecord::operator=( ev ); 88 OPimRecord::operator=( ev );
89 ev.data->ref(); 89 ev.data->ref();
90 deref(); 90 deref();
91 data = ev.data; 91 data = ev.data;
92 92
93 93
94 return *this; 94 return *this;
95} 95}
96QString OEvent::description()const { 96QString OEvent::description()const {
97 return data->description; 97 return data->description;
98} 98}
99void OEvent::setDescription( const QString& description ) { 99void OEvent::setDescription( const QString& description ) {
100 changeOrModify(); 100 changeOrModify();
101 data->description = description; 101 data->description = description;
102} 102}
103void OEvent::setLocation( const QString& loc ) { 103void OEvent::setLocation( const QString& loc ) {
104 changeOrModify(); 104 changeOrModify();
105 data->location = loc; 105 data->location = loc;
106} 106}
107QString OEvent::location()const { 107QString OEvent::location()const {
108 return data->location; 108 return data->location;
109} 109}
110OPimNotifyManager &OEvent::notifiers()const { 110OPimNotifyManager &OEvent::notifiers()const {
111 // I hope we can skip the changeOrModify here 111 // I hope we can skip the changeOrModify here
112 // the notifier should take care of it 112 // the notifier should take care of it
113 // and OPimNotify is shared too 113 // and OPimNotify is shared too
114 if (!data->manager ) 114 if (!data->manager )
115 data->manager = new OPimNotifyManager; 115 data->manager = new OPimNotifyManager;
116 116
117 return *data->manager; 117 return *data->manager;
118} 118}
119bool OEvent::hasNotifiers()const { 119bool OEvent::hasNotifiers()const {
120 if (!data->manager ) 120 if (!data->manager )
121 return false; 121 return false;
122 if (data->manager->reminders().isEmpty() && 122 if (data->manager->reminders().isEmpty() &&
123 data->manager->alarms().isEmpty() ) 123 data->manager->alarms().isEmpty() )
124 return false; 124 return false;
125 125
126 return true; 126 return true;
127} 127}
128ORecur OEvent::recurrence()const { 128ORecur OEvent::recurrence()const {
129 if (!data->recur) 129 if (!data->recur)
130 data->recur = new ORecur; 130 data->recur = new ORecur;
131 131
132 return *data->recur; 132 return *data->recur;
133} 133}
134void OEvent::setRecurrence( const ORecur& rec) { 134void OEvent::setRecurrence( const ORecur& rec) {
135 changeOrModify(); 135 changeOrModify();
136 if (data->recur ) 136 if (data->recur )
137 (*data->recur) = rec; 137 (*data->recur) = rec;
138 else 138 else
139 data->recur = new ORecur( rec ); 139 data->recur = new ORecur( rec );
140} 140}
141bool OEvent::hasRecurrence()const { 141bool OEvent::hasRecurrence()const {
142 if (!data->recur ) return false; 142 if (!data->recur ) return false;
143 return data->recur->doesRecur(); 143 return data->recur->doesRecur();
144} 144}
145QString OEvent::note()const { 145QString OEvent::note()const {
146 return data->note; 146 return data->note;
147} 147}
148void OEvent::setNote( const QString& note ) { 148void OEvent::setNote( const QString& note ) {
149 changeOrModify(); 149 changeOrModify();
150 data->note = note; 150 data->note = note;
151} 151}
152QDateTime OEvent::createdDateTime()const { 152QDateTime OEvent::createdDateTime()const {
153 return data->created; 153 return data->created;
154} 154}
155void OEvent::setCreatedDateTime( const QDateTime& time ) { 155void OEvent::setCreatedDateTime( const QDateTime& time ) {
156 changeOrModify(); 156 changeOrModify();
157 data->created = time; 157 data->created = time;
158} 158}
159QDateTime OEvent::startDateTime()const { 159QDateTime OEvent::startDateTime()const {
160 if ( data->isAllDay ) 160 if ( data->isAllDay )
161 return QDateTime( data->start.date(), QTime(0, 0, 0 ) ); 161 return QDateTime( data->start.date(), QTime(0, 0, 0 ) );
162 return data->start; 162 return data->start;
163} 163}
164QDateTime OEvent::startDateTimeInZone()const { 164QDateTime OEvent::startDateTimeInZone()const {
165 /* if no timezone, or all day event or if the current and this timeZone match... */ 165 /* if no timezone, or all day event or if the current and this timeZone match... */
166 if (data->timezone.isEmpty() || data->isAllDay || data->timezone == OTimeZone::current().timeZone() ) return startDateTime(); 166 if (data->timezone.isEmpty() || data->isAllDay || data->timezone == OTimeZone::current().timeZone() ) return startDateTime();
167 167
168 OTimeZone zone(data->timezone ); 168 OTimeZone zone(data->timezone );
169 return zone.toDateTime( data->start, OTimeZone::current() ); 169 return zone.toDateTime( data->start, OTimeZone::current() );
170} 170}
171void OEvent::setStartDateTime( const QDateTime& dt ) { 171void OEvent::setStartDateTime( const QDateTime& dt ) {
172 changeOrModify(); 172 changeOrModify();
173 data->start = dt; 173 data->start = dt;
174} 174}
175QDateTime OEvent::endDateTime()const { 175QDateTime OEvent::endDateTime()const {
176 /* 176 /*
177 * if all Day event the end time needs 177 * if all Day event the end time needs
178 * to be on the same day as the start 178 * to be on the same day as the start
179 */ 179 */
180 if ( data->isAllDay ) 180 if ( data->isAllDay )
181 return QDateTime( data->start.date(), QTime(23, 59, 59 ) ); 181 return QDateTime( data->start.date(), QTime(23, 59, 59 ) );
182 return data->end; 182 return data->end;
183} 183}
184QDateTime OEvent::endDateTimeInZone()const { 184QDateTime OEvent::endDateTimeInZone()const {
185 /* if no timezone, or all day event or if the current and this timeZone match... */ 185 /* if no timezone, or all day event or if the current and this timeZone match... */
186 if (data->timezone.isEmpty() || data->isAllDay || data->timezone == OTimeZone::current().timeZone() ) return endDateTime(); 186 if (data->timezone.isEmpty() || data->isAllDay || data->timezone == OTimeZone::current().timeZone() ) return endDateTime();
187 187
188 OTimeZone zone(data->timezone ); 188 OTimeZone zone(data->timezone );
189 return zone.toDateTime( data->end, OTimeZone::current() ); 189 return zone.toDateTime( data->end, OTimeZone::current() );
190} 190}
191void OEvent::setEndDateTime( const QDateTime& dt ) { 191void OEvent::setEndDateTime( const QDateTime& dt ) {
192 changeOrModify(); 192 changeOrModify();
193 data->end = dt; 193 data->end = dt;
194} 194}
195bool OEvent::isMultipleDay()const { 195bool OEvent::isMultipleDay()const {
196 return data->end.date().day() - data->start.date().day(); 196 return data->end.date().day() - data->start.date().day();
197} 197}
198bool OEvent::isAllDay()const { 198bool OEvent::isAllDay()const {
199 return data->isAllDay; 199 return data->isAllDay;
200} 200}
201void OEvent::setAllDay( bool allDay ) { 201void OEvent::setAllDay( bool allDay ) {
202 changeOrModify(); 202 changeOrModify();
203 data->isAllDay = allDay; 203 data->isAllDay = allDay;
204 if (allDay ) data->timezone = "UTC"; 204 if (allDay ) data->timezone = "UTC";
205} 205}
206void OEvent::setTimeZone( const QString& tz ) { 206void OEvent::setTimeZone( const QString& tz ) {
207 changeOrModify(); 207 changeOrModify();
208 data->timezone = tz; 208 data->timezone = tz;
209} 209}
210QString OEvent::timeZone()const { 210QString OEvent::timeZone()const {
211 if (data->isAllDay ) return QString::fromLatin1("UTC"); 211 if (data->isAllDay ) return QString::fromLatin1("UTC");
212 return data->timezone; 212 return data->timezone;
213} 213}
214bool OEvent::match( const QRegExp& re )const { 214bool OEvent::match( const QRegExp& re )const {
215 if ( re.match( data->description ) != -1 ) 215 if ( re.match( data->description ) != -1 ){
216 setLastHitField( DatebookDescription );
216 return true; 217 return true;
217 if ( re.match( data->note ) != -1 ) 218 }
219 if ( re.match( data->note ) != -1 ){
220 setLastHitField( Note );
218 return true; 221 return true;
219 if ( re.match( data->location ) != -1 ) 222 }
223 if ( re.match( data->location ) != -1 ){
224 setLastHitField( Location );
220 return true; 225 return true;
221 if ( re.match( data->start.toString() ) != -1 ) 226 }
227 if ( re.match( data->start.toString() ) != -1 ){
228 setLastHitField( StartDateTime );
222 return true; 229 return true;
223 if ( re.match( data->end.toString() ) != -1 ) 230 }
231 if ( re.match( data->end.toString() ) != -1 ){
232 setLastHitField( EndDateTime );
224 return true; 233 return true;
234 }
225 return false; 235 return false;
226} 236}
227QString OEvent::toRichText()const { 237QString OEvent::toRichText()const {
228 QString text; 238 QString text;
229 if ( !description().isEmpty() ) { 239 if ( !description().isEmpty() ) {
230 text += "<b>" + QObject::tr( "Description:") + "</b><br>"; 240 text += "<b>" + QObject::tr( "Description:") + "</b><br>";
231 text += Qtopia::escapeString(description() ). 241 text += Qtopia::escapeString(description() ).
232 replace(QRegExp( "[\n]"), "<br>" ) + "<br>"; 242 replace(QRegExp( "[\n]"), "<br>" ) + "<br>";
233 } 243 }
234 if ( startDateTime().isValid() ) { 244 if ( startDateTime().isValid() ) {
235 text += "<b>" + QObject::tr( "Start:") + "</b> "; 245 text += "<b>" + QObject::tr( "Start:") + "</b> ";
236 text += Qtopia::escapeString(startDateTime().toString() ). 246 text += Qtopia::escapeString(startDateTime().toString() ).
237 replace(QRegExp( "[\n]"), "<br>" ) + "<br>"; 247 replace(QRegExp( "[\n]"), "<br>" ) + "<br>";
238 } 248 }
239 if ( endDateTime().isValid() ) { 249 if ( endDateTime().isValid() ) {
240 text += "<b>" + QObject::tr( "End:") + "</b> "; 250 text += "<b>" + QObject::tr( "End:") + "</b> ";
241 text += Qtopia::escapeString(endDateTime().toString() ). 251 text += Qtopia::escapeString(endDateTime().toString() ).
242 replace(QRegExp( "[\n]"), "<br>" ) + "<br>"; 252 replace(QRegExp( "[\n]"), "<br>" ) + "<br>";
243 } 253 }
244 if ( !note().isEmpty() ) { 254 if ( !note().isEmpty() ) {
245 text += "<b>" + QObject::tr( "Note:") + "</b><br>"; 255 text += "<b>" + QObject::tr( "Note:") + "</b><br>";
246 text += note(); 256 text += note();
247// text += Qtopia::escapeString(note() ). 257// text += Qtopia::escapeString(note() ).
248// replace(QRegExp( "[\n]"), "<br>" ) + "<br>"; 258// replace(QRegExp( "[\n]"), "<br>" ) + "<br>";
249 } 259 }
250 return text; 260 return text;
251} 261}
252QString OEvent::toShortText()const { 262QString OEvent::toShortText()const {
253 QString text; 263 QString text;
254 text += QString::number( startDateTime().date().day() ); 264 text += QString::number( startDateTime().date().day() );
255 text += "."; 265 text += ".";
256 text += QString::number( startDateTime().date().month() ); 266 text += QString::number( startDateTime().date().month() );
257 text += "."; 267 text += ".";
258 text += QString::number( startDateTime().date().year() ); 268 text += QString::number( startDateTime().date().year() );
259 text += " "; 269 text += " ";
260 text += QString::number( startDateTime().time().hour() ); 270 text += QString::number( startDateTime().time().hour() );
261 text += ":"; 271 text += ":";
262 text += QString::number( startDateTime().time().minute() ); 272 text += QString::number( startDateTime().time().minute() );
263 text += " - "; 273 text += " - ";
264 text += description(); 274 text += description();
265 return text; 275 return text;
266} 276}
267QString OEvent::type()const { 277QString OEvent::type()const {
268 return QString::fromLatin1("OEvent"); 278 return QString::fromLatin1("OEvent");
269} 279}
270QString OEvent::recordField( int /*id */ )const { 280QString OEvent::recordField( int /*id */ )const {
271 return QString::null; 281 return QString::null;
272} 282}
273int OEvent::rtti() { 283int OEvent::rtti() {
274 return OPimResolver::DateBook; 284 return OPimResolver::DateBook;
275} 285}
276bool OEvent::loadFromStream( QDataStream& ) { 286bool OEvent::loadFromStream( QDataStream& ) {
277 return true; 287 return true;
278} 288}
279bool OEvent::saveToStream( QDataStream& )const { 289bool OEvent::saveToStream( QDataStream& )const {
280 return true; 290 return true;
281} 291}
282void OEvent::changeOrModify() { 292void OEvent::changeOrModify() {
283 if ( data->count != 1 ) { 293 if ( data->count != 1 ) {
284 data->deref(); 294 data->deref();
285 Data* d2 = new Data; 295 Data* d2 = new Data;
286 d2->description = data->description; 296 d2->description = data->description;
287 d2->location = data->location; 297 d2->location = data->location;
288 298
289 if (data->manager ) 299 if (data->manager )
290 d2->manager = new OPimNotifyManager( *data->manager ); 300 d2->manager = new OPimNotifyManager( *data->manager );
291 301
292 if ( data->recur ) 302 if ( data->recur )
293 d2->recur = new ORecur( *data->recur ); 303 d2->recur = new ORecur( *data->recur );
294 304
295 d2->note = data->note; 305 d2->note = data->note;
296 d2->created = data->created; 306 d2->created = data->created;
297 d2->start = data->start; 307 d2->start = data->start;
298 d2->end = data->end; 308 d2->end = data->end;
299 d2->isAllDay = data->isAllDay; 309 d2->isAllDay = data->isAllDay;
300 d2->timezone = data->timezone; 310 d2->timezone = data->timezone;
301 d2->parent = data->parent; 311 d2->parent = data->parent;
302 312
303 if ( data->child ) { 313 if ( data->child ) {
304 d2->child = new QArray<int>( *data->child ); 314 d2->child = new QArray<int>( *data->child );
305 d2->child->detach(); 315 d2->child->detach();
306 } 316 }
307 317
308 data = d2; 318 data = d2;
309 } 319 }
310} 320}
311void OEvent::deref() { 321void OEvent::deref() {
312 if ( data->deref() ) { 322 if ( data->deref() ) {
313 delete data; 323 delete data;
314 data = 0; 324 data = 0;
315 } 325 }
316} 326}
317// FIXME 327// FIXME
318QMap<int, QString> OEvent::toMap()const { 328QMap<int, QString> OEvent::toMap()const {
319 return QMap<int, QString>(); 329 return QMap<int, QString>();
320} 330}
321QMap<QString, QString> OEvent::toExtraMap()const { 331QMap<QString, QString> OEvent::toExtraMap()const {
322 return QMap<QString, QString>(); 332 return QMap<QString, QString>();
323} 333}
324int OEvent::parent()const { 334int OEvent::parent()const {
325 return data->parent; 335 return data->parent;
326} 336}
327void OEvent::setParent( int uid ) { 337void OEvent::setParent( int uid ) {
328 changeOrModify(); 338 changeOrModify();
329 data->parent = uid; 339 data->parent = uid;
330} 340}
331QArray<int> OEvent::children() const{ 341QArray<int> OEvent::children() const{
332 if (!data->child) return QArray<int>(); 342 if (!data->child) return QArray<int>();
333 else 343 else
334 return data->child->copy(); 344 return data->child->copy();
335} 345}
336void OEvent::setChildren( const QArray<int>& arr ) { 346void OEvent::setChildren( const QArray<int>& arr ) {
337 changeOrModify(); 347 changeOrModify();
338 if (data->child) delete data->child; 348 if (data->child) delete data->child;
339 349
340 data->child = new QArray<int>( arr ); 350 data->child = new QArray<int>( arr );
341 data->child->detach(); 351 data->child->detach();
342} 352}
343void OEvent::addChild( int uid ) { 353void OEvent::addChild( int uid ) {
344 changeOrModify(); 354 changeOrModify();
345 if (!data->child ) { 355 if (!data->child ) {
346 data->child = new QArray<int>(1); 356 data->child = new QArray<int>(1);
347 (*data->child)[0] = uid; 357 (*data->child)[0] = uid;
348 }else{ 358 }else{
349 int count = data->child->count(); 359 int count = data->child->count();
350 data->child->resize( count + 1 ); 360 data->child->resize( count + 1 );
351 (*data->child)[count] = uid; 361 (*data->child)[count] = uid;
352 } 362 }
diff --git a/libopie/pim/otodo.cpp b/libopie/pim/otodo.cpp
index a29d88e..e087a00 100644
--- a/libopie/pim/otodo.cpp
+++ b/libopie/pim/otodo.cpp
@@ -1,242 +1,246 @@
1 1
2#include <qobject.h> 2#include <qobject.h>
3#include <qshared.h> 3#include <qshared.h>
4 4
5 5
6 6
7#include <qpe/palmtopuidgen.h> 7#include <qpe/palmtopuidgen.h>
8#include <qpe/stringutil.h> 8#include <qpe/stringutil.h>
9#include <qpe/palmtoprecord.h> 9#include <qpe/palmtoprecord.h>
10#include <qpe/stringutil.h> 10#include <qpe/stringutil.h>
11#include <qpe/categories.h> 11#include <qpe/categories.h>
12#include <qpe/categoryselect.h> 12#include <qpe/categoryselect.h>
13 13
14 14
15#include "opimstate.h" 15#include "opimstate.h"
16#include "orecur.h" 16#include "orecur.h"
17#include "opimmaintainer.h" 17#include "opimmaintainer.h"
18#include "opimnotifymanager.h" 18#include "opimnotifymanager.h"
19#include "opimresolver.h" 19#include "opimresolver.h"
20 20
21#include "otodo.h" 21#include "otodo.h"
22 22
23 23
24struct OTodo::OTodoData : public QShared { 24struct OTodo::OTodoData : public QShared {
25 OTodoData() : QShared() { 25 OTodoData() : QShared() {
26 recur = 0; 26 recur = 0;
27 state = 0; 27 state = 0;
28 maintainer = 0; 28 maintainer = 0;
29 notifiers = 0; 29 notifiers = 0;
30 }; 30 };
31 31
32 QDate date; 32 QDate date;
33 bool isCompleted:1; 33 bool isCompleted:1;
34 bool hasDate:1; 34 bool hasDate:1;
35 int priority; 35 int priority;
36 QString desc; 36 QString desc;
37 QString sum; 37 QString sum;
38 QMap<QString, QString> extra; 38 QMap<QString, QString> extra;
39 ushort prog; 39 ushort prog;
40 OPimState *state; 40 OPimState *state;
41 ORecur *recur; 41 ORecur *recur;
42 OPimMaintainer *maintainer; 42 OPimMaintainer *maintainer;
43 QDate start; 43 QDate start;
44 QDate completed; 44 QDate completed;
45 OPimNotifyManager *notifiers; 45 OPimNotifyManager *notifiers;
46}; 46};
47 47
48OTodo::OTodo(const OTodo &event ) 48OTodo::OTodo(const OTodo &event )
49 : OPimRecord( event ), data( event.data ) 49 : OPimRecord( event ), data( event.data )
50{ 50{
51 data->ref(); 51 data->ref();
52// qWarning("ref up"); 52// qWarning("ref up");
53} 53}
54OTodo::~OTodo() { 54OTodo::~OTodo() {
55 55
56// qWarning("~OTodo " ); 56// qWarning("~OTodo " );
57 if ( data->deref() ) { 57 if ( data->deref() ) {
58// qWarning("OTodo::dereffing"); 58// qWarning("OTodo::dereffing");
59 delete data; 59 delete data;
60 data = 0l; 60 data = 0l;
61 } 61 }
62} 62}
63OTodo::OTodo(bool completed, int priority, 63OTodo::OTodo(bool completed, int priority,
64 const QArray<int> &category, 64 const QArray<int> &category,
65 const QString& summary, 65 const QString& summary,
66 const QString &description, 66 const QString &description,
67 ushort progress, 67 ushort progress,
68 bool hasDate, QDate date, int uid ) 68 bool hasDate, QDate date, int uid )
69 : OPimRecord( uid ) 69 : OPimRecord( uid )
70{ 70{
71// qWarning("OTodoData " + summary); 71// qWarning("OTodoData " + summary);
72 setCategories( category ); 72 setCategories( category );
73 73
74 data = new OTodoData; 74 data = new OTodoData;
75 75
76 data->date = date; 76 data->date = date;
77 data->isCompleted = completed; 77 data->isCompleted = completed;
78 data->hasDate = hasDate; 78 data->hasDate = hasDate;
79 data->priority = priority; 79 data->priority = priority;
80 data->sum = summary; 80 data->sum = summary;
81 data->prog = progress; 81 data->prog = progress;
82 data->desc = Qtopia::simplifyMultiLineSpace(description ); 82 data->desc = Qtopia::simplifyMultiLineSpace(description );
83} 83}
84OTodo::OTodo(bool completed, int priority, 84OTodo::OTodo(bool completed, int priority,
85 const QStringList &category, 85 const QStringList &category,
86 const QString& summary, 86 const QString& summary,
87 const QString &description, 87 const QString &description,
88 ushort progress, 88 ushort progress,
89 bool hasDate, QDate date, int uid ) 89 bool hasDate, QDate date, int uid )
90 : OPimRecord( uid ) 90 : OPimRecord( uid )
91{ 91{
92// qWarning("OTodoData" + summary); 92// qWarning("OTodoData" + summary);
93 setCategories( idsFromString( category.join(";") ) ); 93 setCategories( idsFromString( category.join(";") ) );
94 94
95 data = new OTodoData; 95 data = new OTodoData;
96 96
97 data->date = date; 97 data->date = date;
98 data->isCompleted = completed; 98 data->isCompleted = completed;
99 data->hasDate = hasDate; 99 data->hasDate = hasDate;
100 data->priority = priority; 100 data->priority = priority;
101 data->sum = summary; 101 data->sum = summary;
102 data->prog = progress; 102 data->prog = progress;
103 data->desc = Qtopia::simplifyMultiLineSpace(description ); 103 data->desc = Qtopia::simplifyMultiLineSpace(description );
104} 104}
105bool OTodo::match( const QRegExp &regExp )const 105bool OTodo::match( const QRegExp &regExp )const
106{ 106{
107 if( QString::number( data->priority ).find( regExp ) != -1 ){ 107 if( QString::number( data->priority ).find( regExp ) != -1 ){
108 return true; 108 setLastHitField( Priority );
109 return true;
109 }else if( data->hasDate && data->date.toString().find( regExp) != -1 ){ 110 }else if( data->hasDate && data->date.toString().find( regExp) != -1 ){
110 return true; 111 setLastHitField( HasDate );
112 return true;
111 }else if(data->desc.find( regExp ) != -1 ){ 113 }else if(data->desc.find( regExp ) != -1 ){
112 return true; 114 setLastHitField( Description );
115 return true;
113 }else if(data->sum.find( regExp ) != -1 ) { 116 }else if(data->sum.find( regExp ) != -1 ) {
114 return true; 117 setLastHitField( Summary );
118 return true;
115 } 119 }
116 return false; 120 return false;
117} 121}
118bool OTodo::isCompleted() const 122bool OTodo::isCompleted() const
119{ 123{
120 return data->isCompleted; 124 return data->isCompleted;
121} 125}
122bool OTodo::hasDueDate() const 126bool OTodo::hasDueDate() const
123{ 127{
124 return data->hasDate; 128 return data->hasDate;
125} 129}
126bool OTodo::hasStartDate()const { 130bool OTodo::hasStartDate()const {
127 return data->start.isValid(); 131 return data->start.isValid();
128} 132}
129bool OTodo::hasCompletedDate()const { 133bool OTodo::hasCompletedDate()const {
130 return data->completed.isValid(); 134 return data->completed.isValid();
131} 135}
132int OTodo::priority()const 136int OTodo::priority()const
133{ 137{
134 return data->priority; 138 return data->priority;
135} 139}
136QString OTodo::summary() const 140QString OTodo::summary() const
137{ 141{
138 return data->sum; 142 return data->sum;
139} 143}
140ushort OTodo::progress() const 144ushort OTodo::progress() const
141{ 145{
142 return data->prog; 146 return data->prog;
143} 147}
144QDate OTodo::dueDate()const 148QDate OTodo::dueDate()const
145{ 149{
146 return data->date; 150 return data->date;
147} 151}
148QDate OTodo::startDate()const { 152QDate OTodo::startDate()const {
149 return data->start; 153 return data->start;
150} 154}
151QDate OTodo::completedDate()const { 155QDate OTodo::completedDate()const {
152 return data->completed; 156 return data->completed;
153} 157}
154QString OTodo::description()const 158QString OTodo::description()const
155{ 159{
156 return data->desc; 160 return data->desc;
157} 161}
158bool OTodo::hasState() const{ 162bool OTodo::hasState() const{
159 if (!data->state ) return false; 163 if (!data->state ) return false;
160 return ( data->state->state() != OPimState::Undefined ); 164 return ( data->state->state() != OPimState::Undefined );
161} 165}
162OPimState OTodo::state()const { 166OPimState OTodo::state()const {
163 if (!data->state ) { 167 if (!data->state ) {
164 OPimState state; 168 OPimState state;
165 return state; 169 return state;
166 } 170 }
167 171
168 return (*data->state); 172 return (*data->state);
169} 173}
170bool OTodo::hasRecurrence()const { 174bool OTodo::hasRecurrence()const {
171 if (!data->recur) return false; 175 if (!data->recur) return false;
172 return data->recur->doesRecur(); 176 return data->recur->doesRecur();
173} 177}
174ORecur OTodo::recurrence()const { 178ORecur OTodo::recurrence()const {
175 if (!data->recur) return ORecur(); 179 if (!data->recur) return ORecur();
176 180
177 return (*data->recur); 181 return (*data->recur);
178} 182}
179bool OTodo::hasMaintainer()const { 183bool OTodo::hasMaintainer()const {
180 if (!data->maintainer) return false; 184 if (!data->maintainer) return false;
181 185
182 return (data->maintainer->mode() != OPimMaintainer::Undefined ); 186 return (data->maintainer->mode() != OPimMaintainer::Undefined );
183} 187}
184OPimMaintainer OTodo::maintainer()const { 188OPimMaintainer OTodo::maintainer()const {
185 if (!data->maintainer) return OPimMaintainer(); 189 if (!data->maintainer) return OPimMaintainer();
186 190
187 return (*data->maintainer); 191 return (*data->maintainer);
188} 192}
189void OTodo::setCompleted( bool completed ) 193void OTodo::setCompleted( bool completed )
190{ 194{
191 changeOrModify(); 195 changeOrModify();
192 data->isCompleted = completed; 196 data->isCompleted = completed;
193} 197}
194void OTodo::setHasDueDate( bool hasDate ) 198void OTodo::setHasDueDate( bool hasDate )
195{ 199{
196 changeOrModify(); 200 changeOrModify();
197 data->hasDate = hasDate; 201 data->hasDate = hasDate;
198} 202}
199void OTodo::setDescription(const QString &desc ) 203void OTodo::setDescription(const QString &desc )
200{ 204{
201// qWarning( "desc " + desc ); 205// qWarning( "desc " + desc );
202 changeOrModify(); 206 changeOrModify();
203 data->desc = Qtopia::simplifyMultiLineSpace(desc ); 207 data->desc = Qtopia::simplifyMultiLineSpace(desc );
204} 208}
205void OTodo::setSummary( const QString& sum ) 209void OTodo::setSummary( const QString& sum )
206{ 210{
207 changeOrModify(); 211 changeOrModify();
208 data->sum = sum; 212 data->sum = sum;
209} 213}
210void OTodo::setPriority(int prio ) 214void OTodo::setPriority(int prio )
211{ 215{
212 changeOrModify(); 216 changeOrModify();
213 data->priority = prio; 217 data->priority = prio;
214} 218}
215void OTodo::setDueDate( const QDate& date ) 219void OTodo::setDueDate( const QDate& date )
216{ 220{
217 changeOrModify(); 221 changeOrModify();
218 data->date = date; 222 data->date = date;
219} 223}
220void OTodo::setStartDate( const QDate& date ) { 224void OTodo::setStartDate( const QDate& date ) {
221 changeOrModify(); 225 changeOrModify();
222 data->start = date; 226 data->start = date;
223} 227}
224void OTodo::setCompletedDate( const QDate& date ) { 228void OTodo::setCompletedDate( const QDate& date ) {
225 changeOrModify(); 229 changeOrModify();
226 data->completed = date; 230 data->completed = date;
227} 231}
228void OTodo::setState( const OPimState& state ) { 232void OTodo::setState( const OPimState& state ) {
229 changeOrModify(); 233 changeOrModify();
230 if (data->state ) 234 if (data->state )
231 (*data->state) = state; 235 (*data->state) = state;
232 else 236 else
233 data->state = new OPimState( state ); 237 data->state = new OPimState( state );
234} 238}
235void OTodo::setRecurrence( const ORecur& rec) { 239void OTodo::setRecurrence( const ORecur& rec) {
236 changeOrModify(); 240 changeOrModify();
237 if (data->recur ) 241 if (data->recur )
238 (*data->recur) = rec; 242 (*data->recur) = rec;
239 else 243 else
240 data->recur = new ORecur( rec ); 244 data->recur = new ORecur( rec );
241} 245}
242void OTodo::setMaintainer( const OPimMaintainer& pim ) { 246void OTodo::setMaintainer( const OPimMaintainer& pim ) {
diff --git a/libopie2/opiepim/oevent.cpp b/libopie2/opiepim/oevent.cpp
index cda12f9..2b138c0 100644
--- a/libopie2/opiepim/oevent.cpp
+++ b/libopie2/opiepim/oevent.cpp
@@ -87,266 +87,276 @@ OEvent& OEvent::operator=( const OEvent& ev) {
87 87
88 OPimRecord::operator=( ev ); 88 OPimRecord::operator=( ev );
89 ev.data->ref(); 89 ev.data->ref();
90 deref(); 90 deref();
91 data = ev.data; 91 data = ev.data;
92 92
93 93
94 return *this; 94 return *this;
95} 95}
96QString OEvent::description()const { 96QString OEvent::description()const {
97 return data->description; 97 return data->description;
98} 98}
99void OEvent::setDescription( const QString& description ) { 99void OEvent::setDescription( const QString& description ) {
100 changeOrModify(); 100 changeOrModify();
101 data->description = description; 101 data->description = description;
102} 102}
103void OEvent::setLocation( const QString& loc ) { 103void OEvent::setLocation( const QString& loc ) {
104 changeOrModify(); 104 changeOrModify();
105 data->location = loc; 105 data->location = loc;
106} 106}
107QString OEvent::location()const { 107QString OEvent::location()const {
108 return data->location; 108 return data->location;
109} 109}
110OPimNotifyManager &OEvent::notifiers()const { 110OPimNotifyManager &OEvent::notifiers()const {
111 // I hope we can skip the changeOrModify here 111 // I hope we can skip the changeOrModify here
112 // the notifier should take care of it 112 // the notifier should take care of it
113 // and OPimNotify is shared too 113 // and OPimNotify is shared too
114 if (!data->manager ) 114 if (!data->manager )
115 data->manager = new OPimNotifyManager; 115 data->manager = new OPimNotifyManager;
116 116
117 return *data->manager; 117 return *data->manager;
118} 118}
119bool OEvent::hasNotifiers()const { 119bool OEvent::hasNotifiers()const {
120 if (!data->manager ) 120 if (!data->manager )
121 return false; 121 return false;
122 if (data->manager->reminders().isEmpty() && 122 if (data->manager->reminders().isEmpty() &&
123 data->manager->alarms().isEmpty() ) 123 data->manager->alarms().isEmpty() )
124 return false; 124 return false;
125 125
126 return true; 126 return true;
127} 127}
128ORecur OEvent::recurrence()const { 128ORecur OEvent::recurrence()const {
129 if (!data->recur) 129 if (!data->recur)
130 data->recur = new ORecur; 130 data->recur = new ORecur;
131 131
132 return *data->recur; 132 return *data->recur;
133} 133}
134void OEvent::setRecurrence( const ORecur& rec) { 134void OEvent::setRecurrence( const ORecur& rec) {
135 changeOrModify(); 135 changeOrModify();
136 if (data->recur ) 136 if (data->recur )
137 (*data->recur) = rec; 137 (*data->recur) = rec;
138 else 138 else
139 data->recur = new ORecur( rec ); 139 data->recur = new ORecur( rec );
140} 140}
141bool OEvent::hasRecurrence()const { 141bool OEvent::hasRecurrence()const {
142 if (!data->recur ) return false; 142 if (!data->recur ) return false;
143 return data->recur->doesRecur(); 143 return data->recur->doesRecur();
144} 144}
145QString OEvent::note()const { 145QString OEvent::note()const {
146 return data->note; 146 return data->note;
147} 147}
148void OEvent::setNote( const QString& note ) { 148void OEvent::setNote( const QString& note ) {
149 changeOrModify(); 149 changeOrModify();
150 data->note = note; 150 data->note = note;
151} 151}
152QDateTime OEvent::createdDateTime()const { 152QDateTime OEvent::createdDateTime()const {
153 return data->created; 153 return data->created;
154} 154}
155void OEvent::setCreatedDateTime( const QDateTime& time ) { 155void OEvent::setCreatedDateTime( const QDateTime& time ) {
156 changeOrModify(); 156 changeOrModify();
157 data->created = time; 157 data->created = time;
158} 158}
159QDateTime OEvent::startDateTime()const { 159QDateTime OEvent::startDateTime()const {
160 if ( data->isAllDay ) 160 if ( data->isAllDay )
161 return QDateTime( data->start.date(), QTime(0, 0, 0 ) ); 161 return QDateTime( data->start.date(), QTime(0, 0, 0 ) );
162 return data->start; 162 return data->start;
163} 163}
164QDateTime OEvent::startDateTimeInZone()const { 164QDateTime OEvent::startDateTimeInZone()const {
165 /* if no timezone, or all day event or if the current and this timeZone match... */ 165 /* if no timezone, or all day event or if the current and this timeZone match... */
166 if (data->timezone.isEmpty() || data->isAllDay || data->timezone == OTimeZone::current().timeZone() ) return startDateTime(); 166 if (data->timezone.isEmpty() || data->isAllDay || data->timezone == OTimeZone::current().timeZone() ) return startDateTime();
167 167
168 OTimeZone zone(data->timezone ); 168 OTimeZone zone(data->timezone );
169 return zone.toDateTime( data->start, OTimeZone::current() ); 169 return zone.toDateTime( data->start, OTimeZone::current() );
170} 170}
171void OEvent::setStartDateTime( const QDateTime& dt ) { 171void OEvent::setStartDateTime( const QDateTime& dt ) {
172 changeOrModify(); 172 changeOrModify();
173 data->start = dt; 173 data->start = dt;
174} 174}
175QDateTime OEvent::endDateTime()const { 175QDateTime OEvent::endDateTime()const {
176 /* 176 /*
177 * if all Day event the end time needs 177 * if all Day event the end time needs
178 * to be on the same day as the start 178 * to be on the same day as the start
179 */ 179 */
180 if ( data->isAllDay ) 180 if ( data->isAllDay )
181 return QDateTime( data->start.date(), QTime(23, 59, 59 ) ); 181 return QDateTime( data->start.date(), QTime(23, 59, 59 ) );
182 return data->end; 182 return data->end;
183} 183}
184QDateTime OEvent::endDateTimeInZone()const { 184QDateTime OEvent::endDateTimeInZone()const {
185 /* if no timezone, or all day event or if the current and this timeZone match... */ 185 /* if no timezone, or all day event or if the current and this timeZone match... */
186 if (data->timezone.isEmpty() || data->isAllDay || data->timezone == OTimeZone::current().timeZone() ) return endDateTime(); 186 if (data->timezone.isEmpty() || data->isAllDay || data->timezone == OTimeZone::current().timeZone() ) return endDateTime();
187 187
188 OTimeZone zone(data->timezone ); 188 OTimeZone zone(data->timezone );
189 return zone.toDateTime( data->end, OTimeZone::current() ); 189 return zone.toDateTime( data->end, OTimeZone::current() );
190} 190}
191void OEvent::setEndDateTime( const QDateTime& dt ) { 191void OEvent::setEndDateTime( const QDateTime& dt ) {
192 changeOrModify(); 192 changeOrModify();
193 data->end = dt; 193 data->end = dt;
194} 194}
195bool OEvent::isMultipleDay()const { 195bool OEvent::isMultipleDay()const {
196 return data->end.date().day() - data->start.date().day(); 196 return data->end.date().day() - data->start.date().day();
197} 197}
198bool OEvent::isAllDay()const { 198bool OEvent::isAllDay()const {
199 return data->isAllDay; 199 return data->isAllDay;
200} 200}
201void OEvent::setAllDay( bool allDay ) { 201void OEvent::setAllDay( bool allDay ) {
202 changeOrModify(); 202 changeOrModify();
203 data->isAllDay = allDay; 203 data->isAllDay = allDay;
204 if (allDay ) data->timezone = "UTC"; 204 if (allDay ) data->timezone = "UTC";
205} 205}
206void OEvent::setTimeZone( const QString& tz ) { 206void OEvent::setTimeZone( const QString& tz ) {
207 changeOrModify(); 207 changeOrModify();
208 data->timezone = tz; 208 data->timezone = tz;
209} 209}
210QString OEvent::timeZone()const { 210QString OEvent::timeZone()const {
211 if (data->isAllDay ) return QString::fromLatin1("UTC"); 211 if (data->isAllDay ) return QString::fromLatin1("UTC");
212 return data->timezone; 212 return data->timezone;
213} 213}
214bool OEvent::match( const QRegExp& re )const { 214bool OEvent::match( const QRegExp& re )const {
215 if ( re.match( data->description ) != -1 ) 215 if ( re.match( data->description ) != -1 ){
216 setLastHitField( DatebookDescription );
216 return true; 217 return true;
217 if ( re.match( data->note ) != -1 ) 218 }
219 if ( re.match( data->note ) != -1 ){
220 setLastHitField( Note );
218 return true; 221 return true;
219 if ( re.match( data->location ) != -1 ) 222 }
223 if ( re.match( data->location ) != -1 ){
224 setLastHitField( Location );
220 return true; 225 return true;
221 if ( re.match( data->start.toString() ) != -1 ) 226 }
227 if ( re.match( data->start.toString() ) != -1 ){
228 setLastHitField( StartDateTime );
222 return true; 229 return true;
223 if ( re.match( data->end.toString() ) != -1 ) 230 }
231 if ( re.match( data->end.toString() ) != -1 ){
232 setLastHitField( EndDateTime );
224 return true; 233 return true;
234 }
225 return false; 235 return false;
226} 236}
227QString OEvent::toRichText()const { 237QString OEvent::toRichText()const {
228 QString text; 238 QString text;
229 if ( !description().isEmpty() ) { 239 if ( !description().isEmpty() ) {
230 text += "<b>" + QObject::tr( "Description:") + "</b><br>"; 240 text += "<b>" + QObject::tr( "Description:") + "</b><br>";
231 text += Qtopia::escapeString(description() ). 241 text += Qtopia::escapeString(description() ).
232 replace(QRegExp( "[\n]"), "<br>" ) + "<br>"; 242 replace(QRegExp( "[\n]"), "<br>" ) + "<br>";
233 } 243 }
234 if ( startDateTime().isValid() ) { 244 if ( startDateTime().isValid() ) {
235 text += "<b>" + QObject::tr( "Start:") + "</b> "; 245 text += "<b>" + QObject::tr( "Start:") + "</b> ";
236 text += Qtopia::escapeString(startDateTime().toString() ). 246 text += Qtopia::escapeString(startDateTime().toString() ).
237 replace(QRegExp( "[\n]"), "<br>" ) + "<br>"; 247 replace(QRegExp( "[\n]"), "<br>" ) + "<br>";
238 } 248 }
239 if ( endDateTime().isValid() ) { 249 if ( endDateTime().isValid() ) {
240 text += "<b>" + QObject::tr( "End:") + "</b> "; 250 text += "<b>" + QObject::tr( "End:") + "</b> ";
241 text += Qtopia::escapeString(endDateTime().toString() ). 251 text += Qtopia::escapeString(endDateTime().toString() ).
242 replace(QRegExp( "[\n]"), "<br>" ) + "<br>"; 252 replace(QRegExp( "[\n]"), "<br>" ) + "<br>";
243 } 253 }
244 if ( !note().isEmpty() ) { 254 if ( !note().isEmpty() ) {
245 text += "<b>" + QObject::tr( "Note:") + "</b><br>"; 255 text += "<b>" + QObject::tr( "Note:") + "</b><br>";
246 text += note(); 256 text += note();
247// text += Qtopia::escapeString(note() ). 257// text += Qtopia::escapeString(note() ).
248// replace(QRegExp( "[\n]"), "<br>" ) + "<br>"; 258// replace(QRegExp( "[\n]"), "<br>" ) + "<br>";
249 } 259 }
250 return text; 260 return text;
251} 261}
252QString OEvent::toShortText()const { 262QString OEvent::toShortText()const {
253 QString text; 263 QString text;
254 text += QString::number( startDateTime().date().day() ); 264 text += QString::number( startDateTime().date().day() );
255 text += "."; 265 text += ".";
256 text += QString::number( startDateTime().date().month() ); 266 text += QString::number( startDateTime().date().month() );
257 text += "."; 267 text += ".";
258 text += QString::number( startDateTime().date().year() ); 268 text += QString::number( startDateTime().date().year() );
259 text += " "; 269 text += " ";
260 text += QString::number( startDateTime().time().hour() ); 270 text += QString::number( startDateTime().time().hour() );
261 text += ":"; 271 text += ":";
262 text += QString::number( startDateTime().time().minute() ); 272 text += QString::number( startDateTime().time().minute() );
263 text += " - "; 273 text += " - ";
264 text += description(); 274 text += description();
265 return text; 275 return text;
266} 276}
267QString OEvent::type()const { 277QString OEvent::type()const {
268 return QString::fromLatin1("OEvent"); 278 return QString::fromLatin1("OEvent");
269} 279}
270QString OEvent::recordField( int /*id */ )const { 280QString OEvent::recordField( int /*id */ )const {
271 return QString::null; 281 return QString::null;
272} 282}
273int OEvent::rtti() { 283int OEvent::rtti() {
274 return OPimResolver::DateBook; 284 return OPimResolver::DateBook;
275} 285}
276bool OEvent::loadFromStream( QDataStream& ) { 286bool OEvent::loadFromStream( QDataStream& ) {
277 return true; 287 return true;
278} 288}
279bool OEvent::saveToStream( QDataStream& )const { 289bool OEvent::saveToStream( QDataStream& )const {
280 return true; 290 return true;
281} 291}
282void OEvent::changeOrModify() { 292void OEvent::changeOrModify() {
283 if ( data->count != 1 ) { 293 if ( data->count != 1 ) {
284 data->deref(); 294 data->deref();
285 Data* d2 = new Data; 295 Data* d2 = new Data;
286 d2->description = data->description; 296 d2->description = data->description;
287 d2->location = data->location; 297 d2->location = data->location;
288 298
289 if (data->manager ) 299 if (data->manager )
290 d2->manager = new OPimNotifyManager( *data->manager ); 300 d2->manager = new OPimNotifyManager( *data->manager );
291 301
292 if ( data->recur ) 302 if ( data->recur )
293 d2->recur = new ORecur( *data->recur ); 303 d2->recur = new ORecur( *data->recur );
294 304
295 d2->note = data->note; 305 d2->note = data->note;
296 d2->created = data->created; 306 d2->created = data->created;
297 d2->start = data->start; 307 d2->start = data->start;
298 d2->end = data->end; 308 d2->end = data->end;
299 d2->isAllDay = data->isAllDay; 309 d2->isAllDay = data->isAllDay;
300 d2->timezone = data->timezone; 310 d2->timezone = data->timezone;
301 d2->parent = data->parent; 311 d2->parent = data->parent;
302 312
303 if ( data->child ) { 313 if ( data->child ) {
304 d2->child = new QArray<int>( *data->child ); 314 d2->child = new QArray<int>( *data->child );
305 d2->child->detach(); 315 d2->child->detach();
306 } 316 }
307 317
308 data = d2; 318 data = d2;
309 } 319 }
310} 320}
311void OEvent::deref() { 321void OEvent::deref() {
312 if ( data->deref() ) { 322 if ( data->deref() ) {
313 delete data; 323 delete data;
314 data = 0; 324 data = 0;
315 } 325 }
316} 326}
317// FIXME 327// FIXME
318QMap<int, QString> OEvent::toMap()const { 328QMap<int, QString> OEvent::toMap()const {
319 return QMap<int, QString>(); 329 return QMap<int, QString>();
320} 330}
321QMap<QString, QString> OEvent::toExtraMap()const { 331QMap<QString, QString> OEvent::toExtraMap()const {
322 return QMap<QString, QString>(); 332 return QMap<QString, QString>();
323} 333}
324int OEvent::parent()const { 334int OEvent::parent()const {
325 return data->parent; 335 return data->parent;
326} 336}
327void OEvent::setParent( int uid ) { 337void OEvent::setParent( int uid ) {
328 changeOrModify(); 338 changeOrModify();
329 data->parent = uid; 339 data->parent = uid;
330} 340}
331QArray<int> OEvent::children() const{ 341QArray<int> OEvent::children() const{
332 if (!data->child) return QArray<int>(); 342 if (!data->child) return QArray<int>();
333 else 343 else
334 return data->child->copy(); 344 return data->child->copy();
335} 345}
336void OEvent::setChildren( const QArray<int>& arr ) { 346void OEvent::setChildren( const QArray<int>& arr ) {
337 changeOrModify(); 347 changeOrModify();
338 if (data->child) delete data->child; 348 if (data->child) delete data->child;
339 349
340 data->child = new QArray<int>( arr ); 350 data->child = new QArray<int>( arr );
341 data->child->detach(); 351 data->child->detach();
342} 352}
343void OEvent::addChild( int uid ) { 353void OEvent::addChild( int uid ) {
344 changeOrModify(); 354 changeOrModify();
345 if (!data->child ) { 355 if (!data->child ) {
346 data->child = new QArray<int>(1); 356 data->child = new QArray<int>(1);
347 (*data->child)[0] = uid; 357 (*data->child)[0] = uid;
348 }else{ 358 }else{
349 int count = data->child->count(); 359 int count = data->child->count();
350 data->child->resize( count + 1 ); 360 data->child->resize( count + 1 );
351 (*data->child)[count] = uid; 361 (*data->child)[count] = uid;
352 } 362 }
diff --git a/libopie2/opiepim/otodo.cpp b/libopie2/opiepim/otodo.cpp
index a29d88e..e087a00 100644
--- a/libopie2/opiepim/otodo.cpp
+++ b/libopie2/opiepim/otodo.cpp
@@ -1,242 +1,246 @@
1 1
2#include <qobject.h> 2#include <qobject.h>
3#include <qshared.h> 3#include <qshared.h>
4 4
5 5
6 6
7#include <qpe/palmtopuidgen.h> 7#include <qpe/palmtopuidgen.h>
8#include <qpe/stringutil.h> 8#include <qpe/stringutil.h>
9#include <qpe/palmtoprecord.h> 9#include <qpe/palmtoprecord.h>
10#include <qpe/stringutil.h> 10#include <qpe/stringutil.h>
11#include <qpe/categories.h> 11#include <qpe/categories.h>
12#include <qpe/categoryselect.h> 12#include <qpe/categoryselect.h>
13 13
14 14
15#include "opimstate.h" 15#include "opimstate.h"
16#include "orecur.h" 16#include "orecur.h"
17#include "opimmaintainer.h" 17#include "opimmaintainer.h"
18#include "opimnotifymanager.h" 18#include "opimnotifymanager.h"
19#include "opimresolver.h" 19#include "opimresolver.h"
20 20
21#include "otodo.h" 21#include "otodo.h"
22 22
23 23
24struct OTodo::OTodoData : public QShared { 24struct OTodo::OTodoData : public QShared {
25 OTodoData() : QShared() { 25 OTodoData() : QShared() {
26 recur = 0; 26 recur = 0;
27 state = 0; 27 state = 0;
28 maintainer = 0; 28 maintainer = 0;
29 notifiers = 0; 29 notifiers = 0;
30 }; 30 };
31 31
32 QDate date; 32 QDate date;
33 bool isCompleted:1; 33 bool isCompleted:1;
34 bool hasDate:1; 34 bool hasDate:1;
35 int priority; 35 int priority;
36 QString desc; 36 QString desc;
37 QString sum; 37 QString sum;
38 QMap<QString, QString> extra; 38 QMap<QString, QString> extra;
39 ushort prog; 39 ushort prog;
40 OPimState *state; 40 OPimState *state;
41 ORecur *recur; 41 ORecur *recur;
42 OPimMaintainer *maintainer; 42 OPimMaintainer *maintainer;
43 QDate start; 43 QDate start;
44 QDate completed; 44 QDate completed;
45 OPimNotifyManager *notifiers; 45 OPimNotifyManager *notifiers;
46}; 46};
47 47
48OTodo::OTodo(const OTodo &event ) 48OTodo::OTodo(const OTodo &event )
49 : OPimRecord( event ), data( event.data ) 49 : OPimRecord( event ), data( event.data )
50{ 50{
51 data->ref(); 51 data->ref();
52// qWarning("ref up"); 52// qWarning("ref up");
53} 53}
54OTodo::~OTodo() { 54OTodo::~OTodo() {
55 55
56// qWarning("~OTodo " ); 56// qWarning("~OTodo " );
57 if ( data->deref() ) { 57 if ( data->deref() ) {
58// qWarning("OTodo::dereffing"); 58// qWarning("OTodo::dereffing");
59 delete data; 59 delete data;
60 data = 0l; 60 data = 0l;
61 } 61 }
62} 62}
63OTodo::OTodo(bool completed, int priority, 63OTodo::OTodo(bool completed, int priority,
64 const QArray<int> &category, 64 const QArray<int> &category,
65 const QString& summary, 65 const QString& summary,
66 const QString &description, 66 const QString &description,
67 ushort progress, 67 ushort progress,
68 bool hasDate, QDate date, int uid ) 68 bool hasDate, QDate date, int uid )
69 : OPimRecord( uid ) 69 : OPimRecord( uid )
70{ 70{
71// qWarning("OTodoData " + summary); 71// qWarning("OTodoData " + summary);
72 setCategories( category ); 72 setCategories( category );
73 73
74 data = new OTodoData; 74 data = new OTodoData;
75 75
76 data->date = date; 76 data->date = date;
77 data->isCompleted = completed; 77 data->isCompleted = completed;
78 data->hasDate = hasDate; 78 data->hasDate = hasDate;
79 data->priority = priority; 79 data->priority = priority;
80 data->sum = summary; 80 data->sum = summary;
81 data->prog = progress; 81 data->prog = progress;
82 data->desc = Qtopia::simplifyMultiLineSpace(description ); 82 data->desc = Qtopia::simplifyMultiLineSpace(description );
83} 83}
84OTodo::OTodo(bool completed, int priority, 84OTodo::OTodo(bool completed, int priority,
85 const QStringList &category, 85 const QStringList &category,
86 const QString& summary, 86 const QString& summary,
87 const QString &description, 87 const QString &description,
88 ushort progress, 88 ushort progress,
89 bool hasDate, QDate date, int uid ) 89 bool hasDate, QDate date, int uid )
90 : OPimRecord( uid ) 90 : OPimRecord( uid )
91{ 91{
92// qWarning("OTodoData" + summary); 92// qWarning("OTodoData" + summary);
93 setCategories( idsFromString( category.join(";") ) ); 93 setCategories( idsFromString( category.join(";") ) );
94 94
95 data = new OTodoData; 95 data = new OTodoData;
96 96
97 data->date = date; 97 data->date = date;
98 data->isCompleted = completed; 98 data->isCompleted = completed;
99 data->hasDate = hasDate; 99 data->hasDate = hasDate;
100 data->priority = priority; 100 data->priority = priority;
101 data->sum = summary; 101 data->sum = summary;
102 data->prog = progress; 102 data->prog = progress;
103 data->desc = Qtopia::simplifyMultiLineSpace(description ); 103 data->desc = Qtopia::simplifyMultiLineSpace(description );
104} 104}
105bool OTodo::match( const QRegExp &regExp )const 105bool OTodo::match( const QRegExp &regExp )const
106{ 106{
107 if( QString::number( data->priority ).find( regExp ) != -1 ){ 107 if( QString::number( data->priority ).find( regExp ) != -1 ){
108 return true; 108 setLastHitField( Priority );
109 return true;
109 }else if( data->hasDate && data->date.toString().find( regExp) != -1 ){ 110 }else if( data->hasDate && data->date.toString().find( regExp) != -1 ){
110 return true; 111 setLastHitField( HasDate );
112 return true;
111 }else if(data->desc.find( regExp ) != -1 ){ 113 }else if(data->desc.find( regExp ) != -1 ){
112 return true; 114 setLastHitField( Description );
115 return true;
113 }else if(data->sum.find( regExp ) != -1 ) { 116 }else if(data->sum.find( regExp ) != -1 ) {
114 return true; 117 setLastHitField( Summary );
118 return true;
115 } 119 }
116 return false; 120 return false;
117} 121}
118bool OTodo::isCompleted() const 122bool OTodo::isCompleted() const
119{ 123{
120 return data->isCompleted; 124 return data->isCompleted;
121} 125}
122bool OTodo::hasDueDate() const 126bool OTodo::hasDueDate() const
123{ 127{
124 return data->hasDate; 128 return data->hasDate;
125} 129}
126bool OTodo::hasStartDate()const { 130bool OTodo::hasStartDate()const {
127 return data->start.isValid(); 131 return data->start.isValid();
128} 132}
129bool OTodo::hasCompletedDate()const { 133bool OTodo::hasCompletedDate()const {
130 return data->completed.isValid(); 134 return data->completed.isValid();
131} 135}
132int OTodo::priority()const 136int OTodo::priority()const
133{ 137{
134 return data->priority; 138 return data->priority;
135} 139}
136QString OTodo::summary() const 140QString OTodo::summary() const
137{ 141{
138 return data->sum; 142 return data->sum;
139} 143}
140ushort OTodo::progress() const 144ushort OTodo::progress() const
141{ 145{
142 return data->prog; 146 return data->prog;
143} 147}
144QDate OTodo::dueDate()const 148QDate OTodo::dueDate()const
145{ 149{
146 return data->date; 150 return data->date;
147} 151}
148QDate OTodo::startDate()const { 152QDate OTodo::startDate()const {
149 return data->start; 153 return data->start;
150} 154}
151QDate OTodo::completedDate()const { 155QDate OTodo::completedDate()const {
152 return data->completed; 156 return data->completed;
153} 157}
154QString OTodo::description()const 158QString OTodo::description()const
155{ 159{
156 return data->desc; 160 return data->desc;
157} 161}
158bool OTodo::hasState() const{ 162bool OTodo::hasState() const{
159 if (!data->state ) return false; 163 if (!data->state ) return false;
160 return ( data->state->state() != OPimState::Undefined ); 164 return ( data->state->state() != OPimState::Undefined );
161} 165}
162OPimState OTodo::state()const { 166OPimState OTodo::state()const {
163 if (!data->state ) { 167 if (!data->state ) {
164 OPimState state; 168 OPimState state;
165 return state; 169 return state;
166 } 170 }
167 171
168 return (*data->state); 172 return (*data->state);
169} 173}
170bool OTodo::hasRecurrence()const { 174bool OTodo::hasRecurrence()const {
171 if (!data->recur) return false; 175 if (!data->recur) return false;
172 return data->recur->doesRecur(); 176 return data->recur->doesRecur();
173} 177}
174ORecur OTodo::recurrence()const { 178ORecur OTodo::recurrence()const {
175 if (!data->recur) return ORecur(); 179 if (!data->recur) return ORecur();
176 180
177 return (*data->recur); 181 return (*data->recur);
178} 182}
179bool OTodo::hasMaintainer()const { 183bool OTodo::hasMaintainer()const {
180 if (!data->maintainer) return false; 184 if (!data->maintainer) return false;
181 185
182 return (data->maintainer->mode() != OPimMaintainer::Undefined ); 186 return (data->maintainer->mode() != OPimMaintainer::Undefined );
183} 187}
184OPimMaintainer OTodo::maintainer()const { 188OPimMaintainer OTodo::maintainer()const {
185 if (!data->maintainer) return OPimMaintainer(); 189 if (!data->maintainer) return OPimMaintainer();
186 190
187 return (*data->maintainer); 191 return (*data->maintainer);
188} 192}
189void OTodo::setCompleted( bool completed ) 193void OTodo::setCompleted( bool completed )
190{ 194{
191 changeOrModify(); 195 changeOrModify();
192 data->isCompleted = completed; 196 data->isCompleted = completed;
193} 197}
194void OTodo::setHasDueDate( bool hasDate ) 198void OTodo::setHasDueDate( bool hasDate )
195{ 199{
196 changeOrModify(); 200 changeOrModify();
197 data->hasDate = hasDate; 201 data->hasDate = hasDate;
198} 202}
199void OTodo::setDescription(const QString &desc ) 203void OTodo::setDescription(const QString &desc )
200{ 204{
201// qWarning( "desc " + desc ); 205// qWarning( "desc " + desc );
202 changeOrModify(); 206 changeOrModify();
203 data->desc = Qtopia::simplifyMultiLineSpace(desc ); 207 data->desc = Qtopia::simplifyMultiLineSpace(desc );
204} 208}
205void OTodo::setSummary( const QString& sum ) 209void OTodo::setSummary( const QString& sum )
206{ 210{
207 changeOrModify(); 211 changeOrModify();
208 data->sum = sum; 212 data->sum = sum;
209} 213}
210void OTodo::setPriority(int prio ) 214void OTodo::setPriority(int prio )
211{ 215{
212 changeOrModify(); 216 changeOrModify();
213 data->priority = prio; 217 data->priority = prio;
214} 218}
215void OTodo::setDueDate( const QDate& date ) 219void OTodo::setDueDate( const QDate& date )
216{ 220{
217 changeOrModify(); 221 changeOrModify();
218 data->date = date; 222 data->date = date;
219} 223}
220void OTodo::setStartDate( const QDate& date ) { 224void OTodo::setStartDate( const QDate& date ) {
221 changeOrModify(); 225 changeOrModify();
222 data->start = date; 226 data->start = date;
223} 227}
224void OTodo::setCompletedDate( const QDate& date ) { 228void OTodo::setCompletedDate( const QDate& date ) {
225 changeOrModify(); 229 changeOrModify();
226 data->completed = date; 230 data->completed = date;
227} 231}
228void OTodo::setState( const OPimState& state ) { 232void OTodo::setState( const OPimState& state ) {
229 changeOrModify(); 233 changeOrModify();
230 if (data->state ) 234 if (data->state )
231 (*data->state) = state; 235 (*data->state) = state;
232 else 236 else
233 data->state = new OPimState( state ); 237 data->state = new OPimState( state );
234} 238}
235void OTodo::setRecurrence( const ORecur& rec) { 239void OTodo::setRecurrence( const ORecur& rec) {
236 changeOrModify(); 240 changeOrModify();
237 if (data->recur ) 241 if (data->recur )
238 (*data->recur) = rec; 242 (*data->recur) = rec;
239 else 243 else
240 data->recur = new ORecur( rec ); 244 data->recur = new ORecur( rec );
241} 245}
242void OTodo::setMaintainer( const OPimMaintainer& pim ) { 246void OTodo::setMaintainer( const OPimMaintainer& pim ) {