summaryrefslogtreecommitdiffstats
path: root/src/corelib/itemmodels/qabstractitemmodel.cpp
diff options
context:
space:
mode:
authorAnton Kudryavtsev <a.kudryavtsev@netris.ru>2016-04-19 18:12:27 +0300
committerAnton Kudryavtsev <a.kudryavtsev@netris.ru>2016-07-02 07:38:00 +0000
commit2185b2f054ddae0fc67b8799b3561c57729f1cd7 (patch)
tree860323204316904ee7e413a01ab8392379cc4e87 /src/corelib/itemmodels/qabstractitemmodel.cpp
parent98526119c6940e9923655242c181283081efb694 (diff)
ItemModel: Extract Method isVariantLessThan()
As noted in comments, QSortFilterProxyModel and QStandardItemModel duplicate code to compare QVariant; extract this into a separate method they can share. Since there is only one common suitable header for both files, the method was placed in qabstractitemmodel.cpp Change-Id: I82bb4a2d6084059b8a70a8d556c16f1a29f4f686 Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Diffstat (limited to 'src/corelib/itemmodels/qabstractitemmodel.cpp')
-rw-r--r--src/corelib/itemmodels/qabstractitemmodel.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/corelib/itemmodels/qabstractitemmodel.cpp b/src/corelib/itemmodels/qabstractitemmodel.cpp
index d645205155..54ea45782d 100644
--- a/src/corelib/itemmodels/qabstractitemmodel.cpp
+++ b/src/corelib/itemmodels/qabstractitemmodel.cpp
@@ -47,6 +47,7 @@
#include <qvector.h>
#include <qstack.h>
#include <qbitarray.h>
+#include <qdatetime.h>
#include <limits.h>
@@ -547,6 +548,43 @@ const QHash<int,QByteArray> &QAbstractItemModelPrivate::defaultRoleNames()
return *qDefaultRoleNames();
}
+bool QAbstractItemModelPrivate::isVariantLessThan(const QVariant &left, const QVariant &right,
+ Qt::CaseSensitivity cs, bool isLocaleAware)
+{
+ if (left.userType() == QVariant::Invalid)
+ return false;
+ if (right.userType() == QVariant::Invalid)
+ return true;
+ switch (left.userType()) {
+ case QVariant::Int:
+ return left.toInt() < right.toInt();
+ case QVariant::UInt:
+ return left.toUInt() < right.toUInt();
+ case QVariant::LongLong:
+ return left.toLongLong() < right.toLongLong();
+ case QVariant::ULongLong:
+ return left.toULongLong() < right.toULongLong();
+ case QMetaType::Float:
+ return left.toFloat() < right.toFloat();
+ case QVariant::Double:
+ return left.toDouble() < right.toDouble();
+ case QVariant::Char:
+ return left.toChar() < right.toChar();
+ case QVariant::Date:
+ return left.toDate() < right.toDate();
+ case QVariant::Time:
+ return left.toTime() < right.toTime();
+ case QVariant::DateTime:
+ return left.toDateTime() < right.toDateTime();
+ case QVariant::String:
+ default:
+ if (isLocaleAware)
+ return left.toString().localeAwareCompare(right.toString()) < 0;
+ else
+ return left.toString().compare(right.toString(), cs) < 0;
+ }
+}
+
static uint typeOfVariant(const QVariant &value)
{