32#include "moc_qgstiledscenerendererpropertieswidget.cpp"
34using namespace Qt::StringLiterals;
39 if ( !rendererAbstractMetadata )
42 if ( !rendererMetadata )
47 if ( !iconName.isEmpty() )
56void QgsTiledSceneRendererPropertiesWidget::initRendererWidgetFunctions()
58 static bool sInitialized =
false;
62 initTiledSceneRenderer( u
"texture"_s, QgsTiledSceneTextureRendererWidget::create, u
"styleicons/tiledscenetexture.svg"_s );
63 initTiledSceneRenderer( u
"wireframe"_s, QgsTiledSceneWireframeRendererWidget::create, u
"styleicons/tiledscenewireframe.svg"_s );
75 layout()->setContentsMargins( 0, 0, 0, 0 );
78 initRendererWidgetFunctions();
82 for (
const QString &name : renderers )
85 cboRenderers->addItem( m->icon(), m->visibleName(), name );
88 cboRenderers->setCurrentIndex( -1 );
90 connect( cboRenderers,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsTiledSceneRendererPropertiesWidget::rendererChanged );
92 connect( mBlendModeComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsTiledSceneRendererPropertiesWidget::emitWidgetChanged );
96 mMaxErrorSpinBox->setClearValue( 3 );
98 connect( mMaxErrorSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
this, &QgsTiledSceneRendererPropertiesWidget::emitWidgetChanged );
110 mActiveWidget->setContext( context );
116 mLayer = qobject_cast<QgsTiledSceneLayer *>( layer );
118 mBlockChangedSignal =
true;
119 mOpacityWidget->setOpacity( mLayer->opacity() );
121 mBlendModeComboBox->setBlendMode( mLayer->blendMode() );
123 if ( mLayer->renderer() )
126 const QString rendererName = mLayer->renderer()->type();
128 const int rendererIdx = cboRenderers->findData( rendererName );
129 cboRenderers->setCurrentIndex( rendererIdx );
132 Q_ASSERT( rendererIdx != -1 &&
"there must be a renderer!" );
134 mMaxErrorSpinBox->setValue( mLayer->renderer()->maximumScreenError() );
135 mMaxErrorUnitWidget->setUnit( mLayer->renderer()->maximumScreenErrorUnit() );
138 mBlockChangedSignal =
false;
144 mActiveWidget->setDockMode(
dockMode );
150 mLayer->setOpacity( mOpacityWidget->opacity() );
151 mLayer->setBlendMode( mBlendModeComboBox->blendMode() );
154 mLayer->setRenderer( mActiveWidget->renderer() );
155 else if ( !cboRenderers->currentData().toString().isEmpty() )
164 mLayer->renderer()->setMaximumScreenError( mMaxErrorSpinBox->value() );
165 mLayer->renderer()->setMaximumScreenErrorUnit( mMaxErrorUnitWidget->unit() );
168void QgsTiledSceneRendererPropertiesWidget::rendererChanged()
170 if ( cboRenderers->currentIndex() == -1 )
172 QgsDebugError( u
"No current item -- this should never happen!"_s );
176 const QString rendererName = cboRenderers->currentData().toString();
179 std::unique_ptr<QgsTiledSceneRenderer> oldRenderer;
180 std::unique_ptr<QgsTiledSceneRenderer> newRenderer;
182 newRenderer.reset( mActiveWidget->renderer() );
186 oldRenderer = std::move( newRenderer );
190 oldRenderer.reset( mLayer->renderer()->clone() );
196 stackedWidget->removeWidget( mActiveWidget );
198 delete mActiveWidget;
199 mActiveWidget =
nullptr;
202 QgsTiledSceneRendererWidget *widget =
nullptr;
204 if ( rendererMetadata )
211 mActiveWidget = widget;
212 stackedWidget->addWidget( mActiveWidget );
213 stackedWidget->setCurrentWidget( mActiveWidget );
215 if ( mMapCanvas || mMessageBar )
217 QgsSymbolWidgetContext context;
220 mActiveWidget->setContext( context );
230 stackedWidget->setCurrentWidget( pageNoWidget );
235void QgsTiledSceneRendererPropertiesWidget::emitWidgetChanged()
237 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 *)