48 setupBlankUi( layer->
name() );
52 connect( mLabelFieldComboBox,
static_cast<void ( QComboBox::* )(
const QString & )
>( &QComboBox::currentIndexChanged ),
this, &QgsPointDisplacementRendererWidget::mLabelFieldComboBox_currentIndexChanged );
53 connect( mRendererComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsPointDisplacementRendererWidget::mRendererComboBox_currentIndexChanged );
54 connect( mPlacementComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsPointDisplacementRendererWidget::mPlacementComboBox_currentIndexChanged );
55 connect( mCircleWidthSpinBox, static_cast <
void ( QDoubleSpinBox::* )(
double ) > ( &QDoubleSpinBox::valueChanged ),
this, &QgsPointDisplacementRendererWidget::mCircleWidthSpinBox_valueChanged );
56 connect( mCircleColorButton, &
QgsColorButton::colorChanged,
this, &QgsPointDisplacementRendererWidget::mCircleColorButton_colorChanged );
57 connect( mDistanceSpinBox, static_cast <
void ( QDoubleSpinBox::* )(
double ) > ( &QDoubleSpinBox::valueChanged ),
this, &QgsPointDisplacementRendererWidget::mDistanceSpinBox_valueChanged );
60 connect( mCircleModificationSpinBox, static_cast <
void ( QDoubleSpinBox::* )(
double ) > ( &QDoubleSpinBox::valueChanged ),
this, &QgsPointDisplacementRendererWidget::mCircleModificationSpinBox_valueChanged );
61 connect( mLabelDistanceFactorSpinBox, static_cast <
void ( QDoubleSpinBox::* )(
double ) > ( &QDoubleSpinBox::valueChanged ),
this, &QgsPointDisplacementRendererWidget::mLabelDistanceFactorSpinBox_valueChanged );
62 connect( mScaleDependentLabelsCheckBox, &QCheckBox::stateChanged,
this, &QgsPointDisplacementRendererWidget::mScaleDependentLabelsCheckBox_stateChanged );
63 connect( mRendererSettingsButton, &QPushButton::clicked,
this, &QgsPointDisplacementRendererWidget::mRendererSettingsButton_clicked );
64 this->layout()->setContentsMargins( 0, 0, 0, 0 );
80 blockAllSignals(
true );
90 for (
const QgsField &f : layerFields )
92 mLabelFieldComboBox->addItem( f.name() );
94 mLabelFieldComboBox->addItem( tr(
"None" ) );
97 if ( !currentLabelAttribute.isEmpty() )
99 mLabelFieldComboBox->setCurrentIndex( mLabelFieldComboBox->findText( currentLabelAttribute ) );
103 mLabelFieldComboBox->setCurrentIndex( mLabelFieldComboBox->findText( tr(
"None" ) ) );
109 QStringList::const_iterator it = rendererList.constBegin();
110 for ( ; it != rendererList.constEnd(); ++it )
112 if ( *it != QLatin1String(
"pointDisplacement" ) && *it != QLatin1String(
"pointCluster" ) && *it != QLatin1String(
"heatmapRenderer" ) )
119 mCircleColorButton->setColorDialogTitle( tr(
"Select Color" ) );
120 mCircleColorButton->setContext( QStringLiteral(
"symbology" ) );
121 mCircleColorButton->setAllowOpacity(
true );
122 mCircleColorButton->setShowNoColor(
true );
123 mCircleColorButton->setNoColorString( tr(
"Transparent Stroke" ) );
124 mLabelColorButton->setContext( QStringLiteral(
"symbology" ) );
125 mLabelColorButton->setColorDialogTitle( tr(
"Select Color" ) );
126 mLabelColorButton->setAllowOpacity(
true );
128 mCircleWidthSpinBox->setValue( mRenderer->
circleWidth() );
129 mCircleColorButton->setColor( mRenderer->
circleColor() );
130 mLabelColorButton->setColor( mRenderer->
labelColor() );
131 mLabelFontButton->setCurrentFont( mRenderer->
labelFont() );
132 mCircleModificationSpinBox->setClearValue( 0.0 );
134 mLabelDistanceFactorSpinBox->setClearValue( 0.5 );
136 mDistanceSpinBox->setValue( mRenderer->
tolerance() );
141 mPlacementComboBox->setCurrentIndex( mPlacementComboBox->findData( mRenderer->
placement() ) );
144 mMinLabelScaleWidget->setScale( std::max( mRenderer->
minimumLabelScale(), 0.0 ) );
147 mScaleDependentLabelsCheckBox->setCheckState( Qt::Checked );
151 mScaleDependentLabelsCheckBox->setCheckState( Qt::Unchecked );
152 mMinLabelScaleWidget->setEnabled(
false );
156 blockAllSignals(
false );
162 int rendererIndex = mRendererComboBox->findData( rendererName );
163 if ( rendererIndex != -1 )
165 mRendererComboBox->setCurrentIndex( rendererIndex );
166 mRendererComboBox_currentIndexChanged( rendererIndex );
171 connect( mLabelFontButton, &
QgsFontButton::changed,
this, &QgsPointDisplacementRendererWidget::labelFontChanged );
172 connect( mCenterSymbolToolButton, &
QgsSymbolButton::changed,
this, &QgsPointDisplacementRendererWidget::centerSymbolChanged );
173 mCenterSymbolToolButton->setDialogTitle( tr(
"Center symbol" ) );
174 mCenterSymbolToolButton->setLayer(
mLayer );
175 mCenterSymbolToolButton->registerExpressionContextGenerator(
this );
191 if ( mDistanceUnitWidget )
192 mDistanceUnitWidget->setMapCanvas( context.
mapCanvas() );
193 if ( mMinLabelScaleWidget )
195 mMinLabelScaleWidget->setMapCanvas( context.
mapCanvas() );
196 mMinLabelScaleWidget->setShowCurrentScaleButton(
true );
198 if ( mCenterSymbolToolButton )
200 mCenterSymbolToolButton->setMapCanvas( context.
mapCanvas() );
201 mCenterSymbolToolButton->setMessageBar( context.
messageBar() );
217 const auto constScopes = scopes;
225 void QgsPointDisplacementRendererWidget::mLabelFieldComboBox_currentIndexChanged(
const QString &text )
229 if ( text == tr(
"None" ) )
241 void QgsPointDisplacementRendererWidget::mRendererComboBox_currentIndexChanged(
int index )
243 QString rendererId = mRendererComboBox->itemData( index ).toString();
250 delete tempRenderWidget;
255 void QgsPointDisplacementRendererWidget::mPlacementComboBox_currentIndexChanged(
int index )
264 void QgsPointDisplacementRendererWidget::mRendererSettingsButton_clicked()
290 void QgsPointDisplacementRendererWidget::labelFontChanged()
297 mRenderer->
setLabelFont( mLabelFontButton->currentFont() );
301 void QgsPointDisplacementRendererWidget::mCircleWidthSpinBox_valueChanged(
double d )
310 void QgsPointDisplacementRendererWidget::mCircleColorButton_colorChanged(
const QColor &newColor )
321 void QgsPointDisplacementRendererWidget::mLabelColorButton_colorChanged(
const QColor &newColor )
332 void QgsPointDisplacementRendererWidget::mCircleModificationSpinBox_valueChanged(
double d )
343 void QgsPointDisplacementRendererWidget::mLabelDistanceFactorSpinBox_valueChanged(
double d )
354 void QgsPointDisplacementRendererWidget::mDistanceSpinBox_valueChanged(
double d )
363 void QgsPointDisplacementRendererWidget::mDistanceUnitWidget_changed()
373 void QgsPointDisplacementRendererWidget::mScaleDependentLabelsCheckBox_stateChanged(
int state )
375 if ( state == Qt::Unchecked )
377 mMinLabelScaleWidget->setScale( 0 );
378 mMinLabelScaleWidget->setEnabled(
false );
382 mMinLabelScaleWidget->setEnabled(
true );
386 void QgsPointDisplacementRendererWidget::minLabelScaleChanged(
double scale )
397 void QgsPointDisplacementRendererWidget::blockAllSignals(
bool block )
399 mLabelFieldComboBox->blockSignals( block );
400 mLabelFontButton->blockSignals( block );
401 mCircleWidthSpinBox->blockSignals( block );
402 mCircleColorButton->blockSignals( block );
403 mRendererComboBox->blockSignals( block );
404 mLabelColorButton->blockSignals( block );
405 mCircleModificationSpinBox->blockSignals( block );
406 mLabelDistanceFactorSpinBox->blockSignals( block );
407 mScaleDependentLabelsCheckBox->blockSignals( block );
408 mMinLabelScaleWidget->blockSignals( block );
409 mCenterSymbolToolButton->blockSignals( block );
410 mDistanceSpinBox->blockSignals( block );
411 mDistanceUnitWidget->blockSignals( block );
412 mPlacementComboBox->blockSignals( block );
415 void QgsPointDisplacementRendererWidget::centerSymbolChanged()
421 void QgsPointDisplacementRendererWidget::updateRendererFromWidget()
431 void QgsPointDisplacementRendererWidget::setupBlankUi(
const QString &layerName )
433 QLabel *label =
new QLabel( tr(
"The point displacement renderer only applies to (single) point layers. \n'%1' is not a (single) point layer and cannot be displayed by the point displacement renderer." ).arg( layerName ),
this );
434 QVBoxLayout *layout =
new QVBoxLayout(
this );
435 layout->setContentsMargins( 0, 0, 0, 0 );
436 layout->addWidget( label );
static const QString EXPR_CLUSTER_COLOR
Inbuilt variable name for cluster color variable.
Meters value as Map units.
Single variable definition for use within a QgsExpressionContextScope.
QList< QgsExpressionContextScope * > globalProjectAtlasMapLayerScopes(const QgsMapLayer *layer) const
Returns list of scopes: global, project, atlas, map, layer.
Placement
Placement methods for dispersing points.
Place points in a grid around group.
QgsMarkerSymbol * centerSymbol()
Returns the symbol for the center of a displacement group (but not ownership of the symbol)...
double minimumLabelScale() const
Returns the minimum map scale (i.e.
static bool isMultiType(Type type)
Returns true if the WKB type is a multi type.
QgsWkbTypes::Type wkbType() const FINAL
Returns the WKBType or WKBUnknown in case of error.
void setLabelFont(const QFont &font)
Sets the font used for labeling points.
void setTolerance(double distance)
Sets the tolerance distance for grouping points.
void setLabelColor(const QColor &color)
Sets the color to use for for labeling points.
void setToleranceMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the distance tolerance.
void setToleranceUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the tolerance distance.
double circleRadiusAddition() const
Returns the factor for increasing the ring size of displacement groups.
Container of fields for a vector layer.
QStringList renderersList(QgsRendererAbstractMetadata::LayerTypes layerTypes=QgsRendererAbstractMetadata::All) const
Returns a list of available renderers.
QString labelAttributeName() const
Returns the attribute name used for labeling points, or an empty string if no labeling will be done b...
void setCenterSymbol(QgsMarkerSymbol *symbol)
Sets the center symbol for a displacement group.
QList< QgsUnitTypes::RenderUnit > RenderUnitList
List of render units.
void addVariable(const QgsExpressionContextScope::StaticVariable &variable)
Adds a variable into the context scope.
QgsUnitTypes::RenderUnit toleranceUnit() const
Returns the units for the tolerance distance.
A marker symbol type, for rendering Point and MultiPoint geometries.
QFont labelFont() const
Returns the font used for labeling points.
QgsFields fields() const FINAL
Returns the list of fields of this layer.
Contains settings which reflect the context in which a symbol (or renderer) widget is shown...
double labelDistanceFactor() const
Returns the factor for label distance from the symbol.
void setCircleColor(const QColor &color)
Sets the color used for drawing the displacement group circle.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
static GeometryType geometryType(Type type)
Returns the geometry type for a WKB type, e.g., both MultiPolygon and CurvePolygon would have a Polyg...
void setLabelAttributeName(const QString &name)
Sets the attribute name for labeling points.
QColor circleColor() const
Returns the color used for drawing the displacement group circle.
Place points in concentric rings around group.
QgsRendererAbstractMetadata * rendererMetadata(const QString &rendererName)
Returns the metadata for a specified renderer.
void setPlacement(Placement placement)
Sets the placement method used for dispersing the points.
Encapsulate a field in an attribute table or data source.
Single scope for storing variables and functions for use within a QgsExpressionContext.
void setAdditionalExpressionContextScopes(const QList< QgsExpressionContextScope > &scopes)
Sets a list of additional expression context scopes to show as available within the layer...
void setLabelDistanceFactor(double factor)
Sets a factor for increasing the label distances from the symbol.
double tolerance() const
Returns the tolerance distance for grouping points.
const QgsMapUnitScale & toleranceMapUnitScale() const
Returns the map unit scale object for the distance tolerance.
Place points in a single ring around group.
A renderer that automatically displaces points with the same geographic location. ...
QgsMapCanvas * mapCanvas() const
Returns the map canvas associated with the widget.
const QgsFeatureRenderer * embeddedRenderer() const override
Returns the current embedded renderer (subrenderer) for this feature renderer.
QgsExpressionContext * expressionContext() const
Returns the expression context used for the widget, if set.
Points (e.g., for font sizes)
void setMinimumLabelScale(double scale)
Sets the minimum map scale (i.e.
QgsMessageBar * messageBar() const
Returns the message bar associated with the widget.
static const QString EXPR_CLUSTER_SIZE
Inbuilt variable name for cluster size variable.
void appendScopes(const QList< QgsExpressionContextScope *> &scopes)
Appends a list of scopes to the end of the context.
Placement placement() const
Returns the placement method used for dispersing the points.
void setCircleRadiusAddition(double distance)
Sets a factor for increasing the ring size of displacement groups.
void setEmbeddedRenderer(QgsFeatureRenderer *r) override
Sets an embedded renderer (subrenderer) for this feature renderer.
Represents a vector layer which manages a vector based data sets.
static QgsPointDisplacementRenderer * convertFromRenderer(const QgsFeatureRenderer *renderer)
Creates a QgsPointDisplacementRenderer from an existing renderer.
static QgsRendererRegistry * rendererRegistry()
Returns the application's renderer registry, used for managing vector layer renderers.
virtual QgsFeatureRenderer * clone() const =0
Create a deep copy of this renderer.
QgsMarkerSymbol * clone() const override
Returns a deep copy of this symbol.
void setCircleWidth(double width)
Sets the line width for the displacement group circle.
QColor labelColor() const
Returns the color used for for labeling points.
QList< QgsExpressionContextScope > additionalExpressionContextScopes() const
Returns the list of additional expression context scopes to show as available within the layer...
double circleWidth() const
Returns the line width for the displacement group circle in mm.