diff options
Diffstat (limited to 'Swift/QtUI/MUCSearch/MUCSearchServiceItem.cpp')
-rw-r--r-- | Swift/QtUI/MUCSearch/MUCSearchServiceItem.cpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/Swift/QtUI/MUCSearch/MUCSearchServiceItem.cpp b/Swift/QtUI/MUCSearch/MUCSearchServiceItem.cpp new file mode 100644 index 0000000..57d5aac --- /dev/null +++ b/Swift/QtUI/MUCSearch/MUCSearchServiceItem.cpp @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2010-2016 Isode Limited. + * All rights reserved. + * See the COPYING file for more information. + */ + +#include <Swift/QtUI/MUCSearch/MUCSearchServiceItem.h> + +#include <memory> + +#include <QString> +#include <QVector> +#include <QtAlgorithms> + +namespace Swift { + +MUCSearchServiceItem::MUCSearchServiceItem(const QString& jidString) : jidString_(jidString) { + +} + +void MUCSearchServiceItem::addRoom(std::shared_ptr<MUCSearchItem> room) { + room->setParent(shared_from_this()); + rooms_.push_back(room); + if (sortOrder_) { + sort(); + } +} + +void MUCSearchServiceItem::addRooms(const std::vector<std::shared_ptr<MUCSearchItem> >& rooms) { + for (auto&& room: rooms) { + room->setParent(shared_from_this()); + rooms_.push_back(room); + } + if (sortOrder_) { + sort(); + } +} + +int MUCSearchServiceItem::rowCount() { + return rooms_.count(); +} + +MUCSearchItem* MUCSearchServiceItem::getItem(int i) { + return rooms_[i].get(); +} + +QVariant MUCSearchServiceItem::data(int role) { + switch (role) { + case Qt::DisplayRole: + return QVariant(jidString_); + default: + return QVariant(); + } +} + +QString MUCSearchServiceItem::getHost() const { + return jidString_; +} + +void MUCSearchServiceItem::setSorting(Qt::SortOrder sortOrder) { + sortOrder_ = sortOrder; + sort(); +} + +void MUCSearchServiceItem::sort() { + if (*sortOrder_ == Qt::AscendingOrder) { + qStableSort(rooms_.begin(), rooms_.end(), [](const std::shared_ptr<MUCSearchItem>& item1, const std::shared_ptr<MUCSearchItem>& item2) -> bool { + return QString::localeAwareCompare(item1->data(Qt::DisplayRole).toString(), item2->data(Qt::DisplayRole).toString()) < 0; + }); + } + else { + qStableSort(rooms_.begin(), rooms_.end(), [](const std::shared_ptr<MUCSearchItem>& item1, const std::shared_ptr<MUCSearchItem>& item2) -> bool { + return QString::localeAwareCompare(item1->data(Qt::DisplayRole).toString(), item2->data(Qt::DisplayRole).toString()) > 0; + }); + } +} + +} |