summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/QtUI/MUCSearch/MUCSearchServiceItem.cpp')
-rw-r--r--Swift/QtUI/MUCSearch/MUCSearchServiceItem.cpp78
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;
+ });
+ }
+}
+
+}