summaryrefslogtreecommitdiff
path: root/libopie2/opiepim/otodo.cpp
Unidiff
Diffstat (limited to 'libopie2/opiepim/otodo.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/otodo.cpp602
1 files changed, 382 insertions, 220 deletions
diff --git a/libopie2/opiepim/otodo.cpp b/libopie2/opiepim/otodo.cpp
index 3eb0026..f534067 100644
--- a/libopie2/opiepim/otodo.cpp
+++ b/libopie2/opiepim/otodo.cpp
@@ -26,11 +26,15 @@
26 Inc., 59 Temple Place - Suite 330, 26 Inc., 59 Temple Place - Suite 330,
27 Boston, MA 02111-1307, USA. 27 Boston, MA 02111-1307, USA.
28*/ 28*/
29#include <qobject.h>
30#include <qshared.h>
31
32 29
30#include "otodo.h"
33 31
32/* OPIE */
33#include <opie2/opimstate.h>
34#include <opie2/orecur.h>
35#include <opie2/opimmaintainer.h>
36#include <opie2/opimnotifymanager.h>
37#include <opie2/opimresolver.h>
34#include <qpe/palmtopuidgen.h> 38#include <qpe/palmtopuidgen.h>
35#include <qpe/stringutil.h> 39#include <qpe/stringutil.h>
36#include <qpe/palmtoprecord.h> 40#include <qpe/palmtoprecord.h>
@@ -38,33 +42,32 @@
38#include <qpe/categories.h> 42#include <qpe/categories.h>
39#include <qpe/categoryselect.h> 43#include <qpe/categoryselect.h>
40 44
45/* QT */
46#include <qobject.h>
47#include <qshared.h>
41 48
42#include <opie2/opimstate.h> 49namespace Opie
43#include <opie2/orecur.h> 50{
44#include <opie2/opimmaintainer.h>
45#include <opie2/opimnotifymanager.h>
46#include <opie2/opimresolver.h>
47
48#include <opie2/otodo.h>
49
50namespace Opie {
51 51
52struct OTodo::OTodoData : public QShared { 52struct OTodo::OTodoData : public QShared
53 OTodoData() : QShared() { 53{
54 OTodoData() : QShared()
55 {
54 recur = 0; 56 recur = 0;
55 state = 0; 57 state = 0;
56 maintainer = 0; 58 maintainer = 0;
57 notifiers = 0; 59 notifiers = 0;
58 }; 60 };
59 ~OTodoData() { 61 ~OTodoData()
62 {
60 delete recur; 63 delete recur;
61 delete maintainer; 64 delete maintainer;
62 delete notifiers; 65 delete notifiers;
63 } 66 }
64 67
65 QDate date; 68 QDate date;
66 bool isCompleted:1; 69 bool isCompleted: 1;
67 bool hasDate:1; 70 bool hasDate: 1;
68 int priority; 71 int priority;
69 QString desc; 72 QString desc;
70 QString sum; 73 QString sum;
@@ -78,30 +81,37 @@ struct OTodo::OTodoData : public QShared {
78 OPimNotifyManager *notifiers; 81 OPimNotifyManager *notifiers;
79}; 82};
80 83
81OTodo::OTodo(const OTodo &event ) 84
82 : OPimRecord( event ), data( event.data ) 85OTodo::OTodo( const OTodo &event )
86 : OPimRecord( event ), data( event.data )
83{ 87{
84 data->ref(); 88 data->ref();
85// qWarning("ref up"); 89 // qWarning("ref up");
86} 90}
87OTodo::~OTodo() {
88 91
89// qWarning("~OTodo " ); 92
90 if ( data->deref() ) { 93OTodo::~OTodo()
91// qWarning("OTodo::dereffing"); 94{
95
96 // qWarning("~OTodo " );
97 if ( data->deref() )
98 {
99 // qWarning("OTodo::dereffing");
92 delete data; 100 delete data;
93 data = 0l; 101 data = 0l;
94 } 102 }
95} 103}
96OTodo::OTodo(bool completed, int priority, 104
97 const QArray<int> &category, 105
98 const QString& summary, 106OTodo::OTodo( bool completed, int priority,
99 const QString &description, 107 const QArray<int> &category,
100 ushort progress, 108 const QString& summary,
101 bool hasDate, QDate date, int uid ) 109 const QString &description,
102 : OPimRecord( uid ) 110 ushort progress,
111 bool hasDate, QDate date, int uid )
112 : OPimRecord( uid )
103{ 113{
104// qWarning("OTodoData " + summary); 114 // qWarning("OTodoData " + summary);
105 setCategories( category ); 115 setCategories( category );
106 116
107 data = new OTodoData; 117 data = new OTodoData;
@@ -112,18 +122,20 @@ OTodo::OTodo(bool completed, int priority,
112 data->priority = priority; 122 data->priority = priority;
113 data->sum = summary; 123 data->sum = summary;
114 data->prog = progress; 124 data->prog = progress;
115 data->desc = Qtopia::simplifyMultiLineSpace(description ); 125 data->desc = Qtopia::simplifyMultiLineSpace( description );
116} 126}
117OTodo::OTodo(bool completed, int priority, 127
118 const QStringList &category, 128
119 const QString& summary, 129OTodo::OTodo( bool completed, int priority,
120 const QString &description, 130 const QStringList &category,
121 ushort progress, 131 const QString& summary,
122 bool hasDate, QDate date, int uid ) 132 const QString &description,
123 : OPimRecord( uid ) 133 ushort progress,
134 bool hasDate, QDate date, int uid )
135 : OPimRecord( uid )
124{ 136{
125// qWarning("OTodoData" + summary); 137 // qWarning("OTodoData" + summary);
126 setCategories( idsFromString( category.join(";") ) ); 138 setCategories( idsFromString( category.join( ";" ) ) );
127 139
128 data = new OTodoData; 140 data = new OTodoData;
129 141
@@ -133,199 +145,291 @@ OTodo::OTodo(bool completed, int priority,
133 data->priority = priority; 145 data->priority = priority;
134 data->sum = summary; 146 data->sum = summary;
135 data->prog = progress; 147 data->prog = progress;
136 data->desc = Qtopia::simplifyMultiLineSpace(description ); 148 data->desc = Qtopia::simplifyMultiLineSpace( description );
137} 149}
138bool OTodo::match( const QRegExp &regExp )const 150
151
152bool OTodo::match( const QRegExp &regExp ) const
139{ 153{
140 if( QString::number( data->priority ).find( regExp ) != -1 ){ 154 if ( QString::number( data->priority ).find( regExp ) != -1 )
141 setLastHitField( Priority ); 155 {
142 return true; 156 setLastHitField( Priority );
143 }else if( data->hasDate && data->date.toString().find( regExp) != -1 ){ 157 return true;
144 setLastHitField( HasDate ); 158 }
145 return true; 159 else if ( data->hasDate && data->date.toString().find( regExp ) != -1 )
146 }else if(data->desc.find( regExp ) != -1 ){ 160 {
161 setLastHitField( HasDate );
162 return true;
163 }
164 else if ( data->desc.find( regExp ) != -1 )
165 {
147 setLastHitField( Description ); 166 setLastHitField( Description );
148 return true; 167 return true;
149 }else if(data->sum.find( regExp ) != -1 ) { 168 }
169 else if ( data->sum.find( regExp ) != -1 )
170 {
150 setLastHitField( Summary ); 171 setLastHitField( Summary );
151 return true; 172 return true;
152 } 173 }
153 return false; 174 return false;
154} 175}
176
177
155bool OTodo::isCompleted() const 178bool OTodo::isCompleted() const
156{ 179{
157 return data->isCompleted; 180 return data->isCompleted;
158} 181}
182
183
159bool OTodo::hasDueDate() const 184bool OTodo::hasDueDate() const
160{ 185{
161 return data->hasDate; 186 return data->hasDate;
162} 187}
163bool OTodo::hasStartDate()const { 188
189
190bool OTodo::hasStartDate() const
191{
164 return data->start.isValid(); 192 return data->start.isValid();
165} 193}
166bool OTodo::hasCompletedDate()const { 194
195
196bool OTodo::hasCompletedDate() const
197{
167 return data->completed.isValid(); 198 return data->completed.isValid();
168} 199}
169int OTodo::priority()const 200
201
202int OTodo::priority() const
170{ 203{
171 return data->priority; 204 return data->priority;
172} 205}
206
207
173QString OTodo::summary() const 208QString OTodo::summary() const
174{ 209{
175 return data->sum; 210 return data->sum;
176} 211}
212
213
177ushort OTodo::progress() const 214ushort OTodo::progress() const
178{ 215{
179 return data->prog; 216 return data->prog;
180} 217}
181QDate OTodo::dueDate()const 218
219
220QDate OTodo::dueDate() const
182{ 221{
183 return data->date; 222 return data->date;
184} 223}
185QDate OTodo::startDate()const { 224
225
226QDate OTodo::startDate() const
227{
186 return data->start; 228 return data->start;
187} 229}
188QDate OTodo::completedDate()const { 230
231
232QDate OTodo::completedDate() const
233{
189 return data->completed; 234 return data->completed;
190} 235}
191QString OTodo::description()const 236
237
238QString OTodo::description() const
192{ 239{
193 return data->desc; 240 return data->desc;
194} 241}
195bool OTodo::hasState() const{ 242
196 if (!data->state ) return false; 243
244bool OTodo::hasState() const
245{
246 if ( !data->state ) return false;
197 return ( data->state->state() != OPimState::Undefined ); 247 return ( data->state->state() != OPimState::Undefined );
198} 248}
199OPimState OTodo::state()const { 249
200 if (!data->state ) { 250
251OPimState OTodo::state() const
252{
253 if ( !data->state )
254 {
201 OPimState state; 255 OPimState state;
202 return state; 256 return state;
203 } 257 }
204 258
205 return (*data->state); 259 return ( *data->state );
206} 260}
207bool OTodo::hasRecurrence()const { 261
208 if (!data->recur) return false; 262
263bool OTodo::hasRecurrence() const
264{
265 if ( !data->recur ) return false;
209 return data->recur->doesRecur(); 266 return data->recur->doesRecur();
210} 267}
211ORecur OTodo::recurrence()const {
212 if (!data->recur) return ORecur();
213 268
214 return (*data->recur); 269
270ORecur OTodo::recurrence() const
271{
272 if ( !data->recur ) return ORecur();
273
274 return ( *data->recur );
215} 275}
216bool OTodo::hasMaintainer()const {
217 if (!data->maintainer) return false;
218 276
219 return (data->maintainer->mode() != OPimMaintainer::Undefined ); 277
278bool OTodo::hasMaintainer() const
279{
280 if ( !data->maintainer ) return false;
281
282 return ( data->maintainer->mode() != OPimMaintainer::Undefined );
220} 283}
221OPimMaintainer OTodo::maintainer()const {
222 if (!data->maintainer) return OPimMaintainer();
223 284
224 return (*data->maintainer); 285
286OPimMaintainer OTodo::maintainer() const
287{
288 if ( !data->maintainer ) return OPimMaintainer();
289
290 return ( *data->maintainer );
225} 291}
292
293
226void OTodo::setCompleted( bool completed ) 294void OTodo::setCompleted( bool completed )
227{ 295{
228 changeOrModify(); 296 changeOrModify();
229 data->isCompleted = completed; 297 data->isCompleted = completed;
230} 298}
299
300
231void OTodo::setHasDueDate( bool hasDate ) 301void OTodo::setHasDueDate( bool hasDate )
232{ 302{
233 changeOrModify(); 303 changeOrModify();
234 data->hasDate = hasDate; 304 data->hasDate = hasDate;
235} 305}
236void OTodo::setDescription(const QString &desc ) 306
307
308void OTodo::setDescription( const QString &desc )
237{ 309{
238// qWarning( "desc " + desc ); 310 // qWarning( "desc " + desc );
239 changeOrModify(); 311 changeOrModify();
240 data->desc = Qtopia::simplifyMultiLineSpace(desc ); 312 data->desc = Qtopia::simplifyMultiLineSpace( desc );
241} 313}
314
315
242void OTodo::setSummary( const QString& sum ) 316void OTodo::setSummary( const QString& sum )
243{ 317{
244 changeOrModify(); 318 changeOrModify();
245 data->sum = sum; 319 data->sum = sum;
246} 320}
247void OTodo::setPriority(int prio ) 321
322
323void OTodo::setPriority( int prio )
248{ 324{
249 changeOrModify(); 325 changeOrModify();
250 data->priority = prio; 326 data->priority = prio;
251} 327}
328
329
252void OTodo::setDueDate( const QDate& date ) 330void OTodo::setDueDate( const QDate& date )
253{ 331{
254 changeOrModify(); 332 changeOrModify();
255 data->date = date; 333 data->date = date;
256} 334}
257void OTodo::setStartDate( const QDate& date ) { 335
336
337void OTodo::setStartDate( const QDate& date )
338{
258 changeOrModify(); 339 changeOrModify();
259 data->start = date; 340 data->start = date;
260} 341}
261void OTodo::setCompletedDate( const QDate& date ) { 342
343
344void OTodo::setCompletedDate( const QDate& date )
345{
262 changeOrModify(); 346 changeOrModify();
263 data->completed = date; 347 data->completed = date;
264} 348}
265void OTodo::setState( const OPimState& state ) { 349
350
351void OTodo::setState( const OPimState& state )
352{
266 changeOrModify(); 353 changeOrModify();
267 if (data->state ) 354 if ( data->state )
268 (*data->state) = state; 355 ( *data->state ) = state;
269 else 356 else
270 data->state = new OPimState( state ); 357 data->state = new OPimState( state );
271} 358}
272void OTodo::setRecurrence( const ORecur& rec) { 359
360
361void OTodo::setRecurrence( const ORecur& rec )
362{
273 changeOrModify(); 363 changeOrModify();
274 if (data->recur ) 364 if ( data->recur )
275 (*data->recur) = rec; 365 ( *data->recur ) = rec;
276 else 366 else
277 data->recur = new ORecur( rec ); 367 data->recur = new ORecur( rec );
278} 368}
279void OTodo::setMaintainer( const OPimMaintainer& pim ) { 369
370
371void OTodo::setMaintainer( const OPimMaintainer& pim )
372{
280 changeOrModify(); 373 changeOrModify();
281 374
282 if (data->maintainer ) 375 if ( data->maintainer )
283 (*data->maintainer) = pim; 376 ( *data->maintainer ) = pim;
284 else 377 else
285 data->maintainer = new OPimMaintainer( pim ); 378 data->maintainer = new OPimMaintainer( pim );
286} 379}
380
381
287bool OTodo::isOverdue( ) 382bool OTodo::isOverdue( )
288{ 383{
289 if( data->hasDate && !data->isCompleted) 384 if ( data->hasDate && !data->isCompleted )
290 return QDate::currentDate() > data->date; 385 return QDate::currentDate() > data->date;
291 return false; 386 return false;
292} 387}
293void OTodo::setProgress(ushort progress ) 388
389
390void OTodo::setProgress( ushort progress )
294{ 391{
295 changeOrModify(); 392 changeOrModify();
296 data->prog = progress; 393 data->prog = progress;
297} 394}
298QString OTodo::toShortText() const { 395
299 return summary(); 396
397QString OTodo::toShortText() const
398{
399 return summary();
300} 400}
401
402
301/*! 403/*!
302 Returns a richt text string 404 Returns a richt text string
303*/ 405*/
304QString OTodo::toRichText() const 406QString OTodo::toRichText() const
305{ 407{
306 QString text; 408 QString text;
307 QStringList catlist; 409 QStringList catlist;
308 410
309 // summary 411 // summary
310 text += "<b><h3><img src=\"todo/TodoList\"> "; 412 text += "<b><h3><img src=\"todo/TodoList\"> ";
311 if ( !summary().isEmpty() ) { 413 if ( !summary().isEmpty() )
312 text += Qtopia::escapeString(summary() ).replace(QRegExp( "[\n]"), "" ); 414 {
313 } 415 text += Qtopia::escapeString( summary() ).replace( QRegExp( "[\n]" ), "" );
314 text += "</h3></b><br><hr><br>"; 416 }
315 417 text += "</h3></b><br><hr><br>";
316 // description 418
317 if( !description().isEmpty() ){ 419 // description
318 text += "<b>" + QObject::tr( "Description:" ) + "</b><br>"; 420 if ( !description().isEmpty() )
319 text += Qtopia::escapeString(description() ).replace(QRegExp( "[\n]"), "<br>" ) + "<br>"; 421 {
320 } 422 text += "<b>" + QObject::tr( "Description:" ) + "</b><br>";
321 423 text += Qtopia::escapeString( description() ).replace( QRegExp( "[\n]" ), "<br>" ) + "<br>";
322 // priority 424 }
323 int priorityval = priority(); 425
324 text += "<b>" + QObject::tr( "Priority:") +" </b><img src=\"todo/priority" + 426 // priority
325 QString::number( priorityval ) + "\"> "; 427 int priorityval = priority();
326 428 text += "<b>" + QObject::tr( "Priority:" ) + " </b><img src=\"todo/priority" +
327 switch ( priorityval ) 429 QString::number( priorityval ) + "\"> ";
328 { 430
431 switch ( priorityval )
432 {
329 case 1 : text += QObject::tr( "Very high" ); 433 case 1 : text += QObject::tr( "Very high" );
330 break; 434 break;
331 case 2 : text += QObject::tr( "High" ); 435 case 2 : text += QObject::tr( "High" );
@@ -336,104 +440,140 @@ QString OTodo::toRichText() const
336 break; 440 break;
337 case 5 : text += QObject::tr( "Very low" ); 441 case 5 : text += QObject::tr( "Very low" );
338 break; 442 break;
339 }; 443 };
340 text += "<br>"; 444 text += "<br>";
341 445
342 // progress 446 // progress
343 text += "<b>" + QObject::tr( "Progress:") + " </b>" 447 text += "<b>" + QObject::tr( "Progress:" ) + " </b>"
344 + QString::number( progress() ) + " %<br>"; 448 + QString::number( progress() ) + " %<br>";
345 449
346 // due date 450 // due date
347 if (hasDueDate() ){ 451 if ( hasDueDate() )
348 QDate dd = dueDate(); 452 {
349 int off = QDate::currentDate().daysTo( dd ); 453 QDate dd = dueDate();
350 454 int off = QDate::currentDate().daysTo( dd );
351 text += "<b>" + QObject::tr( "Deadline:" ) + " </b><font color=\""; 455
352 if ( off < 0 ) 456 text += "<b>" + QObject::tr( "Deadline:" ) + " </b><font color=\"";
353 text += "#FF0000"; 457 if ( off < 0 )
354 else if ( off == 0 ) 458 text += "#FF0000";
355 text += "#FFFF00"; 459 else if ( off == 0 )
356 else if ( off > 0 ) 460 text += "#FFFF00";
357 text += "#00FF00"; 461 else if ( off > 0 )
358 462 text += "#00FF00";
359 text += "\">" + dd.toString() + "</font><br>"; 463
360 } 464 text += "\">" + dd.toString() + "</font><br>";
361 465 }
362 // categories 466
363 text += "<b>" + QObject::tr( "Category:") + "</b> "; 467 // categories
364 text += categoryNames( "Todo List" ).join(", "); 468 text += "<b>" + QObject::tr( "Category:" ) + "</b> ";
365 text += "<br>"; 469 text += categoryNames( "Todo List" ).join( ", " );
366 470 text += "<br>";
367 return text; 471
368} 472 return text;
369bool OTodo::hasNotifiers()const { 473}
370 if (!data->notifiers) return false; 474
475
476bool OTodo::hasNotifiers() const
477{
478 if ( !data->notifiers ) return false;
371 return !data->notifiers->isEmpty(); 479 return !data->notifiers->isEmpty();
372} 480}
373OPimNotifyManager& OTodo::notifiers() { 481
374 if (!data->notifiers ) 482
483OPimNotifyManager& OTodo::notifiers()
484{
485 if ( !data->notifiers )
375 data->notifiers = new OPimNotifyManager; 486 data->notifiers = new OPimNotifyManager;
376 return (*data->notifiers); 487 return ( *data->notifiers );
377} 488}
378const OPimNotifyManager& OTodo::notifiers()const{ 489
379 if (!data->notifiers ) 490
491const OPimNotifyManager& OTodo::notifiers() const
492{
493 if ( !data->notifiers )
380 data->notifiers = new OPimNotifyManager; 494 data->notifiers = new OPimNotifyManager;
381 495
382 return (*data->notifiers); 496 return ( *data->notifiers );
383} 497}
384 498
385bool OTodo::operator<( const OTodo &toDoEvent )const{ 499
386 if( !hasDueDate() && !toDoEvent.hasDueDate() ) return true; 500bool OTodo::operator<( const OTodo &toDoEvent ) const
387 if( !hasDueDate() && toDoEvent.hasDueDate() ) return false; 501{
388 if( hasDueDate() && toDoEvent.hasDueDate() ){ 502 if ( !hasDueDate() && !toDoEvent.hasDueDate() ) return true;
389 if( dueDate() == toDoEvent.dueDate() ){ // let's the priority decide 503 if ( !hasDueDate() && toDoEvent.hasDueDate() ) return false;
390 return priority() < toDoEvent.priority(); 504 if ( hasDueDate() && toDoEvent.hasDueDate() )
391 }else{ 505 {
392 return dueDate() < toDoEvent.dueDate(); 506 if ( dueDate() == toDoEvent.dueDate() )
393 } 507 { // let's the priority decide
508 return priority() < toDoEvent.priority();
509 }
510 else
511 {
512 return dueDate() < toDoEvent.dueDate();
513 }
394 } 514 }
395 return false; 515 return false;
396} 516}
397bool OTodo::operator<=(const OTodo &toDoEvent )const 517
518
519bool OTodo::operator<=( const OTodo &toDoEvent ) const
398{ 520{
399 if( !hasDueDate() && !toDoEvent.hasDueDate() ) return true; 521 if ( !hasDueDate() && !toDoEvent.hasDueDate() ) return true;
400 if( !hasDueDate() && toDoEvent.hasDueDate() ) return true; 522 if ( !hasDueDate() && toDoEvent.hasDueDate() ) return true;
401 if( hasDueDate() && toDoEvent.hasDueDate() ){ 523 if ( hasDueDate() && toDoEvent.hasDueDate() )
402 if( dueDate() == toDoEvent.dueDate() ){ // let's the priority decide 524 {
403 return priority() <= toDoEvent.priority(); 525 if ( dueDate() == toDoEvent.dueDate() )
404 }else{ 526 { // let's the priority decide
405 return dueDate() <= toDoEvent.dueDate(); 527 return priority() <= toDoEvent.priority();
406 } 528 }
529 else
530 {
531 return dueDate() <= toDoEvent.dueDate();
532 }
407 } 533 }
408 return true; 534 return true;
409} 535}
410bool OTodo::operator>(const OTodo &toDoEvent )const 536
537
538bool OTodo::operator>( const OTodo &toDoEvent ) const
411{ 539{
412 if( !hasDueDate() && !toDoEvent.hasDueDate() ) return false; 540 if ( !hasDueDate() && !toDoEvent.hasDueDate() ) return false;
413 if( !hasDueDate() && toDoEvent.hasDueDate() ) return false; 541 if ( !hasDueDate() && toDoEvent.hasDueDate() ) return false;
414 if( hasDueDate() && toDoEvent.hasDueDate() ){ 542 if ( hasDueDate() && toDoEvent.hasDueDate() )
415 if( dueDate() == toDoEvent.dueDate() ){ // let's the priority decide 543 {
416 return priority() > toDoEvent.priority(); 544 if ( dueDate() == toDoEvent.dueDate() )
417 }else{ 545 { // let's the priority decide
418 return dueDate() > toDoEvent.dueDate(); 546 return priority() > toDoEvent.priority();
419 } 547 }
548 else
549 {
550 return dueDate() > toDoEvent.dueDate();
551 }
420 } 552 }
421 return false; 553 return false;
422} 554}
423bool OTodo::operator>=(const OTodo &toDoEvent )const 555
556
557bool OTodo::operator>=( const OTodo &toDoEvent ) const
424{ 558{
425 if( !hasDueDate() && !toDoEvent.hasDueDate() ) return true; 559 if ( !hasDueDate() && !toDoEvent.hasDueDate() ) return true;
426 if( !hasDueDate() && toDoEvent.hasDueDate() ) return false; 560 if ( !hasDueDate() && toDoEvent.hasDueDate() ) return false;
427 if( hasDueDate() && toDoEvent.hasDueDate() ){ 561 if ( hasDueDate() && toDoEvent.hasDueDate() )
428 if( dueDate() == toDoEvent.dueDate() ){ // let's the priority decide 562 {
429 return priority() > toDoEvent.priority(); 563 if ( dueDate() == toDoEvent.dueDate() )
430 }else{ 564 { // let's the priority decide
431 return dueDate() > toDoEvent.dueDate(); 565 return priority() > toDoEvent.priority();
432 } 566 }
567 else
568 {
569 return dueDate() > toDoEvent.dueDate();
570 }
433 } 571 }
434 return true; 572 return true;
435} 573}
436bool OTodo::operator==(const OTodo &toDoEvent )const 574
575
576bool OTodo::operator==( const OTodo &toDoEvent ) const
437{ 577{
438 if ( data->priority != toDoEvent.data->priority ) return false; 578 if ( data->priority != toDoEvent.data->priority ) return false;
439 if ( data->priority != toDoEvent.data->prog ) return false; 579 if ( data->priority != toDoEvent.data->prog ) return false;
@@ -442,23 +582,29 @@ bool OTodo::operator==(const OTodo &toDoEvent )const
442 if ( data->date != toDoEvent.data->date ) return false; 582 if ( data->date != toDoEvent.data->date ) return false;
443 if ( data->sum != toDoEvent.data->sum ) return false; 583 if ( data->sum != toDoEvent.data->sum ) return false;
444 if ( data->desc != toDoEvent.data->desc ) return false; 584 if ( data->desc != toDoEvent.data->desc ) return false;
445 if ( data->maintainer != toDoEvent.data->maintainer ) 585 if ( data->maintainer != toDoEvent.data->maintainer )
446 return false; 586 return false;
447 587
448 return OPimRecord::operator==( toDoEvent ); 588 return OPimRecord::operator==( toDoEvent );
449} 589}
450void OTodo::deref() {
451 590
452// qWarning("deref in ToDoEvent"); 591
453 if ( data->deref() ) { 592void OTodo::deref()
454// qWarning("deleting"); 593{
594
595 // qWarning("deref in ToDoEvent");
596 if ( data->deref() )
597 {
598 // qWarning("deleting");
455 delete data; 599 delete data;
456 data= 0; 600 data = 0;
457 } 601 }
458} 602}
459OTodo &OTodo::operator=(const OTodo &item ) 603
604
605OTodo &OTodo::operator=( const OTodo &item )
460{ 606{
461 if ( this == &item ) return *this; 607 if ( this == &item ) return * this;
462 608
463 OPimRecord::operator=( item ); 609 OPimRecord::operator=( item );
464 //qWarning("operator= ref "); 610 //qWarning("operator= ref ");
@@ -469,21 +615,23 @@ OTodo &OTodo::operator=(const OTodo &item )
469 return *this; 615 return *this;
470} 616}
471 617
472QMap<int, QString> OTodo::toMap() const { 618
619QMap<int, QString> OTodo::toMap() const
620{
473 QMap<int, QString> map; 621 QMap<int, QString> map;
474 622
475 map.insert( Uid, QString::number( uid() ) ); 623 map.insert( Uid, QString::number( uid() ) );
476 map.insert( Category, idsToString( categories() ) ); 624 map.insert( Category, idsToString( categories() ) );
477 map.insert( HasDate, QString::number( data->hasDate ) ); 625 map.insert( HasDate, QString::number( data->hasDate ) );
478 map.insert( Completed, QString::number( data->isCompleted ) ); 626 map.insert( Completed, QString::number( data->isCompleted ) );
479 map.insert( Description, data->desc ); 627 map.insert( Description, data->desc );
480 map.insert( Summary, data->sum ); 628 map.insert( Summary, data->sum );
481 map.insert( Priority, QString::number( data->priority ) ); 629 map.insert( Priority, QString::number( data->priority ) );
482 map.insert( DateDay, QString::number( data->date.day() ) ); 630 map.insert( DateDay, QString::number( data->date.day() ) );
483 map.insert( DateMonth, QString::number( data->date.month() ) ); 631 map.insert( DateMonth, QString::number( data->date.month() ) );
484 map.insert( DateYear, QString::number( data->date.year() ) ); 632 map.insert( DateYear, QString::number( data->date.year() ) );
485 map.insert( Progress, QString::number( data->prog ) ); 633 map.insert( Progress, QString::number( data->prog ) );
486// map.insert( CrossReference, crossToString() ); 634 // map.insert( CrossReference, crossToString() );
487 /* FIXME!!! map.insert( State, ); 635 /* FIXME!!! map.insert( State, );
488 map.insert( Recurrence, ); 636 map.insert( Recurrence, );
489 map.insert( Reminders, ); 637 map.insert( Reminders, );
@@ -492,26 +640,32 @@ QMap<int, QString> OTodo::toMap() const {
492 return map; 640 return map;
493} 641}
494 642
643
495/** 644/**
496 * change or modify looks at the ref count and either 645 * change or modify looks at the ref count and either
497 * creates a new QShared Object or it can modify it 646 * creates a new QShared Object or it can modify it
498 * right in place 647 * right in place
499 */ 648 */
500void OTodo::changeOrModify() { 649void OTodo::changeOrModify()
501 if ( data->count != 1 ) { 650{
502 qWarning("changeOrModify"); 651 if ( data->count != 1 )
652 {
653 qWarning( "changeOrModify" );
503 data->deref(); 654 data->deref();
504 OTodoData* d2 = new OTodoData(); 655 OTodoData* d2 = new OTodoData();
505 copy(data, d2 ); 656 copy( data, d2 );
506 data = d2; 657 data = d2;
507 } 658 }
508} 659}
660
661
509// WATCHOUT 662// WATCHOUT
510/* 663/*
511 * if you add something to the Data struct 664 * if you add something to the Data struct
512 * be sure to copy it here 665 * be sure to copy it here
513 */ 666 */
514void OTodo::copy( OTodoData* src, OTodoData* dest ) { 667void OTodo::copy( OTodoData* src, OTodoData* dest )
668{
515 dest->date = src->date; 669 dest->date = src->date;
516 dest->isCompleted = src->isCompleted; 670 dest->isCompleted = src->isCompleted;
517 dest->hasDate = src->hasDate; 671 dest->hasDate = src->hasDate;
@@ -521,29 +675,37 @@ void OTodo::copy( OTodoData* src, OTodoData* dest ) {
521 dest->extra = src->extra; 675 dest->extra = src->extra;
522 dest->prog = src->prog; 676 dest->prog = src->prog;
523 677
524 if (src->state ) 678 if ( src->state )
525 dest->state = new OPimState( *src->state ); 679 dest->state = new OPimState( *src->state );
526 680
527 if (src->recur ) 681 if ( src->recur )
528 dest->recur = new ORecur( *src->recur ); 682 dest->recur = new ORecur( *src->recur );
529 683
530 if (src->maintainer ) 684 if ( src->maintainer )
531 dest->maintainer = new OPimMaintainer( *src->maintainer ) 685 dest->maintainer = new OPimMaintainer( *src->maintainer )
532 ; 686 ;
533 dest->start = src->start; 687 dest->start = src->start;
534 dest->completed = src->completed; 688 dest->completed = src->completed;
535 689
536 if (src->notifiers ) 690 if ( src->notifiers )
537 dest->notifiers = new OPimNotifyManager( *src->notifiers ); 691 dest->notifiers = new OPimNotifyManager( *src->notifiers );
538} 692}
539QString OTodo::type() const { 693
540 return QString::fromLatin1("OTodo"); 694
695QString OTodo::type() const
696{
697 return QString::fromLatin1( "OTodo" );
541} 698}
542QString OTodo::recordField(int /*id*/ )const { 699
700
701QString OTodo::recordField( int /*id*/ ) const
702{
543 return QString::null; 703 return QString::null;
544} 704}
545 705
546int OTodo::rtti(){ 706
707int OTodo::rtti()
708{
547 return OPimResolver::TodoList; 709 return OPimResolver::TodoList;
548} 710}
549 711