147 lines
4.5 KiB
C++
Executable File
147 lines
4.5 KiB
C++
Executable File
/**
|
|
* @RDE_HEADER@
|
|
* Interface of GeoImage
|
|
* $Id$
|
|
* $HeadURL$
|
|
* $Author$
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "abstract_single_point_map_object.h"
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
namespace SituationMap
|
|
{
|
|
|
|
/**
|
|
* @brief The GeoImage class supports displaying image proxies like a small dot.
|
|
* By clicking of the proxy the image and an optional description will be displayed.
|
|
*/
|
|
class GeoImage : public virtual AbstractSinglePointMapObject
|
|
{
|
|
public:
|
|
|
|
struct GeoImageData
|
|
{
|
|
MarkerSymbolType proxyMarker = MarkerSymbolType::Undefined; ///< if not set, a Diamond will be used
|
|
int proxyMarkerSize = 20;
|
|
QColor proxyMarkerColor = Qt::red;
|
|
QImage proxyImage; ///< if not set, marker will be used
|
|
QSize proxyImageDefaultSize;
|
|
|
|
QImage mainImage;
|
|
QString description;
|
|
bool pinEnabled = false;
|
|
|
|
/**
|
|
* @brief operator== Compare two objects
|
|
* @param other to be compared with
|
|
* @return true if identical, otherwise false.
|
|
*/
|
|
bool operator==(const GeoImageData &other) const
|
|
{
|
|
return ((this->description == other.description) &&
|
|
(this->mainImage == other.mainImage) &&
|
|
(this->proxyImage == other.proxyImage) &&
|
|
(this->proxyMarkerSize == other.proxyMarkerSize) &&
|
|
(this->proxyMarkerColor== other.proxyMarkerColor) &&
|
|
(this->proxyMarker == other.proxyMarker)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @brief operator!= Compare two objects
|
|
* @param other to be compared with
|
|
* @return true if NOT identical, otherwise false.
|
|
*/
|
|
bool operator!=(const GeoImageData &other) const
|
|
{
|
|
return !(*this == other);
|
|
}
|
|
|
|
QString toString() const
|
|
{
|
|
QString str = QLatin1String("GeoImage(");
|
|
if (proxyImage.isNull())
|
|
str.append(QLatin1String("noProxyImage, "));
|
|
else
|
|
str.append(QLatin1String("withProxyImage, "));
|
|
|
|
if (mainImage.isNull())
|
|
str.append(QLatin1String("noMainImage, "));
|
|
else
|
|
str.append(QLatin1String("withMainImage, "));
|
|
|
|
str.append(QStringLiteral("desc='%1')").arg(description));
|
|
|
|
return str;
|
|
}
|
|
};
|
|
|
|
|
|
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
* Don't use "= default" because of bug in VS2015 JT 2016/11/7
|
|
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
|
|
GeoImage() : AbstractSinglePointMapObject() {;} ///< Contructor
|
|
|
|
virtual ~GeoImage() = default; ///< Destructor
|
|
|
|
/*! \name Set data in one call */
|
|
//@{
|
|
virtual GeoImageData geoImageData() const = 0;
|
|
virtual void setGeoImageData(const GeoImageData &geoImageData) = 0;
|
|
//@}
|
|
|
|
/*! \name Set data separately */
|
|
//@{
|
|
virtual MarkerSymbolType proxyMarker() const = 0;
|
|
virtual void setProxyMarker(const MarkerSymbolType &proxyMarker) = 0;
|
|
virtual int proxyMarkerSize() const = 0;
|
|
virtual void setProxyMarkerSize(int proxyMarkerSize) = 0;
|
|
virtual QColor proxyMarkerColor() const = 0;
|
|
virtual void setProxyMarkerColor(const QColor &proxyMarkerColor) = 0;
|
|
|
|
virtual QImage proxyImage() const = 0;
|
|
virtual QSize proxyImageDefaultSize() const = 0;
|
|
|
|
/**
|
|
* @brief setProxyImage to set a proxy image be displayed on the map (instead of marker)
|
|
* @param proxyImage proxy image be displayed on the map
|
|
* @param proxyImageDefaultSize default size image if (user) scale is 1.0.
|
|
* The image will be scaled to the proxyImageDefaultSize * scale.
|
|
* To ensure that the image will be displayed with high resolution, the proxyImage must have this resolution.
|
|
* Example:
|
|
* Set an image of QSize(100,100), and set a proxyImageDefaultSize of QSize(20,20).
|
|
* Initially (scale = 1.0) the image will be downscaled to QSize(20,20).
|
|
* If the uses increases the scale to 4.0, the image will be scaled to QSize(80,80)
|
|
* This should ensure a good image quality.
|
|
*/
|
|
virtual void setProxyImage(const QImage &proxyImage, const QSize &proxyImageDefaultSize) = 0;
|
|
|
|
|
|
virtual QImage mainImage() const = 0;
|
|
virtual void setMainImage(const QImage &mainImage) = 0;
|
|
|
|
virtual QString description() const = 0;
|
|
virtual void setDescription(const QString &description) = 0;
|
|
|
|
// for better visibility at 3D
|
|
virtual void setPinEnabled(bool enablePin) = 0;
|
|
virtual bool isPinEnabled() const = 0;
|
|
//@}
|
|
|
|
|
|
/*! \name Create default widget */
|
|
//@{
|
|
virtual QWidget *createWidget(QWidget *parent = nullptr) const = 0;
|
|
//@}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
} // namespace SituationMap
|