summaryrefslogtreecommitdiff
path: root/libopie2/opiepim/private
Side-by-side diff
Diffstat (limited to 'libopie2/opiepim/private') (more/less context) (show whitespace changes)
-rw-r--r--libopie2/opiepim/private/opimeventsortvector.cpp134
-rw-r--r--libopie2/opiepim/private/opimeventsortvector.h48
-rw-r--r--libopie2/opiepim/private/opimsortvector.h34
-rw-r--r--libopie2/opiepim/private/opimtodosortvector.cpp2
-rw-r--r--libopie2/opiepim/private/private.pro2
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