Marble
10 #include "LayerManager.h"
13 #include "MarbleDebug.h"
14 #include "AbstractDataPlugin.h"
15 #include "AbstractDataPluginItem.h"
16 #include "GeoPainter.h"
17 #include "RenderPlugin.h"
18 #include "LayerInterface.h"
19 #include "RenderState.h"
21 #include <QElapsedTimer>
26 class Q_DECL_HIDDEN LayerManager::Private
29 Private(LayerManager *parent);
32 void updateVisibility(
bool visible,
const QString &nameId );
34 LayerManager *
const q;
40 RenderState m_renderState;
42 bool m_showBackground;
43 bool m_showRuntimeTrace;
46 LayerManager::Private::Private(LayerManager *parent) :
49 m_showBackground(true),
50 m_showRuntimeTrace(false)
54 LayerManager::Private::~Private()
58 void LayerManager::Private::updateVisibility(
bool visible,
const QString &nameId )
60 emit q->visibilityChanged( nameId, visible );
64 LayerManager::LayerManager(
QObject *parent) :
70 LayerManager::~LayerManager()
75 bool LayerManager::showBackground()
const
77 return d->m_showBackground;
80 bool LayerManager::showRuntimeTrace()
const
82 return d->m_showRuntimeTrace;
85 void LayerManager::addRenderPlugin(RenderPlugin *renderPlugin)
87 d->m_renderPlugins.append(renderPlugin);
94 this, SLOT(updateVisibility(
bool,
QString)));
97 AbstractDataPlugin *
const dataPlugin = qobject_cast<AbstractDataPlugin *>(renderPlugin);
99 d->m_dataPlugins.append(dataPlugin);
105 return d->m_dataPlugins;
112 for(
auto *plugin: d->m_dataPlugins ) {
113 itemList.
append( plugin->whichItemAt( curpos ) );
120 d->m_renderState = RenderState(QStringLiteral(
"Marble"));
126 if ( d->m_showBackground ) {
128 << QStringLiteral(
"STARS")
129 << QStringLiteral(
"BEHIND_TARGET");
133 << QStringLiteral(
"SURFACE")
134 << QStringLiteral(
"HOVERS_ABOVE_SURFACE")
135 << QStringLiteral(
"GRATICULE")
136 << QStringLiteral(
"PLACEMARKS")
137 << QStringLiteral(
"ATMOSPHERE")
138 << QStringLiteral(
"ORBIT")
139 << QStringLiteral(
"ALWAYS_ON_TOP")
140 << QStringLiteral(
"FLOAT_ITEM")
141 << QStringLiteral(
"USER_TOOLS");
144 for(
const auto& renderPosition: renderPositions ) {
148 for(
auto *renderPlugin: d->m_renderPlugins ) {
149 if ( renderPlugin && renderPlugin->renderPosition().contains( renderPosition ) ) {
150 if ( renderPlugin->enabled() && renderPlugin->visible() ) {
151 if ( !renderPlugin->isInitialized() ) {
152 renderPlugin->initialize();
161 for(
auto *layer: d->m_internalLayers ) {
162 if ( layer && layer->renderPosition().contains( renderPosition ) ) {
168 std::sort( layers.
begin(), layers.
end(), [] (
const LayerInterface *
const one,
const LayerInterface *
const two ) ->
bool {
169 Q_ASSERT( one && two );
170 return one->zValue() < two->zValue();
175 for(
auto *layer: layers ) {
177 layer->render( painter, viewport, renderPosition,
nullptr );
178 d->m_renderState.addChild( layer->renderState() );
183 if ( d->m_showRuntimeTrace ) {
184 const int totalElapsed = totalTime.
elapsed();
185 const int fps = 1000.0/totalElapsed;
186 traceList.
append(
QString(
"Total: %1 ms (%2 fps)" ).arg( totalElapsed, 3 ).arg( fps ) );
196 for (
const auto &text: traceList ) {
207 void LayerManager::setShowBackground(
bool show )
209 d->m_showBackground = show;
212 void LayerManager::setShowRuntimeTrace(
bool show )
214 d->m_showRuntimeTrace = show;
219 if (!d->m_internalLayers.contains(layer)) {
220 d->m_internalLayers.push_back(layer);
226 d->m_internalLayers.removeAll(layer);
231 return d->m_internalLayers;
234 RenderState LayerManager::renderState()
const
236 return d->m_renderState;
241 #include "moc_LayerManager.cpp"
void append(const T &value)
QList< AbstractDataPluginItem * > whichItemAt(const QPoint &curpos) const
Returns all items of dataPlugins on the position curpos.
void pluginSettingsChanged()
This signal is emitted when the settings of a plugin changed.
void setBackgroundMode(Qt::BGMode mode)
void repaintNeeded(const QRegion &dirtyRegion=QRegion())
This signal is emitted when the repaint of the view was requested by a plugin.
void setBackground(const QBrush &brush)
void push_back(const T &value)
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
A public class that controls what is visible in the viewport of a Marble map.
void removeLayer(LayerInterface *layer)
Remove a layer from being included in rendering.
QFontMetrics fontMetrics() const const
Binds a QML item to a specific geodetic location in screen coordinates.
qint64 elapsed() const const
A painter that allows to draw geometric primitives on the map.
void drawText(const GeoDataCoordinates &position, const QString &text, qreal xOffset=0.0, qreal yOffset=0.0, qreal width=0.0, qreal height=0.0, const QTextOption &option=QTextOption())
Draws the given text at a given geographic position. The text is drawn starting at the given position...
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const
QList< AbstractDataPlugin * > dataPlugins() const
Returns a list of all DataPlugins on the layer.
void setFont(const QFont &font)
void renderPluginInitialized(RenderPlugin *renderPlugin)
Signal that a render item has been initialized.
void addLayer(LayerInterface *layer)
Add a layer to be included in rendering.
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Thu Sep 21 2023 04:12:27 by
doxygen 1.8.17 written
by
Dimitri van Heesch, © 1997-2006
KDE's Doxygen guidelines are available online.