File indexing completed on 2025-03-09 03:57:15
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2009-12-01 0007 * Description : Base-class for backends for geolocation interface 0008 * 0009 * SPDX-FileCopyrightText: 2010-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0010 * SPDX-FileCopyrightText: 2009-2011 by Michael G. Hansen <mike at mghansen dot de> 0011 * SPDX-FileCopyrightText: 2014 by Justus Schwartz <justus at gmx dot li> 0012 * 0013 * SPDX-License-Identifier: GPL-2.0-or-later 0014 * 0015 * ============================================================ */ 0016 0017 #ifndef DIGIKAM_MAP_BACKEND_H 0018 #define DIGIKAM_MAP_BACKEND_H 0019 0020 // Qt includes 0021 0022 #include <QModelIndex> 0023 0024 // Local includes 0025 0026 #include "geoifacecommon.h" 0027 #include "digikam_export.h" 0028 0029 class QMenu; 0030 class QWidget; 0031 0032 class KConfigGroup; 0033 0034 #ifdef HAVE_GEOLOCATION 0035 0036 namespace Marble 0037 { 0038 class GeoDataLatLonBox; 0039 } 0040 0041 #endif 0042 0043 namespace Digikam 0044 { 0045 0046 class DIGIKAM_EXPORT MapBackend : public QObject 0047 { 0048 0049 Q_OBJECT 0050 0051 public: 0052 0053 explicit MapBackend(const QExplicitlySharedDataPointer<GeoIfaceSharedData>& sharedData, QObject* const parent); 0054 ~MapBackend() override; 0055 0056 virtual QString backendName() const = 0; 0057 virtual QString backendHumanName() const = 0; 0058 virtual QWidget* mapWidget() = 0; 0059 virtual void releaseWidget(GeoIfaceInternalWidgetInfo* const info) = 0; 0060 virtual void mapWidgetDocked(const bool state) = 0; 0061 0062 virtual GeoCoordinates getCenter() const = 0; 0063 virtual void setCenter(const GeoCoordinates& coordinate) = 0; 0064 0065 virtual bool isReady() const = 0; 0066 0067 virtual void zoomIn() = 0; 0068 virtual void zoomOut() = 0; 0069 0070 virtual void saveSettingsToGroup(KConfigGroup* const group) = 0; 0071 virtual void readSettingsFromGroup(const KConfigGroup* const group) = 0; 0072 0073 virtual void addActionsToConfigurationMenu(QMenu* const configurationMenu) = 0; 0074 0075 virtual void updateMarkers() = 0; 0076 virtual void updateClusters() = 0; 0077 0078 virtual bool screenCoordinates(const GeoCoordinates& coordinates, 0079 QPoint* const point) = 0; 0080 virtual bool geoCoordinates(const QPoint& point, 0081 GeoCoordinates* const coordinates) const = 0; 0082 virtual QSize mapSize() const = 0; 0083 0084 virtual void setZoom(const QString& newZoom) = 0; 0085 virtual QString getZoom() const = 0; 0086 0087 virtual int getMarkerModelLevel() = 0; 0088 virtual GeoCoordinates::PairList getNormalizedBounds() = 0; 0089 /* 0090 virtual void updateDragDropMarker(const QPoint& pos, 0091 const GeoIfaceDragData* const dragData) = 0; 0092 virtual void updateDragDropMarkerPosition(const QPoint& pos) = 0; 0093 */ 0094 virtual void updateActionAvailability() = 0; 0095 0096 virtual void regionSelectionChanged() = 0; 0097 virtual void mouseModeChanged() = 0; 0098 0099 const QExplicitlySharedDataPointer<GeoIfaceSharedData> s; 0100 0101 virtual void setActive(const bool state) = 0; 0102 0103 #ifdef HAVE_GEOLOCATION 0104 0105 virtual void centerOn(const Marble::GeoDataLatLonBox& box, 0106 const bool useSaneZoomLevel = true) = 0; 0107 0108 #endif 0109 0110 virtual void reload() = 0; 0111 0112 public Q_SLOTS: 0113 0114 virtual void slotClustersNeedUpdating() = 0; 0115 virtual void slotThumbnailAvailableForIndex(const QVariant& index, 0116 const QPixmap& pixmap); 0117 virtual void slotTrackManagerChanged(); 0118 0119 protected: 0120 0121 void addCommonOptions(QMenu* const configurationMenu); 0122 0123 protected Q_SLOTS: 0124 0125 void slotExportScreenshot(); 0126 0127 Q_SIGNALS: 0128 0129 void signalBackendReadyChanged(const QString& backendName); 0130 void signalClustersMoved(const QIntList& clusterIndices, 0131 const QPair<int, QModelIndex>& snapTarget); 0132 void signalClustersClicked(const QIntList& clusterIndices); 0133 void signalMarkersMoved(const QIntList& markerIndices); 0134 void signalZoomChanged(const QString& newZoom); 0135 void signalSelectionHasBeenMade(const Digikam::GeoCoordinates::Pair& coordinates); 0136 }; 0137 0138 } // namespace Digikam 0139 0140 #endif // DIGIKAM_MAP_BACKEND_H