48 setupBlankUi( layer->
name() );
52 connect( mLabelFieldComboBox, &QComboBox::currentTextChanged,
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();
251 delete tempRenderWidget;
256 void QgsPointDisplacementRendererWidget::mPlacementComboBox_currentIndexChanged(
int index )
265 void QgsPointDisplacementRendererWidget::mRendererSettingsButton_clicked()
291 void QgsPointDisplacementRendererWidget::labelFontChanged()
298 mRenderer->
setLabelFont( mLabelFontButton->currentFont() );
302 void QgsPointDisplacementRendererWidget::mCircleWidthSpinBox_valueChanged(
double d )
311 void QgsPointDisplacementRendererWidget::mCircleColorButton_colorChanged(
const QColor &newColor )
322 void QgsPointDisplacementRendererWidget::mLabelColorButton_colorChanged(
const QColor &newColor )
333 void QgsPointDisplacementRendererWidget::mCircleModificationSpinBox_valueChanged(
double d )
344 void QgsPointDisplacementRendererWidget::mLabelDistanceFactorSpinBox_valueChanged(
double d )
355 void QgsPointDisplacementRendererWidget::mDistanceSpinBox_valueChanged(
double d )
364 void QgsPointDisplacementRendererWidget::mDistanceUnitWidget_changed()
374 void QgsPointDisplacementRendererWidget::mScaleDependentLabelsCheckBox_stateChanged(
int state )
376 if ( state == Qt::Unchecked )
378 mMinLabelScaleWidget->setScale( 0 );
379 mMinLabelScaleWidget->setEnabled(
false );
383 mMinLabelScaleWidget->setEnabled(
true );
387 void QgsPointDisplacementRendererWidget::minLabelScaleChanged(
double scale )
398 void QgsPointDisplacementRendererWidget::blockAllSignals(
bool block )
400 mLabelFieldComboBox->blockSignals( block );
401 mLabelFontButton->blockSignals( block );
402 mCircleWidthSpinBox->blockSignals( block );
403 mCircleColorButton->blockSignals( block );
404 mRendererComboBox->blockSignals( block );
405 mLabelColorButton->blockSignals( block );
406 mCircleModificationSpinBox->blockSignals( block );
407 mLabelDistanceFactorSpinBox->blockSignals( block );
408 mScaleDependentLabelsCheckBox->blockSignals( block );
409 mMinLabelScaleWidget->blockSignals( block );
410 mCenterSymbolToolButton->blockSignals( block );
411 mDistanceSpinBox->blockSignals( block );
412 mDistanceUnitWidget->blockSignals( block );
413 mPlacementComboBox->blockSignals( block );
416 void QgsPointDisplacementRendererWidget::centerSymbolChanged()
422 void QgsPointDisplacementRendererWidget::updateRendererFromWidget()
432 void QgsPointDisplacementRendererWidget::setupBlankUi(
const QString &layerName )
434 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 );
435 QVBoxLayout *layout =
new QVBoxLayout(
this );
436 layout->setContentsMargins( 0, 0, 0, 0 );
437 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.