Skip to content

Commit 46f6f83

Browse files
committedJul 24, 2017
Port some symbol buttons across to QgsSymbolButton
- composer shape style button (no other composer ones for now- they're all getting removed with layouts anyway) - point cluster/displacement renderer buttons
1 parent 22c4740 commit 46f6f83

14 files changed

+165
-197
lines changed
 

‎python/gui/qgssymbolbutton.sip

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class QgsSymbolButton : QToolButton
5353
:rtype: QgsSymbol
5454
%End
5555

56+
5657
QgsMapCanvas *mapCanvas() const;
5758
%Docstring
5859
Returns the map canvas associated with the widget.

‎python/gui/symbology-ng/qgspointclusterrendererwidget.sip

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212

1313

14-
class QgsPointClusterRendererWidget: QgsRendererWidget
14+
class QgsPointClusterRendererWidget: QgsRendererWidget, QgsExpressionContextGenerator
1515
{
1616
%Docstring
1717
A widget which allows configuration of the properties for a QgsPointClusterRenderer.
@@ -48,6 +48,9 @@ class QgsPointClusterRendererWidget: QgsRendererWidget
4848
virtual void setContext( const QgsSymbolWidgetContext &context );
4949

5050

51+
virtual QgsExpressionContext createExpressionContext() const;
52+
53+
5154
};
5255

5356
/************************************************************************

‎python/gui/symbology-ng/qgspointdisplacementrendererwidget.sip

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111

1212

13-
class QgsPointDisplacementRendererWidget: QgsRendererWidget
13+
class QgsPointDisplacementRendererWidget: QgsRendererWidget, QgsExpressionContextGenerator
1414
{
1515

1616
%TypeHeaderCode
@@ -29,6 +29,9 @@ class QgsPointDisplacementRendererWidget: QgsRendererWidget
2929
virtual void setContext( const QgsSymbolWidgetContext &context );
3030

3131

32+
virtual QgsExpressionContext createExpressionContext() const;
33+
34+
3235
};
3336

3437
/************************************************************************

‎src/app/composer/qgscomposershapewidget.cpp

Lines changed: 7 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,10 @@ QgsComposerShapeWidget::QgsComposerShapeWidget( QgsComposerShape *composerShape
5252
if ( mComposerShape )
5353
{
5454
connect( mComposerShape, &QgsComposerObject::itemChanged, this, &QgsComposerShapeWidget::setGuiElementValues );
55+
mShapeStyleButton->registerExpressionContextGenerator( mComposerShape );
5556
}
57+
connect( mShapeStyleButton, &QgsSymbolButton::changed, this, &QgsComposerShapeWidget::symbolChanged );
58+
mShapeStyleButton->setLayer( atlasCoverageLayer() );
5659
}
5760

5861
QgsComposerShapeWidget::~QgsComposerShapeWidget()
@@ -76,7 +79,7 @@ void QgsComposerShapeWidget::setGuiElementValues()
7679

7780
blockAllSignals( true );
7881

79-
updateShapeStyle();
82+
mShapeStyleButton->setSymbol( mComposerShape->shapeStyleSymbol()->clone() );
8083

8184
mCornerRadiusSpinBox->setValue( mComposerShape->cornerRadius() );
8285
if ( mComposerShape->shapeType() == QgsComposerShape::Ellipse )
@@ -98,38 +101,16 @@ void QgsComposerShapeWidget::setGuiElementValues()
98101
blockAllSignals( false );
99102
}
100103

101-
void QgsComposerShapeWidget::on_mShapeStyleButton_clicked()
104+
void QgsComposerShapeWidget::symbolChanged()
102105
{
103106
if ( !mComposerShape )
104107
{
105108
return;
106109
}
107110

108-
// use the atlas coverage layer, if any
109-
QgsVectorLayer *coverageLayer = atlasCoverageLayer();
110-
111-
QgsFillSymbol *newSymbol = mComposerShape->shapeStyleSymbol()->clone();
112-
QgsExpressionContext context = mComposerShape->createExpressionContext();
113-
114-
QgsSymbolSelectorWidget *d = new QgsSymbolSelectorWidget( newSymbol, QgsStyle::defaultStyle(), coverageLayer, nullptr );
115-
QgsSymbolWidgetContext symbolContext;
116-
symbolContext.setExpressionContext( &context );
117-
d->setContext( symbolContext );
118-
119-
connect( d, &QgsPanelWidget::widgetChanged, this, &QgsComposerShapeWidget::updateSymbolFromWidget );
120-
connect( d, &QgsPanelWidget::panelAccepted, this, &QgsComposerShapeWidget::cleanUpSymbolSelector );
121-
openPanel( d );
122111
mComposerShape->beginCommand( tr( "Shape style changed" ) );
123-
}
124-
125-
void QgsComposerShapeWidget::updateShapeStyle()
126-
{
127-
if ( mComposerShape )
128-
{
129-
mComposerShape->refreshSymbol();
130-
QIcon icon = QgsSymbolLayerUtils::symbolPreviewIcon( mComposerShape->shapeStyleSymbol(), mShapeStyleButton->iconSize() );
131-
mShapeStyleButton->setIcon( icon );
132-
}
112+
mComposerShape->setShapeStyleSymbol( mShapeStyleButton->clonedSymbol<QgsFillSymbol>() );
113+
mComposerShape->endCommand();
133114
}
134115

135116
void QgsComposerShapeWidget::on_mCornerRadiusSpinBox_valueChanged( double val )
@@ -179,23 +160,3 @@ void QgsComposerShapeWidget::toggleRadiusSpin( const QString &shapeText )
179160
mCornerRadiusSpinBox->setEnabled( false );
180161
}
181162
}
182-
183-
void QgsComposerShapeWidget::updateSymbolFromWidget()
184-
{
185-
if ( QgsSymbolSelectorWidget *w = qobject_cast<QgsSymbolSelectorWidget *>( sender() ) )
186-
mComposerShape->setShapeStyleSymbol( static_cast< QgsFillSymbol * >( w->symbol() ) );
187-
}
188-
189-
void QgsComposerShapeWidget::cleanUpSymbolSelector( QgsPanelWidget *container )
190-
{
191-
QgsSymbolSelectorWidget *w = qobject_cast<QgsSymbolSelectorWidget *>( container );
192-
if ( !w )
193-
return;
194-
195-
delete w->symbol();
196-
updateShapeStyle();
197-
mComposerShape->endCommand();
198-
}
199-
200-
201-

‎src/app/composer/qgscomposershapewidget.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,17 +40,13 @@ class QgsComposerShapeWidget: public QgsComposerItemBaseWidget, private Ui::QgsC
4040
private slots:
4141
void on_mShapeComboBox_currentIndexChanged( const QString &text );
4242
void on_mCornerRadiusSpinBox_valueChanged( double val );
43-
void on_mShapeStyleButton_clicked();
43+
void symbolChanged();
4444

4545
//! Sets the GUI elements to the currentValues of mComposerShape
4646
void setGuiElementValues();
4747

48-
void updateShapeStyle();
49-
5048
//! Enables or disables the rounded radius spin box based on shape type
5149
void toggleRadiusSpin( const QString &shapeText );
52-
void updateSymbolFromWidget();
53-
void cleanUpSymbolSelector( QgsPanelWidget *container );
5450
};
5551

5652
#endif // QGSCOMPOSERSHAPEWIDGET_H

‎src/gui/qgssymbolbutton.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,28 @@ class GUI_EXPORT QgsSymbolButton : public QToolButton
7272
*/
7373
QgsSymbol *symbol();
7474

75+
/**
76+
* Returns a clone of the current symbol (as the specified template type) defined by the button.
77+
* \see setSymbol()
78+
* \see changed()
79+
* \note Not available in Python bindings.
80+
*/
81+
template <class SymbolType> SymbolType *clonedSymbol() SIP_SKIP
82+
{
83+
QgsSymbol *tmpSymbol = mSymbol.get();
84+
SymbolType *symbolCastToType = dynamic_cast<SymbolType *>( tmpSymbol );
85+
86+
if ( symbolCastToType )
87+
{
88+
return symbolCastToType->clone();
89+
}
90+
else
91+
{
92+
//could not cast
93+
return nullptr;
94+
}
95+
}
96+
7597
/**
7698
* Returns the map canvas associated with the widget.
7799
* \see setMapCanvas()

‎src/gui/symbology-ng/qgspointclusterrendererwidget.cpp

Lines changed: 22 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ QgsPointClusterRendererWidget::QgsPointClusterRendererWidget( QgsVectorLayer *la
7979
mDistanceSpinBox->setValue( mRenderer->tolerance() );
8080
mDistanceUnitWidget->setUnit( mRenderer->toleranceUnit() );
8181
mDistanceUnitWidget->setMapUnitScale( mRenderer->toleranceMapUnitScale() );
82+
mCenterSymbolToolButton->setSymbol( mRenderer->clusterSymbol()->clone() );
8283

8384
blockAllSignals( false );
8485

@@ -94,7 +95,10 @@ QgsPointClusterRendererWidget::QgsPointClusterRendererWidget( QgsVectorLayer *la
9495
}
9596
}
9697

97-
updateCenterIcon();
98+
connect( mCenterSymbolToolButton, &QgsSymbolButton::changed, this, &QgsPointClusterRendererWidget::centerSymbolChanged );
99+
mCenterSymbolToolButton->setDialogTitle( tr( "Cluster symbol" ) );
100+
mCenterSymbolToolButton->setLayer( mLayer );
101+
mCenterSymbolToolButton->registerExpressionContextGenerator( this );
98102
}
99103

100104
QgsPointClusterRendererWidget::~QgsPointClusterRendererWidget()
@@ -112,6 +116,8 @@ void QgsPointClusterRendererWidget::setContext( const QgsSymbolWidgetContext &co
112116
QgsRendererWidget::setContext( context );
113117
if ( mDistanceUnitWidget )
114118
mDistanceUnitWidget->setMapCanvas( context.mapCanvas() );
119+
if ( mCenterSymbolToolButton )
120+
mCenterSymbolToolButton->setMapCanvas( context.mapCanvas() );
115121
}
116122

117123
void QgsPointClusterRendererWidget::on_mRendererComboBox_currentIndexChanged( int index )
@@ -175,55 +181,36 @@ void QgsPointClusterRendererWidget::on_mDistanceUnitWidget_changed()
175181
void QgsPointClusterRendererWidget::blockAllSignals( bool block )
176182
{
177183
mRendererComboBox->blockSignals( block );
178-
mCenterSymbolPushButton->blockSignals( block );
184+
mCenterSymbolToolButton->blockSignals( block );
179185
mDistanceSpinBox->blockSignals( block );
180186
mDistanceUnitWidget->blockSignals( block );
181187
}
182188

183-
void QgsPointClusterRendererWidget::on_mCenterSymbolPushButton_clicked()
189+
QgsExpressionContext QgsPointClusterRendererWidget::createExpressionContext() const
184190
{
185-
if ( !mRenderer || !mRenderer->clusterSymbol() )
186-
{
187-
return;
188-
}
189-
QgsMarkerSymbol *markerSymbol = mRenderer->clusterSymbol()->clone();
190-
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( markerSymbol, QgsStyle::defaultStyle(), mLayer, this );
191-
dlg->setPanelTitle( tr( "Cluster symbol" ) );
192-
dlg->setDockMode( this->dockMode() );
193-
194-
QgsSymbolWidgetContext context = mContext;
191+
QgsExpressionContext context;
192+
if ( mContext.expressionContext() )
193+
context = *mContext.expressionContext();
194+
else
195+
context.appendScopes( mContext.globalProjectAtlasMapLayerScopes( mLayer ) );
195196
QgsExpressionContextScope scope;
196197
scope.addVariable( QgsExpressionContextScope::StaticVariable( QgsExpressionContext::EXPR_CLUSTER_COLOR, "", true ) );
197198
scope.addVariable( QgsExpressionContextScope::StaticVariable( QgsExpressionContext::EXPR_CLUSTER_SIZE, 0, true ) );
198-
QList< QgsExpressionContextScope > scopes = context.additionalExpressionContextScopes();
199+
QList< QgsExpressionContextScope > scopes = mContext.additionalExpressionContextScopes();
199200
scopes << scope;
200-
context.setAdditionalExpressionContextScopes( scopes );
201-
202-
dlg->setContext( context );
203-
204-
connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsPointClusterRendererWidget::updateCenterSymbolFromWidget );
205-
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsPointClusterRendererWidget::cleanUpSymbolSelector );
206-
openPanel( dlg );
201+
Q_FOREACH ( const QgsExpressionContextScope &s, scopes )
202+
{
203+
context << new QgsExpressionContextScope( s );
204+
}
205+
return context;
207206
}
208207

209-
void QgsPointClusterRendererWidget::updateCenterSymbolFromWidget()
208+
void QgsPointClusterRendererWidget::centerSymbolChanged()
210209
{
211-
QgsSymbolSelectorWidget *dlg = qobject_cast<QgsSymbolSelectorWidget *>( sender() );
212-
QgsSymbol *symbol = dlg->symbol()->clone();
213-
mRenderer->setClusterSymbol( static_cast< QgsMarkerSymbol * >( symbol ) );
214-
updateCenterIcon();
210+
mRenderer->setClusterSymbol( mCenterSymbolToolButton->clonedSymbol< QgsMarkerSymbol >() );
215211
emit widgetChanged();
216212
}
217213

218-
void QgsPointClusterRendererWidget::cleanUpSymbolSelector( QgsPanelWidget *container )
219-
{
220-
if ( container )
221-
{
222-
QgsSymbolSelectorWidget *dlg = qobject_cast<QgsSymbolSelectorWidget *>( container );
223-
delete dlg->symbol();
224-
}
225-
}
226-
227214
void QgsPointClusterRendererWidget::updateRendererFromWidget()
228215
{
229216
QgsRendererWidget *w = qobject_cast<QgsRendererWidget *>( sender() );
@@ -234,17 +221,6 @@ void QgsPointClusterRendererWidget::updateRendererFromWidget()
234221
emit widgetChanged();
235222
}
236223

237-
void QgsPointClusterRendererWidget::updateCenterIcon()
238-
{
239-
QgsMarkerSymbol *symbol = mRenderer->clusterSymbol();
240-
if ( !symbol )
241-
{
242-
return;
243-
}
244-
QIcon icon = QgsSymbolLayerUtils::symbolPreviewIcon( symbol, mCenterSymbolPushButton->iconSize() );
245-
mCenterSymbolPushButton->setIcon( icon );
246-
}
247-
248224
void QgsPointClusterRendererWidget::setupBlankUi( const QString &layerName )
249225
{
250226
QGridLayout *layout = new QGridLayout( this );

‎src/gui/symbology-ng/qgspointclusterrendererwidget.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "ui_qgspointclusterrendererwidgetbase.h"
2222
#include "qgis.h"
2323
#include "qgsrendererwidget.h"
24+
#include "qgsexpressioncontextgenerator.h"
2425
#include "qgis_gui.h"
2526

2627
class QgsPointClusterRenderer;
@@ -31,9 +32,10 @@ class QgsPointClusterRenderer;
3132
* \since QGIS 3.0
3233
*/
3334

34-
class GUI_EXPORT QgsPointClusterRendererWidget: public QgsRendererWidget, private Ui::QgsPointClusterRendererWidgetBase
35+
class GUI_EXPORT QgsPointClusterRendererWidget: public QgsRendererWidget, public QgsExpressionContextGenerator, private Ui::QgsPointClusterRendererWidgetBase
3536
{
3637
Q_OBJECT
38+
3739
public:
3840

3941
/** Returns a new QgsPointClusterRendererWidget.
@@ -56,22 +58,21 @@ class GUI_EXPORT QgsPointClusterRendererWidget: public QgsRendererWidget, privat
5658
QgsFeatureRenderer *renderer() override;
5759
void setContext( const QgsSymbolWidgetContext &context ) override;
5860

61+
QgsExpressionContext createExpressionContext() const override;
62+
5963
private:
6064
QgsPointClusterRenderer *mRenderer = nullptr;
6165

6266
void blockAllSignals( bool block );
63-
void updateCenterIcon();
6467
void setupBlankUi( const QString &layerName );
6568

6669
private slots:
6770

6871
void on_mRendererComboBox_currentIndexChanged( int index );
6972
void on_mDistanceSpinBox_valueChanged( double d );
7073
void on_mDistanceUnitWidget_changed();
71-
void on_mCenterSymbolPushButton_clicked();
7274
void on_mRendererSettingsButton_clicked();
73-
void updateCenterSymbolFromWidget();
74-
void cleanUpSymbolSelector( QgsPanelWidget *container );
75+
void centerSymbolChanged();
7576
void updateRendererFromWidget();
7677
};
7778

‎src/gui/symbology-ng/qgspointdisplacementrendererwidget.cpp

Lines changed: 31 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ QgsPointDisplacementRendererWidget::QgsPointDisplacementRendererWidget( QgsVecto
118118
mDistanceSpinBox->setValue( mRenderer->tolerance() );
119119
mDistanceUnitWidget->setUnit( mRenderer->toleranceUnit() );
120120
mDistanceUnitWidget->setMapUnitScale( mRenderer->toleranceMapUnitScale() );
121+
mCenterSymbolToolButton->setSymbol( mRenderer->centerSymbol()->clone() );
121122

122123
mPlacementComboBox->setCurrentIndex( mPlacementComboBox->findData( mRenderer->placement() ) );
123124

@@ -150,8 +151,10 @@ QgsPointDisplacementRendererWidget::QgsPointDisplacementRendererWidget( QgsVecto
150151

151152
connect( mMinLabelScaleWidget, &QgsScaleWidget::scaleChanged, this, &QgsPointDisplacementRendererWidget::minLabelScaleChanged );
152153
connect( mLabelFontButton, &QgsFontButton::changed, this, &QgsPointDisplacementRendererWidget::labelFontChanged );
153-
154-
updateCenterIcon();
154+
connect( mCenterSymbolToolButton, &QgsSymbolButton::changed, this, &QgsPointDisplacementRendererWidget::centerSymbolChanged );
155+
mCenterSymbolToolButton->setDialogTitle( tr( "Center symbol" ) );
156+
mCenterSymbolToolButton->setLayer( mLayer );
157+
mCenterSymbolToolButton->registerExpressionContextGenerator( this );
155158
}
156159

157160
QgsPointDisplacementRendererWidget::~QgsPointDisplacementRendererWidget()
@@ -174,6 +177,29 @@ void QgsPointDisplacementRendererWidget::setContext( const QgsSymbolWidgetContex
174177
mMinLabelScaleWidget->setMapCanvas( context.mapCanvas() );
175178
mMinLabelScaleWidget->setShowCurrentScaleButton( true );
176179
}
180+
if ( mCenterSymbolToolButton )
181+
{
182+
mCenterSymbolToolButton->setMapCanvas( context.mapCanvas() );
183+
}
184+
}
185+
186+
QgsExpressionContext QgsPointDisplacementRendererWidget::createExpressionContext() const
187+
{
188+
QgsExpressionContext context;
189+
if ( mContext.expressionContext() )
190+
context = *mContext.expressionContext();
191+
else
192+
context.appendScopes( mContext.globalProjectAtlasMapLayerScopes( mLayer ) );
193+
QgsExpressionContextScope scope;
194+
scope.addVariable( QgsExpressionContextScope::StaticVariable( QgsExpressionContext::EXPR_CLUSTER_COLOR, "", true ) );
195+
scope.addVariable( QgsExpressionContextScope::StaticVariable( QgsExpressionContext::EXPR_CLUSTER_SIZE, 0, true ) );
196+
QList< QgsExpressionContextScope > scopes = mContext.additionalExpressionContextScopes();
197+
scopes << scope;
198+
Q_FOREACH ( const QgsExpressionContextScope &s, scopes )
199+
{
200+
context << new QgsExpressionContextScope( s );
201+
}
202+
return context;
177203
}
178204

179205
void QgsPointDisplacementRendererWidget::on_mLabelFieldComboBox_currentIndexChanged( const QString &text )
@@ -348,55 +374,18 @@ void QgsPointDisplacementRendererWidget::blockAllSignals( bool block )
348374
mCircleModificationSpinBox->blockSignals( block );
349375
mScaleDependentLabelsCheckBox->blockSignals( block );
350376
mMinLabelScaleWidget->blockSignals( block );
351-
mCenterSymbolPushButton->blockSignals( block );
377+
mCenterSymbolToolButton->blockSignals( block );
352378
mDistanceSpinBox->blockSignals( block );
353379
mDistanceUnitWidget->blockSignals( block );
354380
mPlacementComboBox->blockSignals( block );
355381
}
356382

357-
void QgsPointDisplacementRendererWidget::on_mCenterSymbolPushButton_clicked()
383+
void QgsPointDisplacementRendererWidget::centerSymbolChanged()
358384
{
359-
if ( !mRenderer || !mRenderer->centerSymbol() )
360-
{
361-
return;
362-
}
363-
QgsMarkerSymbol *markerSymbol = mRenderer->centerSymbol()->clone();
364-
QgsSymbolSelectorWidget *dlg = new QgsSymbolSelectorWidget( markerSymbol, QgsStyle::defaultStyle(), mLayer, this );
365-
dlg->setPanelTitle( tr( "Center symbol" ) );
366-
367-
QgsSymbolWidgetContext context = mContext;
368-
369-
QgsExpressionContextScope scope;
370-
scope.addVariable( QgsExpressionContextScope::StaticVariable( QgsExpressionContext::EXPR_CLUSTER_COLOR, "", true ) );
371-
scope.addVariable( QgsExpressionContextScope::StaticVariable( QgsExpressionContext::EXPR_CLUSTER_SIZE, 0, true ) );
372-
QList< QgsExpressionContextScope > scopes = context.additionalExpressionContextScopes();
373-
scopes << scope;
374-
context.setAdditionalExpressionContextScopes( scopes );
375-
dlg->setContext( context );
376-
377-
connect( dlg, &QgsPanelWidget::widgetChanged, this, &QgsPointDisplacementRendererWidget::updateCenterSymbolFromWidget );
378-
connect( dlg, &QgsPanelWidget::panelAccepted, this, &QgsPointDisplacementRendererWidget::cleanUpSymbolSelector );
379-
openPanel( dlg );
380-
}
381-
382-
void QgsPointDisplacementRendererWidget::updateCenterSymbolFromWidget()
383-
{
384-
QgsSymbolSelectorWidget *dlg = qobject_cast<QgsSymbolSelectorWidget *>( sender() );
385-
QgsSymbol *symbol = dlg->symbol()->clone();
386-
mRenderer->setCenterSymbol( static_cast< QgsMarkerSymbol * >( symbol ) );
387-
updateCenterIcon();
385+
mRenderer->setCenterSymbol( mCenterSymbolToolButton->clonedSymbol< QgsMarkerSymbol >() );
388386
emit widgetChanged();
389387
}
390388

391-
void QgsPointDisplacementRendererWidget::cleanUpSymbolSelector( QgsPanelWidget *container )
392-
{
393-
if ( container )
394-
{
395-
QgsSymbolSelectorWidget *dlg = qobject_cast<QgsSymbolSelectorWidget *>( container );
396-
delete dlg->symbol();
397-
}
398-
}
399-
400389
void QgsPointDisplacementRendererWidget::updateRendererFromWidget()
401390
{
402391
QgsRendererWidget *w = qobject_cast<QgsRendererWidget *>( sender() );
@@ -407,17 +396,6 @@ void QgsPointDisplacementRendererWidget::updateRendererFromWidget()
407396
emit widgetChanged();
408397
}
409398

410-
void QgsPointDisplacementRendererWidget::updateCenterIcon()
411-
{
412-
QgsMarkerSymbol *symbol = mRenderer->centerSymbol();
413-
if ( !symbol )
414-
{
415-
return;
416-
}
417-
QIcon icon = QgsSymbolLayerUtils::symbolPreviewIcon( symbol, mCenterSymbolPushButton->iconSize() );
418-
mCenterSymbolPushButton->setIcon( icon );
419-
}
420-
421399
void QgsPointDisplacementRendererWidget::setupBlankUi( const QString &layerName )
422400
{
423401
QLabel *label = new QLabel( tr( "The point displacement renderer only applies to (single) point layers. \n'%1' is not a point layer and cannot be displayed by the point displacement renderer" ).arg( layerName ), this );

‎src/gui/symbology-ng/qgspointdisplacementrendererwidget.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,15 @@
2121
#include "ui_qgspointdisplacementrendererwidgetbase.h"
2222
#include "qgis.h"
2323
#include "qgsrendererwidget.h"
24+
#include "qgsexpressioncontextgenerator.h"
2425
#include "qgis_gui.h"
2526

2627
class QgsPointDisplacementRenderer;
2728

2829
/** \ingroup gui
2930
* \class QgsPointDisplacementRendererWidget
3031
*/
31-
class GUI_EXPORT QgsPointDisplacementRendererWidget: public QgsRendererWidget, private Ui::QgsPointDisplacementRendererWidgetBase
32+
class GUI_EXPORT QgsPointDisplacementRendererWidget: public QgsRendererWidget, public QgsExpressionContextGenerator, private Ui::QgsPointDisplacementRendererWidgetBase
3233
{
3334
Q_OBJECT
3435
public:
@@ -39,11 +40,12 @@ class GUI_EXPORT QgsPointDisplacementRendererWidget: public QgsRendererWidget, p
3940
QgsFeatureRenderer *renderer() override;
4041
void setContext( const QgsSymbolWidgetContext &context ) override;
4142

43+
QgsExpressionContext createExpressionContext() const override;
44+
4245
private:
4346
QgsPointDisplacementRenderer *mRenderer = nullptr;
4447

4548
void blockAllSignals( bool block );
46-
void updateCenterIcon();
4749
void setupBlankUi( const QString &layerName );
4850

4951
private slots:
@@ -59,10 +61,8 @@ class GUI_EXPORT QgsPointDisplacementRendererWidget: public QgsRendererWidget, p
5961
void on_mCircleModificationSpinBox_valueChanged( double d );
6062
void on_mScaleDependentLabelsCheckBox_stateChanged( int state );
6163
void minLabelScaleChanged( double scale );
62-
void on_mCenterSymbolPushButton_clicked();
6364
void on_mRendererSettingsButton_clicked();
64-
void updateCenterSymbolFromWidget();
65-
void cleanUpSymbolSelector( QgsPanelWidget *container );
65+
void centerSymbolChanged();
6666
void updateRendererFromWidget();
6767
};
6868

‎src/ui/composer/qgscomposershapewidgetbase.ui

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,11 @@
9696
</property>
9797
</widget>
9898
</item>
99+
<item row="0" column="0" colspan="2">
100+
<widget class="QComboBox" name="mShapeComboBox"/>
101+
</item>
99102
<item row="2" column="1">
100-
<widget class="QPushButton" name="mShapeStyleButton">
103+
<widget class="QgsSymbolButton" name="mShapeStyleButton">
101104
<property name="sizePolicy">
102105
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
103106
<horstretch>0</horstretch>
@@ -109,9 +112,6 @@
109112
</property>
110113
</widget>
111114
</item>
112-
<item row="0" column="0" colspan="2">
113-
<widget class="QComboBox" name="mShapeComboBox"/>
114-
</item>
115115
</layout>
116116
</widget>
117117
</item>
@@ -122,6 +122,11 @@
122122
</layout>
123123
</widget>
124124
<customwidgets>
125+
<customwidget>
126+
<class>QgsDoubleSpinBox</class>
127+
<extends>QDoubleSpinBox</extends>
128+
<header>qgsdoublespinbox.h</header>
129+
</customwidget>
125130
<customwidget>
126131
<class>QgsScrollArea</class>
127132
<extends>QScrollArea</extends>
@@ -135,9 +140,9 @@
135140
<container>1</container>
136141
</customwidget>
137142
<customwidget>
138-
<class>QgsDoubleSpinBox</class>
139-
<extends>QDoubleSpinBox</extends>
140-
<header>qgsdoublespinbox.h</header>
143+
<class>QgsSymbolButton</class>
144+
<extends>QToolButton</extends>
145+
<header>qgssymbolbutton.h</header>
141146
</customwidget>
142147
</customwidgets>
143148
<tabstops>

‎src/ui/composer/qgscompositionwidgetbase.ui

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -663,6 +663,11 @@
663663
</widget>
664664
<layoutdefault spacing="6" margin="11"/>
665665
<customwidgets>
666+
<customwidget>
667+
<class>QgsDoubleSpinBox</class>
668+
<extends>QDoubleSpinBox</extends>
669+
<header>qgsdoublespinbox.h</header>
670+
</customwidget>
666671
<customwidget>
667672
<class>QgsScrollArea</class>
668673
<extends>QScrollArea</extends>
@@ -681,11 +686,6 @@
681686
<header>qgscollapsiblegroupbox.h</header>
682687
<container>1</container>
683688
</customwidget>
684-
<customwidget>
685-
<class>QgsDoubleSpinBox</class>
686-
<extends>QDoubleSpinBox</extends>
687-
<header>qgsdoublespinbox.h</header>
688-
</customwidget>
689689
<customwidget>
690690
<class>QgsSpinBox</class>
691691
<extends>QSpinBox</extends>

‎src/ui/qgspointdisplacementrendererwidgetbase.ui

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -136,13 +136,6 @@
136136
</property>
137137
</widget>
138138
</item>
139-
<item row="0" column="1">
140-
<widget class="QPushButton" name="mCenterSymbolPushButton">
141-
<property name="text">
142-
<string/>
143-
</property>
144-
</widget>
145-
</item>
146139
<item row="4" column="0" colspan="2">
147140
<widget class="QPushButton" name="mRendererSettingsButton">
148141
<property name="text">
@@ -272,14 +265,26 @@
272265
</layout>
273266
</widget>
274267
</item>
268+
<item row="0" column="1">
269+
<widget class="QgsSymbolButton" name="mCenterSymbolToolButton">
270+
<property name="sizePolicy">
271+
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
272+
<horstretch>0</horstretch>
273+
<verstretch>0</verstretch>
274+
</sizepolicy>
275+
</property>
276+
<property name="text">
277+
<string/>
278+
</property>
279+
</widget>
280+
</item>
275281
</layout>
276282
</widget>
277283
<customwidgets>
278284
<customwidget>
279-
<class>QgsColorButton</class>
280-
<extends>QToolButton</extends>
281-
<header>qgscolorbutton.h</header>
282-
<container>1</container>
285+
<class>QgsDoubleSpinBox</class>
286+
<extends>QDoubleSpinBox</extends>
287+
<header>qgsdoublespinbox.h</header>
283288
</customwidget>
284289
<customwidget>
285290
<class>QgsCollapsibleGroupBoxBasic</class>
@@ -288,9 +293,15 @@
288293
<container>1</container>
289294
</customwidget>
290295
<customwidget>
291-
<class>QgsDoubleSpinBox</class>
292-
<extends>QDoubleSpinBox</extends>
293-
<header>qgsdoublespinbox.h</header>
296+
<class>QgsSymbolButton</class>
297+
<extends>QToolButton</extends>
298+
<header>qgssymbolbutton.h</header>
299+
</customwidget>
300+
<customwidget>
301+
<class>QgsColorButton</class>
302+
<extends>QToolButton</extends>
303+
<header>qgscolorbutton.h</header>
304+
<container>1</container>
294305
</customwidget>
295306
<customwidget>
296307
<class>QgsFontButton</class>
@@ -310,7 +321,7 @@
310321
</customwidget>
311322
</customwidgets>
312323
<tabstops>
313-
<tabstop>mCenterSymbolPushButton</tabstop>
324+
<tabstop>mCenterSymbolToolButton</tabstop>
314325
<tabstop>mRendererComboBox</tabstop>
315326
<tabstop>mRendererSettingsButton</tabstop>
316327
<tabstop>mDistanceSpinBox</tabstop>

‎src/ui/symbollayer/qgspointclusterrendererwidgetbase.ui

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,6 @@
2626
<property name="bottomMargin">
2727
<number>0</number>
2828
</property>
29-
<item row="0" column="1">
30-
<widget class="QPushButton" name="mCenterSymbolPushButton">
31-
<property name="text">
32-
<string/>
33-
</property>
34-
</widget>
35-
</item>
3629
<item row="2" column="1">
3730
<widget class="QComboBox" name="mRendererComboBox"/>
3831
</item>
@@ -98,6 +91,19 @@
9891
</property>
9992
</widget>
10093
</item>
94+
<item row="0" column="1">
95+
<widget class="QgsSymbolButton" name="mCenterSymbolToolButton">
96+
<property name="sizePolicy">
97+
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
98+
<horstretch>0</horstretch>
99+
<verstretch>0</verstretch>
100+
</sizepolicy>
101+
</property>
102+
<property name="text">
103+
<string/>
104+
</property>
105+
</widget>
106+
</item>
101107
</layout>
102108
</widget>
103109
<customwidgets>
@@ -106,6 +112,11 @@
106112
<extends>QDoubleSpinBox</extends>
107113
<header>qgsdoublespinbox.h</header>
108114
</customwidget>
115+
<customwidget>
116+
<class>QgsSymbolButton</class>
117+
<extends>QToolButton</extends>
118+
<header>qgssymbolbutton.h</header>
119+
</customwidget>
109120
<customwidget>
110121
<class>QgsUnitSelectionWidget</class>
111122
<extends>QWidget</extends>
@@ -114,7 +125,7 @@
114125
</customwidget>
115126
</customwidgets>
116127
<tabstops>
117-
<tabstop>mCenterSymbolPushButton</tabstop>
128+
<tabstop>mCenterSymbolToolButton</tabstop>
118129
<tabstop>mRendererComboBox</tabstop>
119130
<tabstop>mRendererSettingsButton</tabstop>
120131
<tabstop>mDistanceSpinBox</tabstop>

0 commit comments

Comments
 (0)
Please sign in to comment.