47 setupBlankUi( layer->
name() );
51 connect( mLabelFieldComboBox,
static_cast<void ( QComboBox::* )(
const QString & )
>( &QComboBox::currentIndexChanged ),
this, &QgsPointDisplacementRendererWidget::mLabelFieldComboBox_currentIndexChanged );
52 connect( mRendererComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsPointDisplacementRendererWidget::mRendererComboBox_currentIndexChanged );
53 connect( mPlacementComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsPointDisplacementRendererWidget::mPlacementComboBox_currentIndexChanged );
54 connect( mCircleWidthSpinBox, static_cast <
void ( QDoubleSpinBox::* )(
double ) > ( &QDoubleSpinBox::valueChanged ),
this, &QgsPointDisplacementRendererWidget::mCircleWidthSpinBox_valueChanged );
55 connect( mCircleColorButton, &
QgsColorButton::colorChanged,
this, &QgsPointDisplacementRendererWidget::mCircleColorButton_colorChanged );
56 connect( mDistanceSpinBox, static_cast <
void ( QDoubleSpinBox::* )(
double ) > ( &QDoubleSpinBox::valueChanged ),
this, &QgsPointDisplacementRendererWidget::mDistanceSpinBox_valueChanged );
59 connect( mCircleModificationSpinBox, static_cast <
void ( QDoubleSpinBox::* )(
double ) > ( &QDoubleSpinBox::valueChanged ),
this, &QgsPointDisplacementRendererWidget::mCircleModificationSpinBox_valueChanged );
60 connect( mScaleDependentLabelsCheckBox, &QCheckBox::stateChanged,
this, &QgsPointDisplacementRendererWidget::mScaleDependentLabelsCheckBox_stateChanged );
61 connect( mRendererSettingsButton, &QPushButton::clicked,
this, &QgsPointDisplacementRendererWidget::mRendererSettingsButton_clicked );
62 this->layout()->setContentsMargins( 0, 0, 0, 0 );
78 blockAllSignals(
true );
88 for (
const QgsField &f : layerFields )
90 mLabelFieldComboBox->addItem( f.name() );
92 mLabelFieldComboBox->addItem( tr(
"None" ) );
95 if ( !currentLabelAttribute.isEmpty() )
97 mLabelFieldComboBox->setCurrentIndex( mLabelFieldComboBox->findText( currentLabelAttribute ) );
101 mLabelFieldComboBox->setCurrentIndex( mLabelFieldComboBox->findText( tr(
"None" ) ) );
107 QStringList::const_iterator it = rendererList.constBegin();
108 for ( ; it != rendererList.constEnd(); ++it )
110 if ( *it != QLatin1String(
"pointDisplacement" ) && *it != QLatin1String(
"pointCluster" ) && *it != QLatin1String(
"heatmapRenderer" ) )
117 mCircleColorButton->setColorDialogTitle( tr(
"Select Color" ) );
118 mCircleColorButton->setContext( QStringLiteral(
"symbology" ) );
119 mCircleColorButton->setAllowOpacity(
true );
120 mCircleColorButton->setShowNoColor(
true );
121 mCircleColorButton->setNoColorString( tr(
"Transparent Stroke" ) );
122 mLabelColorButton->setContext( QStringLiteral(
"symbology" ) );
123 mLabelColorButton->setColorDialogTitle( tr(
"Select Color" ) );
124 mLabelColorButton->setAllowOpacity(
true );
126 mCircleWidthSpinBox->setValue( mRenderer->
circleWidth() );
127 mCircleColorButton->setColor( mRenderer->
circleColor() );
128 mLabelColorButton->setColor( mRenderer->
labelColor() );
129 mLabelFontButton->setCurrentFont( mRenderer->
labelFont() );
130 mCircleModificationSpinBox->setClearValue( 0.0 );
132 mDistanceSpinBox->setValue( mRenderer->
tolerance() );
137 mPlacementComboBox->setCurrentIndex( mPlacementComboBox->findData( mRenderer->
placement() ) );
140 mMinLabelScaleWidget->setScale( std::max( mRenderer->
minimumLabelScale(), 0.0 ) );
143 mScaleDependentLabelsCheckBox->setCheckState( Qt::Checked );
147 mScaleDependentLabelsCheckBox->setCheckState( Qt::Unchecked );
148 mMinLabelScaleWidget->setEnabled(
false );
152 blockAllSignals(
false );
158 int rendererIndex = mRendererComboBox->findData( rendererName );
159 if ( rendererIndex != -1 )
161 mRendererComboBox->setCurrentIndex( rendererIndex );
162 mRendererComboBox_currentIndexChanged( rendererIndex );
167 connect( mLabelFontButton, &
QgsFontButton::changed,
this, &QgsPointDisplacementRendererWidget::labelFontChanged );
168 connect( mCenterSymbolToolButton, &
QgsSymbolButton::changed,
this, &QgsPointDisplacementRendererWidget::centerSymbolChanged );
169 mCenterSymbolToolButton->setDialogTitle( tr(
"Center symbol" ) );
170 mCenterSymbolToolButton->setLayer(
mLayer );
171 mCenterSymbolToolButton->registerExpressionContextGenerator(
this );
187 if ( mDistanceUnitWidget )
188 mDistanceUnitWidget->setMapCanvas( context.
mapCanvas() );
189 if ( mMinLabelScaleWidget )
191 mMinLabelScaleWidget->setMapCanvas( context.
mapCanvas() );
192 mMinLabelScaleWidget->setShowCurrentScaleButton(
true );
194 if ( mCenterSymbolToolButton )
196 mCenterSymbolToolButton->setMapCanvas( context.
mapCanvas() );
219 void QgsPointDisplacementRendererWidget::mLabelFieldComboBox_currentIndexChanged(
const QString &text )
223 if ( text == tr(
"None" ) )
235 void QgsPointDisplacementRendererWidget::mRendererComboBox_currentIndexChanged(
int index )
237 QString rendererId = mRendererComboBox->itemData( index ).toString();
244 delete tempRenderWidget;
249 void QgsPointDisplacementRendererWidget::mPlacementComboBox_currentIndexChanged(
int index )
258 void QgsPointDisplacementRendererWidget::mRendererSettingsButton_clicked()
284 void QgsPointDisplacementRendererWidget::labelFontChanged()
291 mRenderer->
setLabelFont( mLabelFontButton->currentFont() );
295 void QgsPointDisplacementRendererWidget::mCircleWidthSpinBox_valueChanged(
double d )
304 void QgsPointDisplacementRendererWidget::mCircleColorButton_colorChanged(
const QColor &newColor )
315 void QgsPointDisplacementRendererWidget::mLabelColorButton_colorChanged(
const QColor &newColor )
326 void QgsPointDisplacementRendererWidget::mCircleModificationSpinBox_valueChanged(
double d )
337 void QgsPointDisplacementRendererWidget::mDistanceSpinBox_valueChanged(
double d )
346 void QgsPointDisplacementRendererWidget::mDistanceUnitWidget_changed()
356 void QgsPointDisplacementRendererWidget::mScaleDependentLabelsCheckBox_stateChanged(
int state )
358 if ( state == Qt::Unchecked )
360 mMinLabelScaleWidget->setScale( 0 );
361 mMinLabelScaleWidget->setEnabled(
false );
365 mMinLabelScaleWidget->setEnabled(
true );
369 void QgsPointDisplacementRendererWidget::minLabelScaleChanged(
double scale )
380 void QgsPointDisplacementRendererWidget::blockAllSignals(
bool block )
382 mLabelFieldComboBox->blockSignals( block );
383 mLabelFontButton->blockSignals( block );
384 mCircleWidthSpinBox->blockSignals( block );
385 mCircleColorButton->blockSignals( block );
386 mRendererComboBox->blockSignals( block );
387 mLabelColorButton->blockSignals( block );
388 mCircleModificationSpinBox->blockSignals( block );
389 mScaleDependentLabelsCheckBox->blockSignals( block );
390 mMinLabelScaleWidget->blockSignals( block );
391 mCenterSymbolToolButton->blockSignals( block );
392 mDistanceSpinBox->blockSignals( block );
393 mDistanceUnitWidget->blockSignals( block );
394 mPlacementComboBox->blockSignals( block );
397 void QgsPointDisplacementRendererWidget::centerSymbolChanged()
403 void QgsPointDisplacementRendererWidget::updateRendererFromWidget()
413 void QgsPointDisplacementRendererWidget::setupBlankUi(
const QString &layerName )
415 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 );
416 QVBoxLayout *layout =
new QVBoxLayout(
this );
417 layout->setContentsMargins( 0, 0, 0, 0 );
418 layout->addWidget( label );
QStringList renderersList(QgsRendererAbstractMetadata::LayerTypes layerTypes=QgsRendererAbstractMetadata::All) const
Returns a list of available renderers.
static const QString EXPR_CLUSTER_COLOR
Inbuilt variable name for cluster color variable.
QgsUnitTypes::RenderUnit toleranceUnit() const
Returns the units for the tolerance distance.
Meters value as Map units.
Single variable definition for use within a QgsExpressionContextScope.
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)...
const QgsMapUnitScale & toleranceMapUnitScale() const
Returns the map unit scale object for the distance tolerance.
static bool isMultiType(Type type)
Returns true if the WKB type is a multi type.
double minimumLabelScale() const
Returns the minimum map scale (i.e.
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.
Container of fields for a vector layer.
double circleWidth() const
Returns the line width for the displacement group circle in mm.
void setCenterSymbol(QgsMarkerSymbol *symbol)
Sets the center symbol for a displacement group.
QgsMapCanvas * mapCanvas() const
Returns the map canvas associated with the widget.
QList< QgsUnitTypes::RenderUnit > RenderUnitList
List of render units.
void addVariable(const QgsExpressionContextScope::StaticVariable &variable)
Adds a variable into the context scope.
A marker symbol type, for rendering Point and MultiPoint geometries.
QString labelAttributeName() const
Returns the attribute name used for labeling points, or an empty string if no labeling will be done b...
QColor labelColor() const
Returns the color used for 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...
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...
points (e.g., for font sizes)
void setLabelAttributeName(const QString &name)
Sets the attribute name for labeling points.
QgsExpressionContext * expressionContext() const
Returns the expression context used for the widget, if set.
Place points in concentric rings around group.
QgsRendererAbstractMetadata * rendererMetadata(const QString &rendererName)
Returns the metadata for a specified renderer.
Placement placement() const
Returns the placement method used for dispersing the points.
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...
QFont labelFont() const
Returns the font used for labeling points.
Place points in a single ring around group.
QColor circleColor() const
Returns the color used for drawing the displacement group circle.
A renderer that automatically displaces points with the same geographic location. ...
const QgsFeatureRenderer * embeddedRenderer() const override
Returns the current embedded renderer (subrenderer) for this feature renderer.
void setMinimumLabelScale(double scale)
Sets the minimum map scale (i.e.
static const QString EXPR_CLUSTER_SIZE
Inbuilt variable name for cluster size variable.
QList< QgsExpressionContextScope > additionalExpressionContextScopes() const
Returns the list of additional expression context scopes to show as available within the layer...
QList< QgsExpressionContextScope * > globalProjectAtlasMapLayerScopes(const QgsMapLayer *layer) const
Returns list of scopes: global, project, atlas, map, layer.
void appendScopes(const QList< QgsExpressionContextScope * > &scopes)
Appends a list of scopes to the end of the context.
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.
double tolerance() const
Returns the tolerance distance for grouping points.
double circleRadiusAddition() const
Returns the factor for increasing the ring size of displacement groups.