digiKam
Loading...
Searching...
No Matches
geoifacecommon.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 : 2010-07-14
7 * Description : Common internal data structures for geolocation interface
8 *
9 * SPDX-FileCopyrightText: 2010-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 * SPDX-FileCopyrightText: 2014 by Justus Schwartz <justus at gmx dot li>
12 *
13 * SPDX-License-Identifier: GPL-2.0-or-later
14 *
15 * ============================================================ */
16
17#pragma once
18
19// Qt includes
20
21#include <QFlags>
22#include <QPoint>
23#include <QPointer>
24#include <QSharedData>
25#include <QSize>
26#include <QWidget>
27#include <QPixmap>
28
29// Local includes
30
31#include "geoifacetypes.h"
32#include "tileindex.h"
33#include "groupstatecomputer.h"
34#include "digikam_export.h"
35
36namespace Digikam
37{
38class MapWidget;
39class AbstractMarkerTiler;
40class TileGrouper;
41class TrackManager;
42class MapBackend;
43class GeoModelHelper;
44
50class DIGIKAM_EXPORT GeoIfaceInternalWidgetInfo
51{
52public:
53
54 typedef void (*DeleteFunction)(GeoIfaceInternalWidgetInfo* const info);
55
57 {
58 InternalWidgetReleased = 1,
59 InternalWidgetUndocked = 2,
60 InternalWidgetStillDocked = 4
61 };
62
63 // cppcheck-suppress unknownMacro
64 Q_DECLARE_FLAGS(InternalWidgetStates, InternalWidgetState)
65
67 : state (),
68 widget (),
69 backendData (),
70 backendName (),
71 currentOwner (nullptr),
72 deleteFunction(nullptr)
73 {
74 }
75
76public:
77
78 InternalWidgetStates state;
79 QPointer<QWidget> widget;
80 QVariant backendData;
81 QString backendName;
82 QPointer<QObject> currentOwner;
83 DeleteFunction deleteFunction;
84};
85
86Q_DECLARE_OPERATORS_FOR_FLAGS(GeoIfaceInternalWidgetInfo::InternalWidgetStates)
87
88// ----------------------------------------------------------------------------------------------
89
90
94class DIGIKAM_EXPORT GeoIfaceGlobalObject : public QObject
95{
96 Q_OBJECT
97
98public:
99
100 static GeoIfaceGlobalObject* instance();
101
103
104 QPixmap getMarkerPixmap(const QString& pixmapId);
105 QPixmap getStandardMarkerPixmap();
106 QUrl locateDataFile(const QString& filename);
108
110
111 void removeMyInternalWidgetFromPool(const MapBackend* const mapBackend);
112 bool getInternalWidgetFromPool(const MapBackend* const mapBackend, GeoIfaceInternalWidgetInfo* const targetInfo);
113 void addMyInternalWidgetToPool(const GeoIfaceInternalWidgetInfo& info);
114 void updatePooledWidgetState(const QWidget* const widget, const GeoIfaceInternalWidgetInfo::InternalWidgetState newState);
115 void clearWidgetPool();
117
118private:
119
120 // Disable
121 explicit GeoIfaceGlobalObject(QObject*) = delete;
123 ~GeoIfaceGlobalObject() override;
124
125 Q_DISABLE_COPY(GeoIfaceGlobalObject)
126
127private:
128
129 class Private;
130 Private* const d = nullptr;
131
132 friend class GeoIfaceGlobalObjectCreator;
133};
134
135// ----------------------------------------------------------------------------------------------
136
137class DIGIKAM_EXPORT GeoIfaceCluster
138{
139
140public:
141
143 {
146 PixmapImage
147 } pixmapType;
148
149 typedef QList<GeoIfaceCluster> List;
150
151public:
152
154 : pixmapType (PixmapMarker),
155 tileIndicesList (),
156 markerCount (0),
157 markerSelectedCount (0),
158 coordinates (),
159 pixelPos (),
160 groupState (SelectedNone),
161 representativeMarkers (),
162 pixmapSize (),
163 pixmapOffset ()
164 {
165 }
166
167 QList<TileIndex> tileIndicesList;
171 QPoint pixelPos;
172 GeoGroupState groupState;
173 QMap<int, QVariant> representativeMarkers;
174
176
179};
180
181// ----------------------------------------------------------------------------------------------
182
187
188// ----------------------------------------------------------------------------------------------
189
198DIGIKAM_EXPORT int QPointSquareDistance(const QPoint& a, const QPoint& b);
199
200// ----------------------------------------------------------------------------------------------
201
202class DIGIKAM_EXPORT GeoIfaceSharedData : public QSharedData
203{
204public:
205
207 : QSharedData (),
208 worldMapWidget (nullptr),
209 tileGrouper (nullptr),
210 markerModel (nullptr),
211 clusterList (),
212 trackManager (nullptr),
213 showThumbnails (true),
214 thumbnailSize (GeoIfaceMinThumbnailSize),
215 thumbnailGroupingRadius (GeoIfaceMinThumbnailGroupingRadius),
216 markerGroupingRadius (GeoIfaceMinMarkerGroupingRadius),
217 previewSingleItems (true),
218 previewGroupedItems (true),
219 showNumbersOnItems (true),
220 sortKey (0),
221 modificationsAllowed (true),
222 selectionRectangle (),
223 haveMovingCluster (false),
224 currentMouseMode (),
225 availableMouseModes (),
226 visibleMouseModes (),
227 activeState (false)
228 {
229 }
230
233 {
234 return selectionRectangle.first.hasCoordinates();
235 }
236
237public:
238
240
245 QList<GeoModelHelper*> ungroupedModels;
248
250
261
263
266 GeoMouseModes currentMouseMode;
267 GeoMouseModes availableMouseModes;
268 GeoMouseModes visibleMouseModes;
271};
272
273// ----------------------------------------------------------------------------------------------
274
276
277DIGIKAM_EXPORT bool GeoIfaceHelperParseLatLonString(const QString& latLonString,
278 GeoCoordinates* const coordinates);
279
280DIGIKAM_EXPORT bool GeoIfaceHelperParseXYStringToPoint(const QString& xyString,
281 QPoint* const point);
282
283DIGIKAM_EXPORT bool GeoIfaceHelperParseBoundsString(const QString& boundsString,
284 QPair<GeoCoordinates, GeoCoordinates>* const boundsCoordinates);
285
287
288DIGIKAM_EXPORT void GeoIface_assert(const char* const condition,
289 const char* const filename,
290 const int lineNumber);
291
292} // namespace Digikam
293
294#define GEOIFACE_ASSERT(cond) ((!(cond)) ? Digikam::GeoIface_assert(#cond,__FILE__,__LINE__) : qt_noop())
Definition abstractmarkertiler.h:35
Definition geocoordinates.h:44
QPair< GeoCoordinates, GeoCoordinates > Pair
Definition geocoordinates.h:59
QList< GeoCoordinates::Pair > PairList
Definition geocoordinates.h:60
Definition geoifacecommon.h:138
PixmapType
Definition geoifacecommon.h:143
@ PixmapMarker
Definition geoifacecommon.h:144
@ PixmapCircle
Definition geoifacecommon.h:145
QList< TileIndex > tileIndicesList
Definition geoifacecommon.h:167
int markerCount
Definition geoifacecommon.h:168
QSize pixmapSize
Definition geoifacecommon.h:175
GeoIfaceCluster()
Definition geoifacecommon.h:153
QPoint pixelPos
Definition geoifacecommon.h:171
QMap< int, QVariant > representativeMarkers
Definition geoifacecommon.h:173
GeoCoordinates coordinates
Definition geoifacecommon.h:170
QPoint pixmapOffset
anchor point of the image, measured from bottom-left
Definition geoifacecommon.h:178
int markerSelectedCount
Definition geoifacecommon.h:169
GeoGroupState groupState
Definition geoifacecommon.h:172
QList< GeoIfaceCluster > List
Definition geoifacecommon.h:149
Global object for geolocation interface to hold items common to all geolocation interface Widget inst...
Definition geoifacecommon.h:95
Class to hold information about map widgets stored in the GeoIfaceGlobalObject.
Definition geoifacecommon.h:51
InternalWidgetStates state
Definition geoifacecommon.h:78
QString backendName
Definition geoifacecommon.h:81
QPointer< QObject > currentOwner
Definition geoifacecommon.h:82
QPointer< QWidget > widget
Definition geoifacecommon.h:79
QVariant backendData
Definition geoifacecommon.h:80
DeleteFunction deleteFunction
Definition geoifacecommon.h:83
InternalWidgetState
Definition geoifacecommon.h:57
Definition geoifacecommon.h:203
MapWidget * worldMapWidget
Definition geoifacecommon.h:241
GeoIfaceSharedData()
Definition geoifacecommon.h:206
GeoCoordinates::Pair selectionRectangle
Definition geoifacecommon.h:264
AbstractMarkerTiler * markerModel
Definition geoifacecommon.h:243
int thumbnailSize
Definition geoifacecommon.h:252
bool hasRegionSelection() const
Definition geoifacecommon.h:232
GeoIfaceCluster::List clusterList
Definition geoifacecommon.h:244
bool previewGroupedItems
Definition geoifacecommon.h:256
bool showThumbnails
Definition geoifacecommon.h:251
GeoMouseModes currentMouseMode
Definition geoifacecommon.h:266
TrackManager * trackManager
Definition geoifacecommon.h:246
GeoMouseModes availableMouseModes
Definition geoifacecommon.h:267
bool activeState
Definition geoifacecommon.h:269
int sortKey
Definition geoifacecommon.h:258
GeoMouseModes visibleMouseModes
Definition geoifacecommon.h:268
QList< GeoModelHelper * > ungroupedModels
Definition geoifacecommon.h:245
TileGrouper * tileGrouper
Definition geoifacecommon.h:242
bool showNumbersOnItems
Definition geoifacecommon.h:257
int markerGroupingRadius
Definition geoifacecommon.h:254
int thumbnailGroupingRadius
Definition geoifacecommon.h:253
bool modificationsAllowed
Definition geoifacecommon.h:259
bool haveMovingCluster
Definition geoifacecommon.h:265
bool previewSingleItems
Definition geoifacecommon.h:255
Definition mapbackend.h:46
The central map view class of geolocation interface.
Definition mapwidget.h:77
Definition tilegrouper.h:28
Definition trackmanager.h:36
Definition datefolderview.cpp:34
const int GeoIfaceMinMarkerGroupingRadius
Definition geoifacecommon.h:184
const int GeoIfaceMinThumbnailSize
Definition geoifacecommon.h:186
bool GeoIfaceHelperParseXYStringToPoint(const QString &xyString, QPoint *const point)
Parse a '(X.xxx,Y.yyy)' string as returned by the JavaScript parts.
Definition geoifacecommon.cpp:169
void GeoIface_assert(const char *const condition, const char *const filename, const int lineNumber)
Definition geoifacecommon.cpp:417
int QPointSquareDistance(const QPoint &a, const QPoint &b)
Helper function, returns the square of the distance between two points.
Definition geoifacecommon.cpp:429
@ SelectedNone
Definition geogroupstate.h:45
GeoCoordinates::PairList GeoIfaceHelperNormalizeBounds(const GeoCoordinates::Pair &boundsPair)
Split bounds crossing the dateline into parts which do not cross the dateline.
Definition geoifacecommon.cpp:275
bool GeoIfaceHelperParseBoundsString(const QString &boundsString, QPair< GeoCoordinates, GeoCoordinates > *const boundsCoordinates)
Parses a '((lat1, lon1), (lat2, lon2))' bounds string as returned by the JavaScript parts.
Definition geoifacecommon.cpp:217
const int GeoIfaceMinThumbnailGroupingRadius
Definition geoifacecommon.h:185
bool GeoIfaceHelperParseLatLonString(const QString &latLonString, GeoCoordinates *const coordinates)
Parse a 'lat,lon' string a returned by the JavaScript parts.
Definition geoifacecommon.cpp:135