digiKam
Loading...
Searching...
No Matches
trackmanager.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2006-09-19
7 * Description : Track file loading and managing
8 *
9 * SPDX-FileCopyrightText: 2006-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
10 * SPDX-FileCopyrightText: 2010-2014 by Michael G. Hansen <mike at mghansen dot de>
11 *
12 * SPDX-License-Identifier: GPL-2.0-or-later
13 *
14 * ============================================================ */
15
16#pragma once
17
18// Qt includes
19
20#include <QColor>
21#include <QDateTime>
22#include <QUrl>
23
24// local includes
25
26#include "geoifacetypes.h"
27#include "geocoordinates.h"
28#include "digikam_export.h"
29
30class TestGPXParsing;
31
32namespace Digikam
33{
34
35class DIGIKAM_EXPORT TrackManager : public QObject
36{
37 Q_OBJECT
38
39public:
40
42 typedef quint32 Id;
43
45 {
46 ChangeTrackPoints = 1,
47 ChangeMetadata = 2,
48
49 ChangeRemoved = 4,
50 ChangeAdd = ChangeTrackPoints | ChangeMetadata
51 };
52
53 typedef QPair<Id, ChangeFlag> TrackChanges;
54
55public:
56
58 {
59 public:
60
61 TrackPoint() = default;
62
63 static bool EarlierThan(const TrackPoint& a, const TrackPoint& b);
64
65 public:
66
67 QDateTime dateTime;
69 int nSatellites = -1;
70 qreal hDop = -1.0;
71 qreal pDop = -1.0;
72 int fixType = -1;
73 qreal speed = -1.0;
74
75 typedef QList<TrackPoint> List;
76 };
77
78 // -------------------------------------
79
80 class Track
81 {
82 public:
83
84 enum Flags
85 {
86 FlagVisible = 1,
87 FlagDefault = FlagVisible
88 };
89
90 public:
91
93 {
94 qRegisterMetaType<TrackChanges>("TrackChanges");
95 }
96
97 QUrl url;
98 QList<TrackPoint> points;
99
101 Id id = 0;
102 QColor color = Qt::red;
103 Flags flags = FlagDefault;
104
105 typedef QList<Track> List;
106 };
107
108public:
109
110 explicit TrackManager(QObject* const parent = nullptr);
111 ~TrackManager() override;
112
113 void loadTrackFiles(const QList<QUrl>& urls);
114 QList<QPair<QUrl, QString> > readLoadErrors();
115 void clear();
116
117 const Track& getTrack(const int index) const;
118 Track::List getTrackList() const;
119 int trackCount() const;
120
121 quint64 getNextFreeTrackId();
122 Track getTrackById(const quint64 trackId) const;
123 QColor getNextFreeTrackColor();
124
125 void setVisibility(const bool value);
126 bool getVisibility() const;
127
128Q_SIGNALS:
129
130 void signalTrackFilesReadyAt(const int startIndex, const int endIndex);
132 void signalTracksChanged(const QList<TrackManager::TrackChanges>& trackChanges);
133 void signalVisibilityChanged(const bool newValue);
134
135private Q_SLOTS:
136
137 void slotTrackFilesReadyAt(int beginIndex, int endIndex);
138 void slotTrackFilesFinished();
139
140private:
141
142 class Private;
143 const QScopedPointer<Private> d;
144};
145
146} // namespace Digikam
Definition geocoordinates.h:44
Definition trackmanager.h:58
QList< TrackPoint > List
Definition trackmanager.h:75
QDateTime dateTime
Definition trackmanager.h:67
GeoCoordinates coordinates
Definition trackmanager.h:68
Definition trackmanager.h:81
QUrl url
Definition trackmanager.h:97
Flags
Definition trackmanager.h:85
QList< Track > List
Definition trackmanager.h:105
QList< TrackPoint > points
Definition trackmanager.h:98
Track()
Definition trackmanager.h:92
Definition trackmanager.h:36
void signalVisibilityChanged(const bool newValue)
QPair< Id, ChangeFlag > TrackChanges
Definition trackmanager.h:53
void signalTrackFilesReadyAt(const int startIndex, const int endIndex)
ChangeFlag
Definition trackmanager.h:45
quint32 Id
NOTE: we assume here that we will never load more than uint32_max tracks.
Definition trackmanager.h:42
void signalTracksChanged(const QList< TrackManager::TrackChanges > &trackChanges)
qulonglong value
Definition itemviewutilities.cpp:585
Definition datefolderview.cpp:34