summaryrefslogtreecommitdiff
path: root/libopie2/opiepim/private/opimcontactsortvector.cpp
authorzecke <zecke>2004-11-18 21:46:17 (UTC)
committer zecke <zecke>2004-11-18 21:46:17 (UTC)
commit41fa1c196965f17f9748f835d90c307b7e594883 (patch) (side-by-side diff)
tree1ea8a2cfe5bfb71f5c9456c7216dc5ff035dd811 /libopie2/opiepim/private/opimcontactsortvector.cpp
parent7484344ff5be1f7c54e51715776d0e3cadeb1ed0 (diff)
downloadopie-41fa1c196965f17f9748f835d90c307b7e594883.zip
opie-41fa1c196965f17f9748f835d90c307b7e594883.tar.gz
opie-41fa1c196965f17f9748f835d90c307b7e594883.tar.bz2
Add generic sorting implementation based on QVector
for Contact and Todo
Diffstat (limited to 'libopie2/opiepim/private/opimcontactsortvector.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/private/opimcontactsortvector.cpp104
1 files changed, 104 insertions, 0 deletions
diff --git a/libopie2/opiepim/private/opimcontactsortvector.cpp b/libopie2/opiepim/private/opimcontactsortvector.cpp
new file mode 100644
index 0000000..9e186fe
--- a/dev/null
+++ b/libopie2/opiepim/private/opimcontactsortvector.cpp
@@ -0,0 +1,104 @@
+/*
+ This file is part of the Opie Project
+ Copyright (C) 2004 Holger Freyther <freyther@handhelds.org>
+ =. 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 "opimcontactsortvector.h"
+#include <opie2/ocontactaccess.h>
+
+namespace Opie {
+namespace Internal {
+OPimContactSortVector::OPimContactSortVector( uint size, bool asc, int sort )
+ : OPimSortVector<OPimContact>( size, asc, sort ) {}
+
+int OPimContactSortVector::compareItems( const OPimContact& left,
+ const OPimContact& right ) {
+ if ( left.uid() == right.uid() )
+ return 0;
+
+ bool soTitle, soSummary, soFirstName, soMiddleName, soSuffix, soEmail,
+ soNick, soAnni, soBirth, soGender;
+ soTitle = soSummary = soFirstName = soMiddleName = soSuffix = soEmail =
+ soNick = soAnni = soBirth = soGender = false;
+ int ret = 0;
+ bool asc = sortAscending();
+
+ switch( sortOrder() ) {
+ case OPimContactAccess::SortSummary:
+ ret = testString( left.fileAs(), right.fileAs() );
+ soSummary = true;
+ break;
+ case OPimContactAccess::SortTitle:
+ ret = testString( left.title(), right.title() );
+ soTitle = true;
+ break;
+ case OPimContactAccess::SortFirstName:
+ ret = testString( left.firstName(), right.firstName() );
+ soFirstName = true;
+ break;
+ case OPimContactAccess::SortMiddleName:
+ ret = testString( left.middleName(), right.middleName() );
+ soMiddleName = true;
+ break;
+ case OPimContactAccess::SortSuffix:
+ ret = testString( left.suffix(), right.suffix() );
+ soSuffix = true;
+ break;
+ case OPimContactAccess::SortEmail:
+ ret = testString( left.defaultEmail(), right.defaultEmail() );
+ soEmail = true;
+ break;
+ case OPimContactAccess::SortNickname:
+ ret = testString( left.nickname(), right.nickname() );
+ soNick = true;
+ break;
+ case OPimContactAccess::SortAnniversary:
+ ret = testDate( left.anniversary(), right.anniversary() );
+ soAnni = true;
+ break;
+ case OPimContactAccess::SortByDate:
+ case OPimContactAccess::SortBirthday:
+ ret = testDate( left.birthday(), right.birthday() );
+ soBirth = true;
+ break;
+ case OPimContactAccess::SortGender:
+ ret = testString( left.gender(), right.gender() );
+ soGender = true;
+ break;
+ }
+
+ /* 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;
+}
+
+}
+}