aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorManjeet Dahiya <manjeetdahiya@gmail.com>2010-10-16 18:30:46 +0000
committerManjeet Dahiya <manjeetdahiya@gmail.com>2010-10-16 18:30:46 +0000
commit8d1b126dc9115a5fd9ff8a4f0ed84a6827877bdf (patch)
tree8485e03b3c14c6feed3c8990922dd478281397c1 /examples
parent15465e82a3929d5e3ef1f01a78eecf9533137a37 (diff)
downloadqxmpp-8d1b126dc9115a5fd9ff8a4f0ed84a6827877bdf.tar.gz
sortByName functionality
Diffstat (limited to 'examples')
-rw-r--r--examples/GuiClient/rosterItemSortFilterProxyModel.cpp60
-rw-r--r--examples/GuiClient/rosterItemSortFilterProxyModel.h2
2 files changed, 42 insertions, 20 deletions
diff --git a/examples/GuiClient/rosterItemSortFilterProxyModel.cpp b/examples/GuiClient/rosterItemSortFilterProxyModel.cpp
index 35f779fe..7ee0f638 100644
--- a/examples/GuiClient/rosterItemSortFilterProxyModel.cpp
+++ b/examples/GuiClient/rosterItemSortFilterProxyModel.cpp
@@ -27,7 +27,9 @@
#include "utils.h"
rosterItemSortFilterProxyModel::rosterItemSortFilterProxyModel(QObject* parent):
- QSortFilterProxyModel(parent), m_showOfflineContacts(true)
+ QSortFilterProxyModel(parent),
+ m_showOfflineContacts(true),
+ m_sortByName(false)
{
setDynamicSortFilter(true);
setFilterRole(Qt::DisplayRole);
@@ -36,31 +38,42 @@ rosterItemSortFilterProxyModel::rosterItemSortFilterProxyModel(QObject* parent):
bool rosterItemSortFilterProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
{
- int leftPresenceType = sourceModel()->data(left, rosterItem::PresenceType).toInt();
- int leftStatusType = sourceModel()->data(left, rosterItem::StatusType).toInt();
- int rightPresenceType = sourceModel()->data(right, rosterItem::PresenceType).toInt();
- int rightStatusType = sourceModel()->data(right, rosterItem::StatusType).toInt();
-
- if(leftPresenceType == rightPresenceType)
+ if(m_sortByName)
{
- if(leftStatusType == rightStatusType)
+ int compare = left.data().toString().compare(right.data().toString(), Qt::CaseInsensitive);
+ if(compare < 0)
+ return true;
+ else
+ return false;
+ }
+ else
+ {
+ int leftPresenceType = sourceModel()->data(left, rosterItem::PresenceType).toInt();
+ int leftStatusType = sourceModel()->data(left, rosterItem::StatusType).toInt();
+ int rightPresenceType = sourceModel()->data(right, rosterItem::PresenceType).toInt();
+ int rightStatusType = sourceModel()->data(right, rosterItem::StatusType).toInt();
+
+ if(leftPresenceType == rightPresenceType)
{
- // based on display text
- int compare = left.data().toString().compare(right.data().toString(), Qt::CaseInsensitive);
- if(compare < 0)
- return true;
+ if(leftStatusType == rightStatusType)
+ {
+ // based on display text
+ int compare = left.data().toString().compare(right.data().toString(), Qt::CaseInsensitive);
+ if(compare < 0)
+ return true;
+ else
+ return false;
+ }
else
- return false;
+ {
+ return comparisonWeightsPresenceStatusType(static_cast<QXmppPresence::Status::Type>(leftStatusType)) <
+ comparisonWeightsPresenceStatusType(static_cast<QXmppPresence::Status::Type>(rightStatusType));
+ }
}
else
- {
- return comparisonWeightsPresenceStatusType(static_cast<QXmppPresence::Status::Type>(leftStatusType)) <
- comparisonWeightsPresenceStatusType(static_cast<QXmppPresence::Status::Type>(rightStatusType));
- }
+ return comparisonWeightsPresenceType(static_cast<QXmppPresence::Type>(leftPresenceType)) <
+ comparisonWeightsPresenceType(static_cast<QXmppPresence::Type>(rightPresenceType));
}
- else
- return comparisonWeightsPresenceType(static_cast<QXmppPresence::Type>(leftPresenceType)) <
- comparisonWeightsPresenceType(static_cast<QXmppPresence::Type>(rightPresenceType));
}
bool rosterItemSortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const
@@ -84,3 +97,10 @@ void rosterItemSortFilterProxyModel::setShowOfflineContacts(bool showOfflineCont
invalidateFilter();
}
+
+void rosterItemSortFilterProxyModel::sortByName(bool sortByName)
+{
+ m_sortByName = sortByName;
+
+ invalidate();
+}
diff --git a/examples/GuiClient/rosterItemSortFilterProxyModel.h b/examples/GuiClient/rosterItemSortFilterProxyModel.h
index 584a0a50..4a70dc37 100644
--- a/examples/GuiClient/rosterItemSortFilterProxyModel.h
+++ b/examples/GuiClient/rosterItemSortFilterProxyModel.h
@@ -36,12 +36,14 @@ public:
public slots:
void setShowOfflineContacts(bool);
+ void sortByName(bool);
private:
bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
bool filterAcceptsRow(int, const QModelIndex&) const;
bool m_showOfflineContacts;
+ bool m_sortByName;
};
#endif // ROSTERITEMSORTFILTERPROXYMODEL_H