CVS commit by tokoe:
Add new class KABC::SortMode which is used by KABC::AddresseeList to allow
advanced sorting (e.g. multiple sorting rules).
A sortmode.cpp 1.1 [LGPL (v2+)]
A sortmode.h 1.1 [LGPL (v2+)]
M +3 -2 Makefile.am 1.105
M +18 -2 addresseelist.cpp 1.10
M +7 -0 addresseelist.h 1.10
M +6 -6 scripts/addressee.src.cpp 1.59
M +8 -7 scripts/addressee.src.h 1.45
--- kdelibs/kabc/Makefile.am #1.104:1.105
@@ -35,5 +35,6 @@
vcardformatimpl.cpp vcardformatplugin.cpp ldifconverter.cpp addresslineedit.cpp \
ldapclient.cpp addresseelist.cpp vcardtool.cpp addresseehelper.cpp \
- addresseehelper.skel lock.cpp locknull.cpp ldif.cpp ldapurl.cpp ldapconfigwidget.cpp
+ addresseehelper.skel lock.cpp locknull.cpp ldif.cpp ldapurl.cpp ldapconfigwidget.cpp \
+ sortmode.cpp
@@ -46,5 +47,5 @@
vcardconverter.h vcardformat.h vcardformatplugin.h ldifconverter.h \
addresslineedit.h ldapclient.h addresseelist.h lock.h locknull.h ldif.h \
- ldapurl.h ldapconfigwidget.h
+ ldapurl.h ldapconfigwidget.h sortmode.h
METASOURCES = AUTO
--- kdelibs/kabc/addresseelist.cpp #1.9:1.10
@@ -23,5 +23,7 @@
#include "addresseelist.h"
+
#include "field.h"
+#include "sortmode.h"
using namespace KABC;
@@ -229,7 +231,21 @@ void AddresseeList::sortByField( Field *
return;
- KABC::Addressee::setSortKey( sActiveField );
+ KABC::FieldSortMode *mode = new KABC::FieldSortMode( sActiveField );
+
+ KABC::Addressee::setSortMode( mode );
qHeapSort( *this );
- KABC::Addressee::setSortKey( 0 );
+ KABC::Addressee::setSortMode( 0 );
+
+ delete mode;
+}
+
+void AddresseeList::sortByMode( SortMode *mode )
+{
+ if ( count() == 0 )
+ return;
+
+ KABC::Addressee::setSortMode( mode );
+ qHeapSort( *this );
+ KABC::Addressee::setSortMode( 0 );
}
--- kdelibs/kabc/addresseelist.h #1.9:1.10
@@ -30,4 +30,5 @@ namespace KABC {
class Field;
+class SortField;
/**
@@ -148,4 +149,10 @@ class KABC_EXPORT AddresseeList : public
/**
+ * Sorts this list by a specific sorting mode.
+ * @param mode pointer to the sorting mode object to be sorted by
+ */
+ void sortByMode( SortMode *mode = 0 );
+
+ /**
* Sorts this list by its active sorting criterion. This normally is the
* criterion of the last sortBy operation or FormattedName if up
--- kdelibs/kabc/scripts/addressee.src.cpp #1.58:1.59
@@ -30,4 +30,5 @@
#include "field.h"
#include "resource.h"
+#include "sortmode.h"
#include "addressee.h"
@@ -40,5 +41,5 @@ template
static bool listEquals( const QValueList&, const QValueList& );
-KABC::Field *Addressee::mSortField = 0;
+KABC::SortMode *Addressee::mSortMode = 0;
struct Addressee::AddresseeData : public KShared
@@ -895,16 +896,15 @@ bool Addressee::changed() const
}
-void Addressee::setSortKey( KABC::Field *field )
+void Addressee::setSortMode( KABC::SortMode *mode )
{
- mSortField = field;
+ mSortMode = mode;
}
bool Addressee::operator< ( const Addressee &addr )
{
- if ( !mSortField )
+ if ( !mSortMode )
return false;
else
- return ( QString::localeAwareCompare( mSortField->value( *this ).lower(),
- mSortField->value( addr ).lower() ) < 0 );
+ return mSortMode->lesser( *this, addr );
}
--- kdelibs/kabc/scripts/addressee.src.h #1.44:1.45
@@ -44,4 +44,5 @@ namespace KABC {
class Resource;
class Field;
+class SortMode;
/**
@@ -370,5 +371,5 @@ class KABC_EXPORT Addressee
bool changed() const;
- static void setSortKey( KABC::Field *field );
+ static void setSortMode( KABC::SortMode *mode );
bool operator< ( const Addressee &addr );
@@ -383,5 +384,5 @@ class KABC_EXPORT Addressee
static AddresseeData* shared_null;
static AddresseeData* makeSharedNull();
- static KABC::Field *mSortField;
+ static KABC::SortMode *mSortMode;
};