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 );
95 mMaxErrorUnitWidget->setUnits(
98 mMaxErrorSpinBox->setClearValue( 3 );
100 connect( mMaxErrorSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
this, &QgsTiledSceneRendererPropertiesWidget::emitWidgetChanged );
112 mActiveWidget->setContext( context );
118 mLayer = qobject_cast<QgsTiledSceneLayer *>( layer );
120 mBlockChangedSignal =
true;
121 mOpacityWidget->setOpacity( mLayer->opacity() );
123 mBlendModeComboBox->setBlendMode( mLayer->blendMode() );
125 if ( mLayer->renderer() )
128 const QString rendererName = mLayer->renderer()->type();
130 const int rendererIdx = cboRenderers->findData( rendererName );
131 cboRenderers->setCurrentIndex( rendererIdx );
134 Q_ASSERT( rendererIdx != -1 &&
"there must be a renderer!" );
136 mMaxErrorSpinBox->setValue( mLayer->renderer()->maximumScreenError() );
137 mMaxErrorUnitWidget->setUnit( mLayer->renderer()->maximumScreenErrorUnit() );
140 mBlockChangedSignal =
false;
146 mActiveWidget->setDockMode(
dockMode );
152 mLayer->setOpacity( mOpacityWidget->opacity() );
153 mLayer->setBlendMode( mBlendModeComboBox->blendMode() );
156 mLayer->setRenderer( mActiveWidget->renderer() );
157 else if ( !cboRenderers->currentData().toString().isEmpty() )
166 mLayer->renderer()->setMaximumScreenError( mMaxErrorSpinBox->value() );
167 mLayer->renderer()->setMaximumScreenErrorUnit( mMaxErrorUnitWidget->unit() );
170void QgsTiledSceneRendererPropertiesWidget::rendererChanged()
172 if ( cboRenderers->currentIndex() == -1 )
174 QgsDebugError( u
"No current item -- this should never happen!"_s );
178 const QString rendererName = cboRenderers->currentData().toString();
181 std::unique_ptr<QgsTiledSceneRenderer> oldRenderer;
182 std::unique_ptr<QgsTiledSceneRenderer> newRenderer;
184 newRenderer.reset( mActiveWidget->renderer() );
188 oldRenderer = std::move( newRenderer );
192 oldRenderer.reset( mLayer->renderer()->clone() );
198 stackedWidget->removeWidget( mActiveWidget );
200 delete mActiveWidget;
201 mActiveWidget =
nullptr;
204 QgsTiledSceneRendererWidget *widget =
nullptr;
206 if ( rendererMetadata )
213 mActiveWidget = widget;
214 stackedWidget->addWidget( mActiveWidget );
215 stackedWidget->setCurrentWidget( mActiveWidget );
217 if ( mMapCanvas || mMessageBar )
219 QgsSymbolWidgetContext context;
222 mActiveWidget->setContext( context );
232 stackedWidget->setCurrentWidget( pageNoWidget );
237void QgsTiledSceneRendererPropertiesWidget::emitWidgetChanged()
239 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 *)