#pragma once #include #include "QGCMapPolygon.h" class GeoArea : public QGCMapPolygon { Q_OBJECT public: GeoArea(QObject *parent = nullptr); GeoArea(const GeoArea &other, QObject *parent = nullptr); GeoArea &operator=(const GeoArea &other); Q_PROPERTY(QString mapVisualQML READ mapVisualQML CONSTANT) Q_PROPERTY(QString editorQML READ editorQML CONSTANT) virtual QString mapVisualQML(void) const = 0; virtual QString editorQML(void) const = 0; virtual void saveToJson(QJsonObject &jsonObject); virtual bool loadFromJson(const QJsonObject &jsonObject, QString &errorString); virtual GeoArea *clone(QObject *parent = nullptr) const = 0; bool isSimplePolygon(); // static Members static const char *wimaAreaName; static const char *areaTypeName; static const char *settingsGroup; private: void init(); }; // Example usage: // QmlObjecListModel list; // .... add areas .... // auto area = getArea(list); // returns the first // WimaMeasurementArea or nullptr template inline AreaPtr getGeoArea(QObjectList &list) { static_assert(std::is_pointer::value, "AreaPtr must be a pointer type."); for (int i = 0; i < list.count(); ++i) { auto obj = list[i]; auto area = qobject_cast(obj); if (area != nullptr) { return area; } } return nullptr; } bool copyAreaList(const QmlObjectListModel &from, QmlObjectListModel &to, QObject *parent);