File indexing completed on 2025-04-20 10:28:17
0001 // SPDX-FileCopyrightText: 2023 Tobias Fella <tobias.fella@kde.org> 0002 // SPDX-License-Identifier: GPL-2.0-or-later 0003 0004 #pragma once 0005 0006 #include <QAbstractListModel> 0007 #include <QPointer> 0008 #include <QRectF> 0009 0010 #include "neochatroom.h" 0011 0012 #include <Quotient/events/roommessageevent.h> 0013 0014 class LocationsModel : public QAbstractListModel 0015 { 0016 Q_OBJECT 0017 0018 public: 0019 enum Roles { 0020 TextRole = Qt::DisplayRole, 0021 LongitudeRole, 0022 LatitudeRole, 0023 AssetRole, 0024 AuthorRole, 0025 }; 0026 Q_ENUM(Roles) 0027 Q_PROPERTY(NeoChatRoom *room READ room WRITE setRoom NOTIFY roomChanged) 0028 /** Bounding box of all locations covered by this model. */ 0029 Q_PROPERTY(QRectF boundingBox READ boundingBox NOTIFY boundingBoxChanged) 0030 0031 explicit LocationsModel(QObject *parent = nullptr); 0032 0033 [[nodiscard]] NeoChatRoom *room() const; 0034 void setRoom(NeoChatRoom *room); 0035 0036 QRectF boundingBox() const; 0037 0038 [[nodiscard]] QHash<int, QByteArray> roleNames() const override; 0039 [[nodiscard]] QVariant data(const QModelIndex &index, int roleName) const override; 0040 [[nodiscard]] int rowCount(const QModelIndex &parent = {}) const override; 0041 0042 Q_SIGNALS: 0043 void roomChanged(); 0044 void boundingBoxChanged(); 0045 0046 private: 0047 QPointer<NeoChatRoom> m_room; 0048 0049 struct LocationData { 0050 QString eventId; 0051 float latitude; 0052 float longitude; 0053 QJsonObject content; 0054 NeoChatUser *author; 0055 }; 0056 QList<LocationData> m_locations; 0057 void addLocation(const Quotient::RoomMessageEvent *event); 0058 };