-rw-r--r-- | libopie2/opiepim/backend/otodoaccessbackend.h | 2 | ||||
-rw-r--r-- | libopie2/opiepim/backend/otodoaccessxml.cpp | 145 | ||||
-rw-r--r-- | libopie2/opiepim/backend/otodoaccessxml.h | 2 | ||||
-rw-r--r-- | libopie2/opiepim/core/otodoaccess.cpp | 8 | ||||
-rw-r--r-- | libopie2/opiepim/core/otodoaccess.h | 16 | ||||
-rw-r--r-- | libopie2/opiepim/orecordlist.h | 7 | ||||
-rw-r--r-- | libopie2/opiepim/otodo.cpp | 1 |
7 files changed, 178 insertions, 3 deletions
diff --git a/libopie2/opiepim/backend/otodoaccessbackend.h b/libopie2/opiepim/backend/otodoaccessbackend.h index ebe2189..3bad6b7 100644 --- a/libopie2/opiepim/backend/otodoaccessbackend.h +++ b/libopie2/opiepim/backend/otodoaccessbackend.h | |||
@@ -14,2 +14,4 @@ public: | |||
14 | virtual QArray<int> overDue() = 0; | 14 | virtual QArray<int> overDue() = 0; |
15 | virtual QArray<int> sorted( bool asc, int sortOrder, int sortFilter, | ||
16 | int cat ) = 0; | ||
15 | 17 | ||
diff --git a/libopie2/opiepim/backend/otodoaccessxml.cpp b/libopie2/opiepim/backend/otodoaccessxml.cpp index 5fe733c..692483e 100644 --- a/libopie2/opiepim/backend/otodoaccessxml.cpp +++ b/libopie2/opiepim/backend/otodoaccessxml.cpp | |||
@@ -1,2 +1,3 @@ | |||
1 | #include <qfile.h> | 1 | #include <qfile.h> |
2 | #include <qvector.h> | ||
2 | 3 | ||
@@ -258,2 +259,3 @@ OTodo OTodoAccessXML::todo( QAsciiDict<int>* dict, Opie::XMLElement* element)con | |||
258 | case OTodo::Priority: | 259 | case OTodo::Priority: |
260 | qWarning("ParsePriority " + it.data() ); | ||
259 | ev.setPriority( it.data().toInt() ); | 261 | ev.setPriority( it.data().toInt() ); |
@@ -366 +368,144 @@ QString OTodoAccessXML::toString( const QArray<int>& ints ) const { | |||
366 | } | 368 | } |
369 | |||
370 | /* internal class for sorting */ | ||
371 | |||
372 | struct OTodoXMLContainer { | ||
373 | OTodo todo; | ||
374 | }; | ||
375 | /* | ||
376 | * Returns: | ||
377 | * 0 if item1 == item2 | ||
378 | * | ||
379 | * non-zero if item1 != item2 | ||
380 | * | ||
381 | * This function returns int rather than bool so that reimplementations | ||
382 | * can return one of three values and use it to sort by: | ||
383 | * | ||
384 | * 0 if item1 == item2 | ||
385 | * | ||
386 | * > 0 (positive integer) if item1 > item2 | ||
387 | * | ||
388 | * < 0 (negative integer) if item1 < item2 | ||
389 | * | ||
390 | */ | ||
391 | class OTodoXMLVector : public QVector<OTodoXMLContainer> { | ||
392 | public: | ||
393 | OTodoXMLVector(int size, bool asc, int sort) | ||
394 | : QVector<OTodoXMLContainer>( size ) | ||
395 | { | ||
396 | setAutoDelete( true ); | ||
397 | m_asc = asc; | ||
398 | m_sort = sort; | ||
399 | } | ||
400 | /* return the summary/description */ | ||
401 | QString string( const OTodo& todo) { | ||
402 | return todo.summary().isEmpty() ? | ||
403 | todo.description().left(20 ) : | ||
404 | todo.summary(); | ||
405 | } | ||
406 | /** | ||
407 | * we take the sortorder( switch on it ) | ||
408 | * | ||
409 | */ | ||
410 | int compareItems( Item d1, Item d2 ) { | ||
411 | qWarning("compare items"); | ||
412 | int ret =0; | ||
413 | OTodoXMLContainer* con1 = (OTodoXMLContainer*)d1; | ||
414 | OTodoXMLContainer* con2 = (OTodoXMLContainer*)d2; | ||
415 | |||
416 | /* same item */ | ||
417 | if ( con1->todo.uid() == con2->todo.uid() ) | ||
418 | return 0; | ||
419 | qWarning("m_sort %d", m_sort ); | ||
420 | |||
421 | switch ( m_sort ) { | ||
422 | /* completed */ | ||
423 | case 0: { | ||
424 | ret = 0; | ||
425 | if ( con1->todo.isCompleted() ) ret++; | ||
426 | if ( con2->todo.isCompleted() ) ret--; | ||
427 | break; | ||
428 | } | ||
429 | /* priority */ | ||
430 | case 1: { | ||
431 | ret = con1->todo.priority() - con2->todo.priority(); | ||
432 | qWarning(" priority %d %d %d", ret, | ||
433 | con1->todo.priority(), | ||
434 | con2->todo.priority() | ||
435 | ); | ||
436 | break; | ||
437 | } | ||
438 | /* description */ | ||
439 | case 2: { | ||
440 | QString str1 = string( con1->todo ); | ||
441 | QString str2 = string( con2->todo ); | ||
442 | ret = QString::compare( str1, str2 ); | ||
443 | break; | ||
444 | } | ||
445 | /* deadline */ | ||
446 | case 3: { | ||
447 | /* either bot got a dueDate | ||
448 | * or one of them got one | ||
449 | */ | ||
450 | if ( con1->todo.hasDueDate() && | ||
451 | con2->todo.hasDueDate() ) | ||
452 | ret = con1->todo.dueDate().daysTo( con2->todo.dueDate() ); | ||
453 | else if ( con1->todo.hasDueDate() ) | ||
454 | ret = -1; | ||
455 | else if ( con2->todo.hasDueDate() ) | ||
456 | ret = 0; | ||
457 | break; | ||
458 | } | ||
459 | default: | ||
460 | ret = 0; | ||
461 | break; | ||
462 | }; | ||
463 | |||
464 | /* twist it we're not ascending*/ | ||
465 | if (!m_asc) | ||
466 | ret = ret * -1; | ||
467 | return ret; | ||
468 | } | ||
469 | private: | ||
470 | bool m_asc; | ||
471 | int m_sort; | ||
472 | |||
473 | }; | ||
474 | |||
475 | QArray<int> OTodoAccessXML::sorted( bool asc, int sortOrder, | ||
476 | int sortFilter, int cat ) { | ||
477 | OTodoXMLVector vector(m_events.count(), asc,sortOrder ); | ||
478 | QMap<int, OTodo>::Iterator it; | ||
479 | int item = 0; | ||
480 | |||
481 | bool bCat = sortFilter & 1 ? true : false; | ||
482 | bool bOver = sortFilter & 0 ? true : false; | ||
483 | bool bOnly = split & 2 ? true : false; | ||
484 | for ( it = m_events.begin(); it != m_events.end(); ++it ) { | ||
485 | |||
486 | /* show category */ | ||
487 | if ( bCat ) | ||
488 | if (!(*it).categories().contains( cat ) ) | ||
489 | continue; | ||
490 | /* isOverdue but we should not show overdue */ | ||
491 | if ( (*it).isOverdue() && ( !bOver || !bOnly ) ) | ||
492 | continue; | ||
493 | if ( !(*it).isOverdue() && bOnly ) | ||
494 | continue; | ||
495 | |||
496 | |||
497 | OTodoXMLContainer* con = new OTodoXMLContainer(); | ||
498 | con->todo = (*it); | ||
499 | vector.insert(item, con ); | ||
500 | item++; | ||
501 | } | ||
502 | vector.resize( item ); | ||
503 | /* sort it now */ | ||
504 | vector.sort(); | ||
505 | /* now get the uids */ | ||
506 | QArray<int> array( vector.count() ); | ||
507 | for (uint i= 0; i < vector.count(); i++ ) { | ||
508 | array[i] = ( vector.at(i) )->todo.uid(); | ||
509 | } | ||
510 | return array; | ||
511 | }; | ||
diff --git a/libopie2/opiepim/backend/otodoaccessxml.h b/libopie2/opiepim/backend/otodoaccessxml.h index be9109d..6886bab 100644 --- a/libopie2/opiepim/backend/otodoaccessxml.h +++ b/libopie2/opiepim/backend/otodoaccessxml.h | |||
@@ -38,2 +38,4 @@ public: | |||
38 | QArray<int> overDue(); | 38 | QArray<int> overDue(); |
39 | QArray<int> sorted( bool asc, int sortOrder, | ||
40 | int sortFilter, int cat ); | ||
39 | private: | 41 | private: |
diff --git a/libopie2/opiepim/core/otodoaccess.cpp b/libopie2/opiepim/core/otodoaccess.cpp index 8ec09bc..f51da29 100644 --- a/libopie2/opiepim/core/otodoaccess.cpp +++ b/libopie2/opiepim/core/otodoaccess.cpp | |||
@@ -70,2 +70,8 @@ void OTodoAccess::delAlarm( int uid) { | |||
70 | } | 70 | } |
71 | 71 | /* sort order */ | |
72 | OTodoAccess::List OTodoAccess::sorted( bool ascending, int sort,int filter, int cat ) { | ||
73 | QArray<int> ints = m_todoBackEnd->sorted( ascending, sort, | ||
74 | filter, cat ); | ||
75 | OTodoAccess::List list( ints, this ); | ||
76 | return list; | ||
77 | } | ||
diff --git a/libopie2/opiepim/core/otodoaccess.h b/libopie2/opiepim/core/otodoaccess.h index c43efe9..12997aa 100644 --- a/libopie2/opiepim/core/otodoaccess.h +++ b/libopie2/opiepim/core/otodoaccess.h | |||
@@ -19,2 +19,9 @@ class OTodoAccess : public QObject, public OPimAccessTemplate<OTodo> { | |||
19 | public: | 19 | public: |
20 | enum SortOrder { Completed = 0, | ||
21 | Priority, | ||
22 | Description, | ||
23 | Deadline }; | ||
24 | enum SortFilter{ ShowOverdue = 0, | ||
25 | Category =1, | ||
26 | OnlyOverDue= 2 }; | ||
20 | /** | 27 | /** |
@@ -22,3 +29,3 @@ public: | |||
22 | * the default resource will be | 29 | * the default resource will be |
23 | * icked up | 30 | * picked up |
24 | */ | 31 | */ |
@@ -50,2 +57,8 @@ public: | |||
50 | List overDue(); | 57 | List overDue(); |
58 | |||
59 | /** | ||
60 | * | ||
61 | */ | ||
62 | List sorted( bool ascending, int sortOrder, int sortFilter, int cat ); | ||
63 | |||
51 | /** | 64 | /** |
@@ -73,2 +86,3 @@ signals: | |||
73 | private: | 86 | private: |
87 | int m_cat; | ||
74 | OTodoAccessBackend* m_todoBackEnd; | 88 | OTodoAccessBackend* m_todoBackEnd; |
diff --git a/libopie2/opiepim/orecordlist.h b/libopie2/opiepim/orecordlist.h index c63d813..1fd0741 100644 --- a/libopie2/opiepim/orecordlist.h +++ b/libopie2/opiepim/orecordlist.h | |||
@@ -109,2 +109,3 @@ public: | |||
109 | 109 | ||
110 | T operator[]( uint i ); | ||
110 | // FIXME implemenent remove | 111 | // FIXME implemenent remove |
@@ -148,3 +149,3 @@ ORecordListIterator<T> &ORecordListIterator<T>::operator=( const ORecordListIter | |||
148 | m_end = it.m_end; | 149 | m_end = it.m_end; |
149 | // m_record = it.m_record; | 150 | m_record = it.m_record; |
150 | 151 | ||
@@ -254,2 +255,6 @@ return m_ids.count(); | |||
254 | } | 255 | } |
256 | template <class T> | ||
257 | T ORecordList<T>::operator[]( uint i ) { | ||
258 | return m_acc->find( m_ids[i] ); | ||
259 | } | ||
255 | #endif | 260 | #endif |
diff --git a/libopie2/opiepim/otodo.cpp b/libopie2/opiepim/otodo.cpp index 6dd4c0e..eb9dad3 100644 --- a/libopie2/opiepim/otodo.cpp +++ b/libopie2/opiepim/otodo.cpp | |||
@@ -174,2 +174,3 @@ void OTodo::setPriority(int prio ) | |||
174 | { | 174 | { |
175 | qWarning("set priority %d", prio); | ||
175 | changeOrModify(); | 176 | changeOrModify(); |