diff options
| author | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2010-10-16 18:30:46 +0000 |
|---|---|---|
| committer | Manjeet Dahiya <manjeetdahiya@gmail.com> | 2010-10-16 18:30:46 +0000 |
| commit | 8d1b126dc9115a5fd9ff8a4f0ed84a6827877bdf (patch) | |
| tree | 8485e03b3c14c6feed3c8990922dd478281397c1 /examples | |
| parent | 15465e82a3929d5e3ef1f01a78eecf9533137a37 (diff) | |
| download | qxmpp-8d1b126dc9115a5fd9ff8a4f0ed84a6827877bdf.tar.gz | |
sortByName functionality
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/GuiClient/rosterItemSortFilterProxyModel.cpp | 60 | ||||
| -rw-r--r-- | examples/GuiClient/rosterItemSortFilterProxyModel.h | 2 |
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 |
