File indexing completed on 2024-04-28 15:39:05

0001 // SPDX-FileCopyrightText: 2021-2022 Tobias Leupold <tl at stonemx dot de>
0002 //
0003 // SPDX-License-Identifier: GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0004 
0005 #ifndef GEODATAMODEL_H
0006 #define GEODATAMODEL_H
0007 
0008 // Local includes
0009 #include "Coordinates.h"
0010 
0011 // Marble includes
0012 #include <marble/GeoDataLineString.h>
0013 #include <marble/GeoDataLatLonAltBox.h>
0014 
0015 // Qt includes
0016 #include <QAbstractListModel>
0017 #include <QHash>
0018 #include <QDateTime>
0019 
0020 class GeoDataModel : public QAbstractListModel
0021 {
0022     Q_OBJECT
0023 
0024 public:
0025     explicit GeoDataModel(QObject *parent);
0026 
0027     int rowCount(const QModelIndex & = QModelIndex()) const override;
0028     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0029     Qt::DropActions supportedDropActions() const override;
0030     Qt::ItemFlags flags(const QModelIndex &index) const override;
0031     bool canDropMimeData(const QMimeData *data, Qt::DropAction action, int, int,
0032                          const QModelIndex &) const override;
0033     bool dropMimeData(const QMimeData *data, Qt::DropAction action, int, int,
0034                       const QModelIndex &) override;
0035 
0036     bool contains(const QString &path);
0037     void addTrack(const QString &path, const QVector<QVector<QDateTime>> &times,
0038                   const QVector<QVector<Coordinates>> &segments);
0039     void removeTrack(int row);
0040     void removeAllTracks();
0041     Marble::GeoDataLatLonAltBox trackBox(const QString &path) const;
0042     Marble::GeoDataLatLonAltBox trackBox(const QModelIndex &index) const;
0043     Coordinates trackBoxCenter(const QString &path) const;
0044 
0045     const QVector<QVector<Marble::GeoDataLineString>> &marbleTracks() const;
0046     const QVector<QVector<QDateTime>> &dateTimes() const;
0047     const QVector<QHash<QDateTime, Coordinates>> &trackPoints() const;
0048 
0049 Q_SIGNALS:
0050     void requestAddFiles(const QVector<QString> &paths);
0051 
0052 private: // Functions
0053     QString canonicalPath(const QString &path) const;
0054 
0055 private: // Variables
0056     QVector<QString> m_loadedFiles;
0057     QVector<QString> m_displayFileNames;
0058 
0059     QVector<QVector<Marble::GeoDataLineString>> m_marbleTracks;
0060     QVector<Marble::GeoDataLatLonAltBox> m_marbleTrackBoxes;
0061 
0062     QVector<QVector<QDateTime>> m_dateTimes;
0063     QVector<QHash<QDateTime, Coordinates>> m_trackPoints;
0064 
0065 };
0066 
0067 #endif // GEODATAMODEL_H