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; +        }); +    } +} + +}  | 
 Swift