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