Marble

GeoPolyline.h
1// SPDX-License-Identifier: LGPL-2.1-or-later
2//
3// SPDX-FileCopyrightText: 2019 Torsten Rahn <rahn@kde.org>
4//
5
6#ifndef MARBLE_DECLARATIVE_GEOPOLYLINEITEM_H
7#define MARBLE_DECLARATIVE_GEOPOLYLINEITEM_H
8
9#include "GeoDataCoordinates.h"
10#include "GeoDataLineString.h"
11#include <QObject>
12#include <QQuickItem>
13#include <QtQml>
14
15/**
16 * Represents a coordinate with the properties of a name and coordinates
17 *
18 * @todo: Introduce GeoDataCoordinates
19 */
20namespace Marble
21{
22class MarbleQuickItem;
23
24class GeoPolyline : public QQuickItem
25{
27 Q_PROPERTY(qreal x READ readonlyX NOTIFY readonlyXChanged)
28 Q_PROPERTY(qreal y READ readonlyY NOTIFY readonlyYChanged)
29 Q_PROPERTY(qreal width READ readonlyWidth NOTIFY readonlyWidthChanged)
30 Q_PROPERTY(qreal height READ readonlyHeight NOTIFY readonlyHeightChanged)
31
32 Q_PROPERTY(Marble::MarbleQuickItem *map READ map WRITE setMap NOTIFY mapChanged)
33
34 Q_PROPERTY(QVariantList geoCoordinates READ geoCoordinates WRITE setGeoCoordinates NOTIFY geoCoordinatesChanged)
35 Q_PROPERTY(QVariantList screenCoordinates READ screenCoordinates NOTIFY screenCoordinatesChanged)
36 Q_PROPERTY(bool observable READ observable NOTIFY observableChanged)
37 Q_PROPERTY(bool tessellate READ tessellate WRITE setTessellate NOTIFY tessellateChanged)
38 Q_PROPERTY(QColor lineColor READ lineColor WRITE setLineColor NOTIFY lineColorChanged)
39 Q_PROPERTY(qreal lineWidth READ lineWidth WRITE setLineWidth NOTIFY lineWidthChanged)
40
41 // When enabled only those screenCoordinates are calculated and rendered that are visible on the screen.
42 // Setting this to false can severely reduce performance. Therefore this defaults to true.
43 Q_PROPERTY(bool clipScreenCoordinates READ clipScreenCoordinates WRITE setClipScreenCoordinates NOTIFY clipScreenCoordinatesChanged)
44
45public:
46 /** Constructor */
47 explicit GeoPolyline(QQuickItem *parent = nullptr);
48
49 MarbleQuickItem *map() const;
50
51 void setMap(MarbleQuickItem *map);
52
53 bool observable() const;
54
55 QVariantList geoCoordinates() const;
56
57 void setGeoCoordinates(const QVariantList &geoCoordinates);
58
59 QVariantList screenCoordinates() const;
60
61 QColor lineColor() const;
62 qreal lineWidth() const;
63 bool tessellate() const;
64 bool clipScreenCoordinates() const;
65
66 void setLineColor(const QColor &lineColor);
67 void setLineWidth(const qreal lineWidth);
68 void setTessellate(bool tessellate);
69 void setClipScreenCoordinates(bool clipped);
70
71 qreal readonlyX() const;
72
73 qreal readonlyY() const;
74
75 qreal readonlyWidth() const;
76
77 qreal readonlyHeight() const;
78
80 void mapChanged(MarbleQuickItem *map);
81 void observableChanged(bool observable);
82 void geoCoordinatesChanged();
83 void screenCoordinatesChanged();
84 void lineColorChanged(QColor lineColor);
85 void lineWidthChanged(qreal lineWidth);
86
87 void tessellateChanged(bool tessellate);
88 void clipScreenCoordinatesChanged(bool enabled);
89
90 void readonlyXChanged();
91 void readonlyYChanged();
92 void readonlyWidthChanged();
93 void readonlyHeightChanged();
94
95protected:
96 QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override;
97
98private:
99 MarbleQuickItem *m_map = nullptr;
100 bool m_observable;
101 GeoDataLineString m_lineString;
102 QVariantList m_geoCoordinates;
103 QList<QPolygonF> m_screenPolygons;
104 QVariantList m_screenCoordinates;
105 QColor m_lineColor;
106 qreal m_lineWidth;
107 bool m_tessellate;
108 bool m_clipScreenCoordinates;
109
110 void updateScreenPositions();
111};
112}
113
114#endif // MARBLE_DECLARATIVE_GEOPOLYLINEITEM_H
Binds a QML item to a specific geodetic location in screen coordinates.
Q_OBJECTQ_OBJECT
Q_PROPERTY(...)
Q_SIGNALSQ_SIGNALS
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Fri Dec 27 2024 11:50:59 by doxygen 1.12.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.