30#include "moc_qgstiledscenerendererpropertieswidget.cpp"
35 if ( !rendererAbstractMetadata )
38 if ( !rendererMetadata )
43 if ( !iconName.isEmpty() )
52void QgsTiledSceneRendererPropertiesWidget::initRendererWidgetFunctions()
54 static bool sInitialized =
false;
58 initTiledSceneRenderer( QStringLiteral(
"texture" ), QgsTiledSceneTextureRendererWidget::create, QStringLiteral(
"styleicons/tiledscenetexture.svg" ) );
59 initTiledSceneRenderer( QStringLiteral(
"wireframe" ), QgsTiledSceneWireframeRendererWidget::create, QStringLiteral(
"styleicons/tiledscenewireframe.svg" ) );
71 layout()->setContentsMargins( 0, 0, 0, 0 );
74 initRendererWidgetFunctions();
78 for (
const QString &name : renderers )
81 cboRenderers->addItem( m->icon(), m->visibleName(), name );
84 cboRenderers->setCurrentIndex( -1 );
86 connect( cboRenderers,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsTiledSceneRendererPropertiesWidget::rendererChanged );
88 connect( mBlendModeComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsTiledSceneRendererPropertiesWidget::emitWidgetChanged );
92 mMaxErrorSpinBox->setClearValue( 3 );
94 connect( mMaxErrorSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
this, &QgsTiledSceneRendererPropertiesWidget::emitWidgetChanged );
106 mActiveWidget->setContext( context );
112 mLayer = qobject_cast<QgsTiledSceneLayer *>( layer );
114 mBlockChangedSignal =
true;
115 mOpacityWidget->setOpacity( mLayer->opacity() );
117 mBlendModeComboBox->setBlendMode( mLayer->blendMode() );
119 if ( mLayer->renderer() )
122 const QString rendererName = mLayer->renderer()->type();
124 const int rendererIdx = cboRenderers->findData( rendererName );
125 cboRenderers->setCurrentIndex( rendererIdx );
128 Q_ASSERT( rendererIdx != -1 &&
"there must be a renderer!" );
130 mMaxErrorSpinBox->setValue( mLayer->renderer()->maximumScreenError() );
131 mMaxErrorUnitWidget->setUnit( mLayer->renderer()->maximumScreenErrorUnit() );
134 mBlockChangedSignal =
false;
140 mActiveWidget->setDockMode(
dockMode );
146 mLayer->setOpacity( mOpacityWidget->opacity() );
147 mLayer->setBlendMode( mBlendModeComboBox->blendMode() );
150 mLayer->setRenderer( mActiveWidget->renderer() );
151 else if ( !cboRenderers->currentData().toString().isEmpty() )
160 mLayer->renderer()->setMaximumScreenError( mMaxErrorSpinBox->value() );
161 mLayer->renderer()->setMaximumScreenErrorUnit( mMaxErrorUnitWidget->unit() );
164void QgsTiledSceneRendererPropertiesWidget::rendererChanged()
166 if ( cboRenderers->currentIndex() == -1 )
168 QgsDebugError( QStringLiteral(
"No current item -- this should never happen!" ) );
172 const QString rendererName = cboRenderers->currentData().toString();
175 std::unique_ptr<QgsTiledSceneRenderer> oldRenderer;
176 std::unique_ptr<QgsTiledSceneRenderer> newRenderer;
178 newRenderer.reset( mActiveWidget->renderer() );
182 oldRenderer = std::move( newRenderer );
186 oldRenderer.reset( mLayer->renderer()->clone() );
192 stackedWidget->removeWidget( mActiveWidget );
194 delete mActiveWidget;
195 mActiveWidget =
nullptr;
198 QgsTiledSceneRendererWidget *widget =
nullptr;
200 if ( rendererMetadata )
207 mActiveWidget = widget;
208 stackedWidget->addWidget( mActiveWidget );
209 stackedWidget->setCurrentWidget( mActiveWidget );
211 if ( mMapCanvas || mMessageBar )
213 QgsSymbolWidgetContext context;
216 mActiveWidget->setContext( context );
226 stackedWidget->setCurrentWidget( pageNoWidget );
231void QgsTiledSceneRendererPropertiesWidget::emitWidgetChanged()
233 if ( !mBlockChangedSignal )
@ Millimeters
Millimeters.
@ Points
Points (e.g., for font sizes).
@ MetersInMapUnits
Meters value as Map units.
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
static QgsTiledSceneRendererRegistry * tiledSceneRendererRegistry()
Returns the application's tiled scene renderer registry, used for managing tiled scene layer 2D rende...
Base class for all map layer types.
static bool layerIsContainedInGroupLayer(QgsProject *project, QgsMapLayer *layer)
Returns true if the specified layer is a child layer from any QgsGroupLayer in the given project.
static QgsProject * instance()
Returns the QgsProject singleton instance.
A container for the context for various read/write operations on objects.
A database of saved style entities, including symbols, color ramps, text formats and others.
Contains settings which reflect the context in which a symbol (or renderer) widget is shown,...
void setMapCanvas(QgsMapCanvas *canvas)
Sets the map canvas associated with the widget.
void setMessageBar(QgsMessageBar *bar)
Sets the message bar associated with the widget.
QgsMapCanvas * mapCanvas() const
Returns the map canvas associated with the widget.
QgsMessageBar * messageBar() const
Returns the message bar associated with the widget.
Represents a map layer supporting display of tiled scene objects.
Registry of 2D renderers for tiled scenes.
QgsTiledSceneRendererAbstractMetadata * rendererMetadata(const QString &rendererName)
Returns the metadata for a specified renderer.
QStringList renderersList() const
Returns a list of available renderers.
#define QgsDebugMsgLevel(str, level)
#define QgsDebugError(str)
QgsTiledSceneRendererWidget *(* QgsTiledSceneRendererWidgetFunc)(QgsTiledSceneLayer *, QgsStyle *, QgsTiledSceneRenderer *)