-rw-r--r-- | libopie2/opiepim/private/opimeventsortvector.cpp | 134 | ||||
-rw-r--r-- | libopie2/opiepim/private/opimeventsortvector.h | 48 | ||||
-rw-r--r-- | libopie2/opiepim/private/opimsortvector.h | 34 | ||||
-rw-r--r-- | libopie2/opiepim/private/opimtodosortvector.cpp | 2 | ||||
-rw-r--r-- | libopie2/opiepim/private/private.pro | 2 |
5 files changed, 220 insertions, 0 deletions
diff --git a/libopie2/opiepim/private/opimeventsortvector.cpp b/libopie2/opiepim/private/opimeventsortvector.cpp new file mode 100644 index 0000000..4220c63 --- a/dev/null +++ b/libopie2/opiepim/private/opimeventsortvector.cpp @@ -0,0 +1,134 @@ +/* + This file is part of the Opie Project + Copyright (C) 2004 Stefan Eilers <stefan@eilers-online.net> + =. Copyright (C) The Opie Team <opie-devel@handhelds.org> + .=l. + .>+-= + _;:, .> :=|. This program is free software; you can +.> <`_, > . <= redistribute it and/or modify it under +:`=1 )Y*s>-.-- : the terms of the GNU Library General Public +.="- .-=="i, .._ License as published by the Free Software + - . .-<_> .<> Foundation; either version 2 of the License, + ._= =} : or (at your option) any later version. + .%`+i> _;_. + .i_,=:_. -<s. This program is distributed in the hope that + + . -:. = it will be useful, but WITHOUT ANY WARRANTY; + : .. .:, . . . without even the implied warranty of + =_ + =;=|` MERCHANTABILITY or FITNESS FOR A + _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU +..}^=.= = ; Library General Public License for more +++= -. .` .: details. + : = ...= . :.=- + -. .:....=;==+<; You should have received a copy of the GNU + -_. . . )=. = Library General Public License along with + -- :-=` this library; see the file COPYING.LIB. + If not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +#include "opimeventsortvector.h" +#include <opie2/ocontactaccess.h> +#include <opie2/opimnotifymanager.h> +#include <opie2/odatebookaccess.h> + +#include <qvaluelist.h> + +namespace Opie { +namespace Internal { + +namespace{ + +inline int testAlarmNotifiers( const OPimNotifyManager& leftnotifiers, const OPimNotifyManager& rightnotifiers ){ + OPimNotifyManager::Alarms left_alarms = leftnotifiers.alarms(); + OPimNotifyManager::Alarms right_alarms = rightnotifiers.alarms(); + + // Well.. How could we compare two lists of alarms? I think we should find the most early datetimes + // and compare them.. (se) + // Find the first alarm of the left list + OPimNotifyManager::Alarms::Iterator it; + QDateTime left_earliest; // This datetime is initialized as invalid!! + for ( it = left_alarms.begin(); it != left_alarms.end(); ++it ){ + if ( !left_earliest.isValid() || left_earliest > (*it).dateTime() ){ + left_earliest = (*it).dateTime(); + } + } + QDateTime right_earliest; // This datetime is initialized as invalid!! + for ( it = right_alarms.begin(); it != right_alarms.end(); ++it ){ + if ( !right_earliest.isValid() || right_earliest > (*it).dateTime() ){ + right_earliest = (*it).dateTime(); + } + } + + int ret; + + // Now compare this found alarms + if ( !left_earliest .isValid() ) ret++; + if ( !right_earliest.isValid() ) ret--; + + if ( left_earliest.isValid() && right_earliest.isValid() ){ + ret += left_earliest < right_earliest ? -1 : 1; + } + + return ret; + +} +} + +OPimEventSortVector::OPimEventSortVector( uint size, bool asc, int sort ) + : OPimSortVector<OPimEvent>( size, asc, sort ) {} + +int OPimEventSortVector::compareItems( const OPimEvent& left, + const OPimEvent& right ) { + if ( left.uid() == right.uid() ) + return 0; + + int ret = 0; + bool asc = sortAscending(); + + switch( sortOrder() ) { + case ODateBookAccess::SortDescription: + ret = testString( left.description(), right.description() ); + break; + case ODateBookAccess::SortLocation: + ret = testString( left.location(), right.location() ); + break; + case ODateBookAccess::SortNote: + ret = testString( left.note(),right.note() ); + break; + case ODateBookAccess::SortStartTime: + ret = testTime( left.startDateTime().time(), right.startDateTime().time() ); + break; + case ODateBookAccess::SortEndTime: + ret = testTime( left.endDateTime().time(), right.endDateTime().time() ); + break; + case ODateBookAccess::SortStartDate: + ret = testDate( left.startDateTime().date(), right.startDateTime().date() ); + break; + case ODateBookAccess::SortEndDate: + ret = testDate( left.endDateTime().date(), right.endDateTime().date() ); + break; + case ODateBookAccess::SortStartDateTime: + ret = testDateTime( left.startDateTime(), right.startDateTime() ); + break; + case ODateBookAccess::SortEndDateTime: + ret = testDateTime( left.endDateTime(), right.endDateTime() ); + break; + case ODateBookAccess::SortAlarmDateTime: + ret = testAlarmNotifiers( left.notifiers(), right.notifiers() ); + break; + default: + odebug << "OpimEventSortVector: Unknown sortOrder: " << sortOrder() << oendl; + } + + /* twist to honor ascending/descending setting as QVector only sorts ascending */ + if ( !asc ) + ret *= -1; + + // Maybe differentiate as in OPimTodoSortVector ### FIXME + // if( ret ) + return ret; +} + +} +} diff --git a/libopie2/opiepim/private/opimeventsortvector.h b/libopie2/opiepim/private/opimeventsortvector.h new file mode 100644 index 0000000..dde26df --- a/dev/null +++ b/libopie2/opiepim/private/opimeventsortvector.h @@ -0,0 +1,48 @@ +/* + This file is part of the Opie Project + Copyright (C) 2004 Stefan Eilers <stefan@eilers-online.net> + =. Copyright (C) The Opie Team <opie-devel@handhelds.org> + .=l. + .>+-= + _;:, .> :=|. This program is free software; you can +.> <`_, > . <= redistribute it and/or modify it under +:`=1 )Y*s>-.-- : the terms of the GNU Library General Public +.="- .-=="i, .._ License as published by the Free Software + - . .-<_> .<> Foundation; either version 2 of the License, + ._= =} : or (at your option) any later version. + .%`+i> _;_. + .i_,=:_. -<s. This program is distributed in the hope that + + . -:. = it will be useful, but WITHOUT ANY WARRANTY; + : .. .:, . . . without even the implied warranty of + =_ + =;=|` MERCHANTABILITY or FITNESS FOR A + _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU +..}^=.= = ; Library General Public License for more +++= -. .` .: details. + : = ...= . :.=- + -. .:....=;==+<; You should have received a copy of the GNU + -_. . . )=. = Library General Public License along with + -- :-=` this library; see the file COPYING.LIB. + If not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +#ifndef OPIM_CONTACT_SORT_VECTOR_H +#define OPIM_CONTACT_SORT_VECTOR_H + +#include <opie2/opimevent.h> +#include <opie2/private/opimsortvector.h> + +namespace Opie { +namespace Internal { +class OPimEventSortVector : public OPimSortVector<OPimEvent> { +public: + OPimEventSortVector( uint size, bool asc, int sort ); +private: + int compareItems( const OPimEvent&, const OPimEvent& ); +}; +} +} + + +#endif diff --git a/libopie2/opiepim/private/opimsortvector.h b/libopie2/opiepim/private/opimsortvector.h index 6c21339..11a40ac 100644 --- a/libopie2/opiepim/private/opimsortvector.h +++ b/libopie2/opiepim/private/opimsortvector.h @@ -53,6 +53,9 @@ public: protected: int testString( const QString&, const QString& )const; int testDate( const QDate&, const QDate& )const; + int testTime( const QTime&, const QTime& )const; + int testDateTime( const QDateTime& left, + const QDateTime& right )const; protected: bool sortAscending()const; int sortOrder()const; @@ -120,6 +123,7 @@ inline int OPimSortVector<T>::testString( const QString& left, return QString::compare( left, right ); } + template<class T> inline int OPimSortVector<T>::testDate( const QDate& left, const QDate& right )const { @@ -132,6 +136,36 @@ inline int OPimSortVector<T>::testDate( const QDate& left, return ret; } + +template<class T> +inline int OPimSortVector<T>::testTime( const QTime& left, + const QTime& right )const { + int ret = 0; + if ( !left .isValid() ) ret++; + if ( !right.isValid() ) ret--; + + if ( left.isValid() && right.isValid() ){ + ret += left < right ? -1 : 1; + } + + return ret; +} + +template<class T> +inline int OPimSortVector<T>::testDateTime( const QDateTime& left, + const QDateTime& right )const { + int ret = 0; + if ( !left .isValid() ) ret++; + if ( !right.isValid() ) ret--; + + if ( left.isValid() && right.isValid() ){ + ret += left < right ? -1 : 1; + } + + return ret; + +} + } } diff --git a/libopie2/opiepim/private/opimtodosortvector.cpp b/libopie2/opiepim/private/opimtodosortvector.cpp index 8d15710..1db20df 100644 --- a/libopie2/opiepim/private/opimtodosortvector.cpp +++ b/libopie2/opiepim/private/opimtodosortvector.cpp @@ -33,6 +33,7 @@ namespace Opie { namespace Internal { +namespace{ inline QString string( const OPimTodo& todo) { return todo.summary().isEmpty() ? todo.description().left(20 ) : @@ -69,6 +70,7 @@ inline int deadline( const OPimTodo& t1, const OPimTodo& t2) { return ret; } +} OPimTodoSortVector::OPimTodoSortVector( uint size, bool asc, int sort ) : OPimSortVector<OPimTodo>( size, asc, sort ) diff --git a/libopie2/opiepim/private/private.pro b/libopie2/opiepim/private/private.pro index 618c2d6..92c24cb 100644 --- a/libopie2/opiepim/private/private.pro +++ b/libopie2/opiepim/private/private.pro @@ -1,9 +1,11 @@ HEADERS += private/vobject_p.h \ private/opimcontactsortvector.h \ + private/opimeventsortvector.h \ private/opimoccurrence_p.h \ private/opimsortvector.h \ private/opimtodosortvector.h SOURCES += private/opimcontactsortvector.cpp \ + private/opimeventsortvector.cpp \ private/opimtodosortvector.cpp |