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 )
193 if ( mMinLabelScaleWidget )
196 mMinLabelScaleWidget->setShowCurrentScaleButton(
true );
198 if ( mCenterSymbolToolButton )
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 QgsRendererRegistry * rendererRegistry()
Returns the application's renderer registry, used for managing vector layer renderers.
Single scope for storing variables and functions for use within a QgsExpressionContext.
void addVariable(const QgsExpressionContextScope::StaticVariable &variable)
Adds a variable into the context scope.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
static const QString EXPR_CLUSTER_SIZE
Inbuilt variable name for cluster size variable.
static const QString EXPR_CLUSTER_COLOR
Inbuilt variable name for cluster color variable.
virtual QgsFeatureRenderer * clone() const =0
Create a deep copy of this renderer.
Encapsulate a field in an attribute table or data source.
Container of fields for a vector layer.
A marker symbol type, for rendering Point and MultiPoint geometries.
QgsMarkerSymbol * clone() const override
Returns a deep copy of this symbol.
A renderer that automatically displaces points with the same geographic location.
void setPlacement(Placement placement)
Sets the placement method used for dispersing the points.
void setLabelDistanceFactor(double factor)
Sets a factor for increasing the label distances from the symbol.
void setCircleColor(const QColor &color)
Sets the color used for drawing the displacement group circle.
Placement placement() const
Returns the placement method used for dispersing the points.
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.
Placement
Placement methods for dispersing points.
@ ConcentricRings
Place points in concentric rings around group.
@ Ring
Place points in a single ring around group.
@ Grid
Place points in a grid around group.
void setCircleRadiusAddition(double distance)
Sets a factor for increasing the ring size of displacement groups.
QgsMarkerSymbol * centerSymbol()
Returns the symbol for the center of a displacement group (but not ownership of the symbol).
double circleRadiusAddition() const
Returns the factor for increasing the ring size of displacement groups.
QColor circleColor() const
Returns the color used for drawing the displacement group circle.
void setCircleWidth(double width)
Sets the line width for the displacement group circle.
static QgsPointDisplacementRenderer * convertFromRenderer(const QgsFeatureRenderer *renderer)
Creates a QgsPointDisplacementRenderer from an existing renderer.
double labelDistanceFactor() const
Returns the factor for label distance from the symbol.
void setLabelColor(const QColor &color)
Sets the color to use for for labeling points.
QColor labelColor() const
Returns the color used for for labeling points.
QgsUnitTypes::RenderUnit toleranceUnit() const
Returns the units for the tolerance distance.
void setLabelFont(const QFont &font)
Sets the font used for labeling points.
double minimumLabelScale() const
Returns the minimum map scale (i.e.
void setMinimumLabelScale(double scale)
Sets the minimum map scale (i.e.
double tolerance() const
Returns the tolerance distance for grouping points.
QFont labelFont() const
Returns the font used for labeling points.
QString labelAttributeName() const
Returns the attribute name used for labeling points, or an empty string if no labeling will be done b...
const QgsMapUnitScale & toleranceMapUnitScale() const
Returns the map unit scale object for the distance tolerance.
void setEmbeddedRenderer(QgsFeatureRenderer *r) override
Sets an embedded renderer (subrenderer) for this feature renderer.
void setToleranceUnit(QgsUnitTypes::RenderUnit unit)
Sets the units for the tolerance distance.
const QgsFeatureRenderer * embeddedRenderer() const override
Returns the current embedded renderer (subrenderer) for this feature renderer.
void setLabelAttributeName(const QString &name)
Sets the attribute name for labeling points.
void setToleranceMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale object for the distance tolerance.
void setTolerance(double distance)
Sets the tolerance distance for grouping points.
QStringList renderersList(QgsRendererAbstractMetadata::LayerTypes layerTypes=QgsRendererAbstractMetadata::All) const
Returns a list of available renderers.
QgsRendererAbstractMetadata * rendererMetadata(const QString &rendererName)
Returns the metadata for a specified renderer.
Contains settings which reflect the context in which a symbol (or renderer) widget is shown,...
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 setAdditionalExpressionContextScopes(const QList< QgsExpressionContextScope > &scopes)
Sets a list of additional expression context scopes to show as available within the layer.
QgsExpressionContext * expressionContext() const
Returns the expression context used for the widget, if set.
QgsMapCanvas * mapCanvas() const
Returns the map canvas associated with the widget.
QgsMessageBar * messageBar() const
Returns the message bar associated with the widget.
QList< QgsUnitTypes::RenderUnit > RenderUnitList
List of render units.
@ RenderMetersInMapUnits
Meters value as Map units.
@ RenderPoints
Points (e.g., for font sizes)
@ RenderMillimeters
Millimeters.
@ RenderMapUnits
Map units.
Represents a vector layer which manages a vector based data sets.
Q_INVOKABLE QgsWkbTypes::Type wkbType() const FINAL
Returns the WKBType or WKBUnknown in case of error.
QgsFields fields() const FINAL
Returns the list of fields of this layer.
static GeometryType geometryType(Type type) SIP_HOLDGIL
Returns the geometry type for a WKB type, e.g., both MultiPolygon and CurvePolygon would have a Polyg...
static bool isMultiType(Type type) SIP_HOLDGIL
Returns true if the WKB type is a multi type.
Single variable definition for use within a QgsExpressionContextScope.