digiKam
Loading...
Searching...
No Matches
mapwidget.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 : 2009-12-01
7 * Description : world map widget library
8 *
9 * SPDX-FileCopyrightText: 2010-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
10 * SPDX-FileCopyrightText: 2009-2011 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 <QWidget>
22#include <QList>
23#include <QStringList>
24
25// Local includes
26
27#include "digikam_export.h"
28#include "digikam_config.h"
29#include "geoifacetypes.h"
30#include "geocoordinates.h"
31#include "geogroupstate.h"
32
33class QAction;
34class QDragEnterEvent;
35class QDropEvent;
36class QMenu;
37
38class KConfigGroup;
39
40namespace Digikam
41{
42
43class GeoIfaceSharedData;
44class GeoModelHelper;
45class GeoDragDropHandler;
46class AbstractMarkerTiler;
47class TrackManager;
48class MapBackend;
49
76class DIGIKAM_EXPORT MapWidget : public QWidget
77{
78 Q_OBJECT
79
80public:
81
82 explicit MapWidget(QWidget* const parent = nullptr);
83 ~MapWidget() override;
84
85// --------------------------------------------------
86
88
89
90public:
91
92 void saveSettingsToGroup(KConfigGroup* const group);
93 void readSettingsFromGroup(const KConfigGroup* const group);
94
95protected Q_SLOTS:
96
97 void slotItemDisplaySettingsChanged();
98
99private Q_SLOTS:
100
101 void slotApplySettings();
103
104// --------------------------------------------------
105
107
108
109public:
110
111 QStringList availableBackends() const;
112 bool setBackend(const QString& backendName);
113
114 QList<MapBackend*> backends() const;
115
116 GeoCoordinates getCenter() const;
117 void setCenter(const GeoCoordinates& coordinate);
118
119 void setZoom(const QString& newZoom);
120 QString getZoom();
121
130 void adjustBoundariesToGroupedMarkers(const bool useSaneZoomLevel = true);
131 void refreshMap();
132
133 void setRegionSelection(const GeoCoordinates::Pair& region);
134 GeoCoordinates::Pair getRegionSelection();
135 void clearRegionSelection();
136
137 void updateMarkers();
138 void updateClusters();
139 void markClustersAsDirty();
140
141 QPixmap getDecoratedPixmapForCluster(const int clusterId, const GeoGroupState* const selectedStateOverride,
142 const int* const countOverride, QPoint* const centerPoint);
143 QVariant getClusterRepresentativeMarker(const int clusterIndex, const int sortKey);
144
145protected:
146
147 bool currentBackendReady() const;
148 void applyCacheToBackend();
149 void saveBackendToCache();
150 void setShowPlaceholderWidget(const bool state);
151
155 void setMapWidgetInFrame(QWidget* const widgetForFrame);
156
157 void removeMapWidgetFromFrame();
158
159public Q_SLOTS:
160
161 void slotClustersNeedUpdating();
162
163protected Q_SLOTS:
164
165 void slotBackendReadyChanged(const QString& backendName);
166 void slotChangeBackend(QAction* action);
167 void slotBackendZoomChanged(const QString& newZoom);
168 void slotClustersMoved(const QIntList& clusterIndices, const QPair<int, QModelIndex>& snapTarget);
169 void slotClustersClicked(const QIntList& clusterIndices);
170
174 void slotLazyReclusteringRequestCallBack();
175
179 void slotRequestLazyReclustering();
180
181 void slotRemoveCurrentRegionSelection();
182 void slotNewSelectionFromMap(const Digikam::GeoCoordinates::Pair& sel);
183
184Q_SIGNALS:
185
188
189// --------------------------------------------------
190
192
193
194public:
195
196 void addUngroupedModel(GeoModelHelper* const modelHelper);
197 void removeUngroupedModel(GeoModelHelper* const modelHelper);
198 void setGroupedModel(AbstractMarkerTiler* const markerModel);
199 void setDragDropHandler(GeoDragDropHandler* const dragDropHandler);
200 void setTrackManager(TrackManager* const trackManager);
201
202protected Q_SLOTS:
203
204 void slotUngroupedModelChanged();
205
206Q_SIGNALS:
207
209 void signalUngroupedModelChanged(const int index);
211
212// --------------------------------------------------
213
215
216
217public:
218
219 QAction* getControlAction(const QString& actionName);
220
224 QWidget* getControlWidget();
225
226 void addWidgetToControlWidget(QWidget* const newWidget);
227 void setSortOptionsMenu(QMenu* const sortMenu);
228 void setMouseMode(const GeoMouseModes mouseMode);
229 void setAvailableMouseModes(const GeoMouseModes mouseModes);
230 void setVisibleMouseModes(const GeoMouseModes mouseModes);
231 void setAllowModifications(const bool state);
232 void setActive(const bool state);
233 bool getActiveState();
234 bool getStickyModeState() const;
235 void setStickyModeState(const bool state);
236 void setVisibleExtraActions(const GeoExtraActions actions);
237 void setEnabledExtraActions(const GeoExtraActions actions);
238
239public Q_SLOTS:
240
241 void slotUpdateActionsEnabled();
242 void slotStickyModeChanged();
243
244protected Q_SLOTS:
245
246 void slotMouseModeChanged(QAction* triggeredAction);
247
248protected:
249
250 void rebuildConfigurationMenu();
251 void createActions();
252 void createActionsForBackendSelection();
253
254 void dropEvent(QDropEvent* event) override;
255 void dragMoveEvent(QDragMoveEvent* event) override;
256 void dragEnterEvent(QDragEnterEvent* event) override;
257 void dragLeaveEvent(QDragLeaveEvent* event) override;
258
259Q_SIGNALS:
260
261 void signalMouseModeChanged(const Digikam::GeoMouseModes& currentMouseMode);
263
264// --------------------------------------------------
265
267
268
269public:
270
271 void setSortKey(const int sortKey);
272 void setThumnailSize(const int newThumbnailSize);
273 void setThumbnailGroupingRadius(const int newGroupingRadius);
274 void setMarkerGroupingRadius(const int newGroupingRadius);
275 int getThumbnailSize() const;
276 int getUndecoratedThumbnailSize() const;
277 void setShowThumbnails(const bool state);
278
279 QString convertZoomToBackendZoom(const QString& someZoom, const QString& targetBackend) const;
280
292 void getColorInfos(const int clusterIndex, QColor* fillColor, QColor* strokeColor,
293 Qt::PenStyle* strokeStyle, QString* labelText, QColor* labelColor,
294 const GeoGroupState* const overrideSelection = nullptr,
295 const int* const overrideCount = nullptr) const;
296
297 void getColorInfos(const GeoGroupState groupState,
298 const int nMarkers,
299 QColor* fillColor, QColor* strokeColor,
300 Qt::PenStyle* strokeStyle, QString* labelText, QColor* labelColor) const;
301
302public Q_SLOTS:
303
304 void slotZoomIn();
305 void slotZoomOut();
306 void slotDecreaseThumbnailSize();
307 void slotIncreaseThumbnailSize();
308 void stopThumbnailTimer();
309
310protected Q_SLOTS:
311
312 void slotShowThumbnailsChanged();
313
314Q_SIGNALS:
315
319
320// --------------------------------------------------
321
322private:
323
324 const QExplicitlySharedDataPointer<GeoIfaceSharedData> s;
325
326 class Private;
327 Private* const d = nullptr;
328
329 Q_DISABLE_COPY(MapWidget)
330};
331
332} // namespace Digikam
Definition abstractmarkertiler.h:35
Definition geocoordinates.h:44
QPair< GeoCoordinates, GeoCoordinates > Pair
Definition geocoordinates.h:59
Definition geodragdrophandler.h:30
Helper class to access data in models.
Definition geomodelhelper.h:37
Definition mapwidget_p.h:80
The central map view class of geolocation interface.
Definition mapwidget.h:77
void signalRegionSelectionChanged()
void signalLoadTracksFromAlbums()
void signalRemoveCurrentFilter()
void signalUngroupedModelChanged(const int index)
void signalStickyModeChanged()
void signalMouseModeChanged(const Digikam::GeoMouseModes &currentMouseMode)
Definition trackmanager.h:36
Definition datefolderview.cpp:34
QList< int > QIntList
Definition geoifacetypes.h:48