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>
26class 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;
46LayerManager::Private::Private(LayerManager *parent) :
49 m_showBackground(true),
50 m_showRuntimeTrace(false)
54LayerManager::Private::~Private()
58void LayerManager::Private::updateVisibility(
bool visible,
const QString &nameId )
60 emit q->visibilityChanged( nameId, visible );
64LayerManager::LayerManager(
QObject *parent) :
70LayerManager::~LayerManager()
75bool LayerManager::showBackground()
const
77 return d->m_showBackground;
80bool LayerManager::showRuntimeTrace()
const
82 return d->m_showRuntimeTrace;
85void LayerManager::addRenderPlugin(RenderPlugin *renderPlugin)
87 d->m_renderPlugins.append(renderPlugin);
90 this, SIGNAL(pluginSettingsChanged()));
92 this, SIGNAL(repaintNeeded(
QRegion)));
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();
153 emit renderPluginInitialized( renderPlugin );
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 ) {
207void LayerManager::setShowBackground(
bool show )
209 d->m_showBackground = show;
212void LayerManager::setShowRuntimeTrace(
bool show )
214 d->m_showRuntimeTrace = show;
217void LayerManager::addLayer(LayerInterface *layer)
219 if (!d->m_internalLayers.contains(layer)) {
220 d->m_internalLayers.push_back(layer);
224void LayerManager::removeLayer(LayerInterface *layer)
226 d->m_internalLayers.removeAll(layer);
231 return d->m_internalLayers;
234RenderState LayerManager::renderState()
const
236 return d->m_renderState;
241#include "moc_LayerManager.cpp"
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...
A public class that controls what is visible in the viewport of a Marble map.
Binds a QML item to a specific geodetic location in screen coordinates.
qint64 elapsed() const const
void append(QList< T > &&value)
void push_back(parameter_type value)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
QFontMetrics fontMetrics() const const
void setBackground(const QBrush &brush)
void setBackgroundMode(Qt::BGMode mode)
void setFont(const QFont &font)
QString arg(Args &&... args) const const