Skip to content

Commit a62c6a9

Browse files
committedSep 16, 2015
Give symbol widgets optional access to a map canvas
This allows symbol widgets to fetch properties from the main map canvas, for instance fetching the current scale from the map.
1 parent 60cce74 commit a62c6a9

36 files changed

+228
-12
lines changed
 

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ class QgsLayerPropertiesWidget : QWidget
1515
*/
1616
QgsExpressionContext* expressionContext() const;
1717

18+
/** Sets the map canvas associated with the widget. This allows the widget to retrieve the current
19+
* map scale and other properties from the canvas.
20+
* @param canvas map canvas
21+
* @note added in QGIS 2.12
22+
*/
23+
virtual void setMapCanvas( QgsMapCanvas* canvas );
24+
1825
public slots:
1926
void layerTypeChanged();
2027
void emitSignalChanged();

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ class QgsPointDisplacementRendererWidget: QgsRendererV2Widget
99
~QgsPointDisplacementRendererWidget();
1010

1111
QgsFeatureRendererV2* renderer();
12+
void setMapCanvas( QgsMapCanvas* canvas );
1213
};

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ class QgsRendererV2PropertiesDialog : QDialog
66

77
public:
88
QgsRendererV2PropertiesDialog( QgsVectorLayer* layer, QgsStyleV2* style, bool embedded = false );
9+
~QgsRendererV2PropertiesDialog();
10+
11+
/** Sets the map canvas associated with the dialog. This allows the widget to retrieve the current
12+
* map scale and other properties from the canvas.
13+
* @param canvas map canvas
14+
* @note added in QGIS 2.12
15+
*/
16+
void setMapCanvas( QgsMapCanvas* canvas );
917

1018
public slots:
1119
//! called when user changes renderer type

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,13 @@ class QgsRendererV2Widget : QWidget
1515
//! show a dialog with renderer's symbol level settings
1616
void showSymbolLevelsDialog( QgsFeatureRendererV2* r );
1717

18+
/** Sets the map canvas associated with the widget. This allows the widget to retrieve the current
19+
* map scale and other properties from the canvas.
20+
* @param canvas map canvas
21+
* @note added in QGIS 2.12
22+
*/
23+
virtual void setMapCanvas( QgsMapCanvas* canvas );
24+
1825
protected:
1926
/** Subclasses may provide the capability of changing multiple symbols at once by implementing the following two methods
2027
and by connecting the slot contextMenuViewCategories(const QPoint&)*/

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ class QgsRendererRulePropsDialog : QDialog
106106
%End
107107

108108
public:
109-
QgsRendererRulePropsDialog( QgsRuleBasedRendererV2::Rule* rule, QgsVectorLayer* layer, QgsStyleV2* style, QWidget* parent /TransferThis/ = 0 );
109+
QgsRendererRulePropsDialog( QgsRuleBasedRendererV2::Rule* rule, QgsVectorLayer* layer, QgsStyleV2* style, QWidget* parent /TransferThis/ = 0, QgsMapCanvas* mapCanvas = 0 );
110110
~QgsRendererRulePropsDialog();
111111

112112
QgsRuleBasedRendererV2::Rule* rule();

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ class QgsSingleSymbolRendererV2Widget : QgsRendererV2Widget
1111

1212
virtual QgsFeatureRendererV2* renderer();
1313

14+
virtual void setMapCanvas( QgsMapCanvas* canvas );
15+
1416
public slots:
1517
void changeSingleSymbol();
1618

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ class QgsSymbolLayerV2Widget : QWidget
2020
*/
2121
QgsExpressionContext* expressionContext() const;
2222

23+
/** Sets the map canvas associated with the widget. This allows the widget to retrieve the current
24+
* map scale and other properties from the canvas.
25+
* @param canvas map canvas
26+
* @note added in QGIS 2.12
27+
*/
28+
virtual void setMapCanvas( QgsMapCanvas* canvas );
29+
2330
/** Returns the vector layer associated with the widget.
2431
* @note added in QGIS 2.12
2532
*/

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@ class QgsSymbolsListWidget : QWidget
1414
*/
1515
QgsExpressionContext* expressionContext() const;
1616

17+
/** Sets the map canvas associated with the widget. This allows the widget to retrieve the current
18+
* map scale and other properties from the canvas.
19+
* @param canvas map canvas
20+
* @note added in QGIS 2.12
21+
*/
22+
virtual void setMapCanvas( QgsMapCanvas* canvas );
23+
1724
/** Returns the vector layer associated with the widget.
1825
* @note added in QGIS 2.12
1926
*/

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@ class QgsSymbolV2SelectorDialog : QDialog
2727
*/
2828
QgsExpressionContext* expressionContext() const;
2929

30+
/** Sets the map canvas associated with the dialog. This allows the widget to retrieve the current
31+
* map scale and other properties from the canvas.
32+
* @param canvas map canvas
33+
* @note added in QGIS 2.12
34+
*/
35+
void setMapCanvas( QgsMapCanvas* canvas );
36+
3037
protected:
3138
//! Reimplements dialog keyPress event so we can ignore it
3239
void keyPressEvent( QKeyEvent * event );

‎src/app/qgsvectorlayerproperties.cpp‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1237,6 +1237,7 @@ void QgsVectorLayerProperties::updateSymbologyPage()
12371237
if ( layer->rendererV2() )
12381238
{
12391239
mRendererDialog = new QgsRendererV2PropertiesDialog( layer, QgsStyleV2::defaultStyle(), true );
1240+
mRendererDialog->setMapCanvas( QgisApp::instance()->mapCanvas() );
12401241

12411242
// display the menu to choose the output format (fix #5136)
12421243
mActionSaveStyleAs->setText( tr( "Save Style" ) );

‎src/app/qgsvectorlayerproperties.h‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class QgsVectorLayer;
4040
class QgsLabelingGui;
4141
class QgsDiagramProperties;
4242
class QgsFieldsProperties;
43+
class QgsRendererV2PropertiesDialog;
4344

4445
class APP_EXPORT QgsVectorLayerProperties : public QgsOptionsDialogBase, private Ui::QgsVectorLayerPropertiesBase
4546
{
@@ -164,7 +165,7 @@ class APP_EXPORT QgsVectorLayerProperties : public QgsOptionsDialogBase, private
164165
QAction* mActionSaveStyleAs;
165166

166167
/** Renderer dialog which is shown*/
167-
QDialog* mRendererDialog;
168+
QgsRendererV2PropertiesDialog* mRendererDialog;
168169
/** Labeling dialog. If apply is pressed, options are applied to vector's QgsLabel */
169170
QgsLabelingGui* labelingDialog;
170171
/** Label dialog. If apply is pressed, options are applied to vector's QgsLabel */

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,7 @@ void QgsCategorizedSymbolRendererV2Widget::changeSelectedSymbols()
522522
{
523523
QgsSymbolV2* newSymbol = mCategorizedSymbol->clone();
524524
QgsSymbolV2SelectorDialog dlg( newSymbol, mStyle, mLayer, this );
525+
dlg.setMapCanvas( mMapCanvas );
525526
if ( !dlg.exec() )
526527
{
527528
delete newSymbol;
@@ -555,6 +556,7 @@ void QgsCategorizedSymbolRendererV2Widget::changeCategorizedSymbol()
555556
QgsSymbolV2* newSymbol = mCategorizedSymbol->clone();
556557

557558
QgsSymbolV2SelectorDialog dlg( newSymbol, mStyle, mLayer, this );
559+
dlg.setMapCanvas( mMapCanvas );
558560
if ( !dlg.exec() )
559561
{
560562
delete newSymbol;
@@ -605,6 +607,7 @@ void QgsCategorizedSymbolRendererV2Widget::changeCategorySymbol()
605607
}
606608

607609
QgsSymbolV2SelectorDialog dlg( symbol, mStyle, mLayer, this );
610+
dlg.setMapCanvas( mMapCanvas );
608611
if ( !dlg.exec() )
609612
{
610613
delete symbol;

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -773,6 +773,7 @@ void QgsGraduatedSymbolRendererV2Widget::changeGraduatedSymbol()
773773
QgsSymbolV2* newSymbol = mGraduatedSymbol->clone();
774774

775775
QgsSymbolV2SelectorDialog dlg( newSymbol, mStyle, mLayer, this );
776+
dlg.setMapCanvas( mMapCanvas );
776777
if ( !dlg.exec() )
777778
{
778779
delete newSymbol;
@@ -860,6 +861,7 @@ void QgsGraduatedSymbolRendererV2Widget::changeSelectedSymbols()
860861
{
861862
QgsSymbolV2* newSymbol = mGraduatedSymbol->clone();
862863
QgsSymbolV2SelectorDialog dlg( newSymbol, mStyle, mLayer, this );
864+
dlg.setMapCanvas( mMapCanvas );
863865
if ( !dlg.exec() )
864866
{
865867
delete newSymbol;
@@ -885,6 +887,7 @@ void QgsGraduatedSymbolRendererV2Widget::changeRangeSymbol( int rangeIdx )
885887
QgsSymbolV2* newSymbol = mRenderer->ranges()[rangeIdx].symbol()->clone();
886888

887889
QgsSymbolV2SelectorDialog dlg( newSymbol, mStyle, mLayer, this );
890+
dlg.setMapCanvas( mMapCanvas );
888891
if ( !dlg.exec() )
889892
{
890893
delete newSymbol;

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,12 @@ QgsFeatureRendererV2* QgsHeatmapRendererWidget::renderer()
120120
return mRenderer;
121121
}
122122

123+
void QgsHeatmapRendererWidget::setMapCanvas( QgsMapCanvas* canvas )
124+
{
125+
QgsRendererV2Widget::setMapCanvas( canvas );
126+
mRadiusUnitWidget->setMapCanvas( canvas );
127+
}
128+
123129
void QgsHeatmapRendererWidget::applyColorRamp()
124130
{
125131
if ( !mRenderer )

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ class GUI_EXPORT QgsHeatmapRendererWidget : public QgsRendererV2Widget, private
4343
/** @returns the current feature renderer */
4444
virtual QgsFeatureRendererV2* renderer() override;
4545

46+
void setMapCanvas( QgsMapCanvas* canvas ) override;
47+
4648
protected:
4749
QgsHeatmapRenderer* mRenderer;
4850

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,20 @@ QgsFeatureRendererV2* QgsInvertedPolygonRendererWidget::renderer()
111111
return mRenderer.data();
112112
}
113113

114+
void QgsInvertedPolygonRendererWidget::setMapCanvas( QgsMapCanvas* canvas )
115+
{
116+
QgsRendererV2Widget::setMapCanvas( canvas );
117+
mEmbeddedRendererWidget->setMapCanvas( canvas );
118+
}
119+
114120
void QgsInvertedPolygonRendererWidget::on_mRendererComboBox_currentIndexChanged( int index )
115121
{
116122
QString rendererId = mRendererComboBox->itemData( index ).toString();
117123
QgsRendererV2AbstractMetadata* m = QgsRendererV2Registry::instance()->rendererMetadata( rendererId );
118124
if ( m )
119125
{
120126
mEmbeddedRendererWidget.reset( m->createRendererWidget( mLayer, mStyle, const_cast<QgsFeatureRendererV2*>( mRenderer->embeddedRenderer() )->clone() ) );
127+
mEmbeddedRendererWidget->setMapCanvas( mMapCanvas );
121128

122129
if ( mLayout->count() > 2 )
123130
{

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class GUI_EXPORT QgsInvertedPolygonRendererWidget : public QgsRendererV2Widget,
4747

4848
/** @returns the current feature renderer */
4949
virtual QgsFeatureRendererV2* renderer() override;
50+
void setMapCanvas( QgsMapCanvas* canvas ) override;
5051

5152
protected:
5253
/** The mask renderer */

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ static void _initWidgetFunctions()
8383
QgsLayerPropertiesWidget::QgsLayerPropertiesWidget( QgsSymbolLayerV2* layer, const QgsSymbolV2* symbol, const QgsVectorLayer* vl, QWidget* parent )
8484
: QWidget( parent )
8585
, mPresetExpressionContext( 0 )
86+
, mMapCanvas( 0 )
8687
{
8788

8889
mLayer = layer;
@@ -116,6 +117,14 @@ QgsLayerPropertiesWidget::QgsLayerPropertiesWidget( QgsSymbolLayerV2* layer, con
116117
mEffectWidget->setPaintEffect( mLayer->paintEffect() );
117118
}
118119

120+
void QgsLayerPropertiesWidget::setMapCanvas( QgsMapCanvas *canvas )
121+
{
122+
mMapCanvas = canvas;
123+
QgsSymbolLayerV2Widget* w = dynamic_cast< QgsSymbolLayerV2Widget* >( stackedWidget->currentWidget() );
124+
if ( w )
125+
w->setMapCanvas( mMapCanvas );
126+
}
127+
119128
void QgsLayerPropertiesWidget::setExpressionContext( QgsExpressionContext *context )
120129
{
121130
mPresetExpressionContext = context;
@@ -165,6 +174,8 @@ void QgsLayerPropertiesWidget::updateSymbolLayerWidget( QgsSymbolLayerV2* layer
165174
{
166175
w->setSymbolLayer( layer );
167176
w->setExpressionContext( mPresetExpressionContext );
177+
if ( mMapCanvas )
178+
w->setMapCanvas( mMapCanvas );
168179
stackedWidget->addWidget( w );
169180
stackedWidget->setCurrentWidget( w );
170181
// start receiving updates from widget

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class QgsSymbolV2;
2222
class QgsSymbolLayerV2;
2323
class QgsSymbolLayerV2Widget;
2424
class QgsVectorLayer;
25+
class QgsMapCanvas;
2526

2627
class SymbolLayerItem;
2728

@@ -44,6 +45,13 @@ class GUI_EXPORT QgsLayerPropertiesWidget : public QWidget, private Ui::LayerPro
4445
*/
4546
QgsExpressionContext* expressionContext() const { return mPresetExpressionContext; }
4647

48+
/** Sets the map canvas associated with the widget. This allows the widget to retrieve the current
49+
* map scale and other properties from the canvas.
50+
* @param canvas map canvas
51+
* @note added in QGIS 2.12
52+
*/
53+
virtual void setMapCanvas( QgsMapCanvas* canvas );
54+
4755
public slots:
4856
void layerTypeChanged();
4957
void emitSignalChanged();
@@ -74,6 +82,8 @@ class GUI_EXPORT QgsLayerPropertiesWidget : public QWidget, private Ui::LayerPro
7482

7583
private:
7684
QgsExpressionContext* mPresetExpressionContext;
85+
QgsMapCanvas* mMapCanvas;
86+
7787
};
7888

7989
#endif //QGSLAYERPROPERTIESWIDGET_H

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,13 @@ QgsFeatureRendererV2* QgsPointDisplacementRendererWidget::renderer()
160160
return mRenderer;
161161
}
162162

163+
void QgsPointDisplacementRendererWidget::setMapCanvas( QgsMapCanvas* canvas )
164+
{
165+
QgsRendererV2Widget::setMapCanvas( canvas );
166+
mDistanceUnitWidget->setMapCanvas( canvas );
167+
mEmbeddedRendererWidget->setMapCanvas( canvas );
168+
}
169+
163170
void QgsPointDisplacementRendererWidget::on_mLabelFieldComboBox_currentIndexChanged( const QString& text )
164171
{
165172
if ( mRenderer )
@@ -183,6 +190,7 @@ void QgsPointDisplacementRendererWidget::on_mRendererComboBox_currentIndexChange
183190
{
184191
delete mEmbeddedRendererWidget;
185192
mEmbeddedRendererWidget = m->createRendererWidget( mLayer, mStyle, mRenderer->embeddedRenderer()->clone() );
193+
mEmbeddedRendererWidget->setMapCanvas( mMapCanvas );
186194
}
187195
}
188196

@@ -332,6 +340,7 @@ void QgsPointDisplacementRendererWidget::on_mCenterSymbolPushButton_clicked()
332340
}
333341
QgsMarkerSymbolV2* markerSymbol = dynamic_cast<QgsMarkerSymbolV2*>( mRenderer->centerSymbol()->clone() );
334342
QgsSymbolV2SelectorDialog dlg( markerSymbol, QgsStyleV2::defaultStyle(), mLayer, this );
343+
dlg.setMapCanvas( mMapCanvas );
335344
if ( dlg.exec() == QDialog::Rejected )
336345
{
337346
delete markerSymbol;

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class GUI_EXPORT QgsPointDisplacementRendererWidget: public QgsRendererV2Widget,
3232
~QgsPointDisplacementRendererWidget();
3333

3434
QgsFeatureRendererV2* renderer() override;
35+
void setMapCanvas( QgsMapCanvas* canvas ) override;
3536

3637
private:
3738
QgsPointDisplacementRenderer* mRenderer;

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ QgsRendererV2PropertiesDialog::QgsRendererV2PropertiesDialog( QgsVectorLayer* la
7878
, mStyle( style )
7979
, mActiveWidget( NULL )
8080
, mPaintEffect( 0 )
81+
, mMapCanvas( 0 )
8182
{
8283
setupUi( this );
8384

@@ -149,6 +150,13 @@ QgsRendererV2PropertiesDialog::~QgsRendererV2PropertiesDialog()
149150
delete mPaintEffect;
150151
}
151152

153+
void QgsRendererV2PropertiesDialog::setMapCanvas( QgsMapCanvas* canvas )
154+
{
155+
mMapCanvas = canvas;
156+
if ( mActiveWidget )
157+
mActiveWidget->setMapCanvas( mMapCanvas );
158+
}
159+
152160

153161
void QgsRendererV2PropertiesDialog::rendererChanged()
154162
{
@@ -193,6 +201,8 @@ void QgsRendererV2PropertiesDialog::rendererChanged()
193201
mActiveWidget = w;
194202
stackedWidget->addWidget( mActiveWidget );
195203
stackedWidget->setCurrentWidget( mActiveWidget );
204+
if ( mMapCanvas )
205+
mActiveWidget->setMapCanvas( mMapCanvas );
196206
}
197207
else
198208
{

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class QgsStyleV2;
2828
class QgsSymbolV2;
2929
class QgsPaintEffect;
3030
class QgsRendererV2Widget;
31+
class QgsMapCanvas;
3132

3233
class GUI_EXPORT QgsRendererV2PropertiesDialog : public QDialog, private Ui::QgsRendererV2PropsDialogBase
3334
{
@@ -37,6 +38,13 @@ class GUI_EXPORT QgsRendererV2PropertiesDialog : public QDialog, private Ui::Qgs
3738
QgsRendererV2PropertiesDialog( QgsVectorLayer* layer, QgsStyleV2* style, bool embedded = false );
3839
~QgsRendererV2PropertiesDialog();
3940

41+
/** Sets the map canvas associated with the dialog. This allows the widget to retrieve the current
42+
* map scale and other properties from the canvas.
43+
* @param canvas map canvas
44+
* @note added in QGIS 2.12
45+
*/
46+
void setMapCanvas( QgsMapCanvas* canvas );
47+
4048
public slots:
4149
//! called when user changes renderer type
4250
void rendererChanged();
@@ -56,6 +64,8 @@ class GUI_EXPORT QgsRendererV2PropertiesDialog : public QDialog, private Ui::Qgs
5664
QgsRendererV2Widget* mActiveWidget;
5765

5866
QgsPaintEffect* mPaintEffect;
67+
68+
QgsMapCanvas* mMapCanvas;
5969
};
6070

6171

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,10 @@
2424
#include <QMenu>
2525

2626
QgsRendererV2Widget::QgsRendererV2Widget( QgsVectorLayer* layer, QgsStyleV2* style )
27-
: QWidget(), mLayer( layer ), mStyle( style )
27+
: QWidget()
28+
, mLayer( layer )
29+
, mStyle( style )
30+
, mMapCanvas( 0 )
2831
{
2932
contextMenu = new QMenu( tr( "Renderer Options" ), this );
3033

@@ -207,6 +210,11 @@ void QgsRendererV2Widget::showSymbolLevelsDialog( QgsFeatureRendererV2* r )
207210
}
208211
}
209212

213+
void QgsRendererV2Widget::setMapCanvas( QgsMapCanvas *canvas )
214+
{
215+
mMapCanvas = canvas;
216+
}
217+
210218

211219
////////////
212220

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class QgsVectorLayer;
2424
class QgsStyleV2;
2525
class QgsFeatureRendererV2;
2626
class QgsSymbolV2SelectorDialog;
27-
27+
class QgsMapCanvas;
2828

2929
/**
3030
Base class for renderer settings widgets
@@ -50,12 +50,20 @@ class GUI_EXPORT QgsRendererV2Widget : public QWidget
5050
//! show a dialog with renderer's symbol level settings
5151
void showSymbolLevelsDialog( QgsFeatureRendererV2* r );
5252

53+
/** Sets the map canvas associated with the widget. This allows the widget to retrieve the current
54+
* map scale and other properties from the canvas.
55+
* @param canvas map canvas
56+
* @note added in QGIS 2.12
57+
*/
58+
virtual void setMapCanvas( QgsMapCanvas* canvas );
59+
5360
protected:
5461
QgsVectorLayer* mLayer;
5562
QgsStyleV2* mStyle;
5663
QMenu* contextMenu;
5764
QAction* mCopyAction;
5865
QAction* mPasteAction;
66+
QgsMapCanvas* mMapCanvas;
5967

6068
/** Subclasses may provide the capability of changing multiple symbols at once by implementing the following two methods
6169
and by connecting the slot contextMenuViewCategories(const QPoint&)*/

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ void QgsRuleBasedRendererV2Widget::addRule()
129129
QgsSymbolV2* s = QgsSymbolV2::defaultSymbol( mLayer->geometryType() );
130130
QgsRuleBasedRendererV2::Rule* newrule = new QgsRuleBasedRendererV2::Rule( s );
131131

132-
QgsRendererRulePropsDialog dlg( newrule, mLayer, mStyle, this );
132+
QgsRendererRulePropsDialog dlg( newrule, mLayer, mStyle, this, mMapCanvas );
133133
if ( dlg.exec() )
134134
{
135135
QgsRuleBasedRendererV2::Rule* current = currentRule();
@@ -173,7 +173,7 @@ void QgsRuleBasedRendererV2Widget::editRule( const QModelIndex& index )
173173
return;
174174
QgsRuleBasedRendererV2::Rule* rule = mModel->ruleForIndex( index );
175175

176-
QgsRendererRulePropsDialog dlg( rule, mLayer, mStyle, this );
176+
QgsRendererRulePropsDialog dlg( rule, mLayer, mStyle, this, mMapCanvas );
177177
if ( dlg.exec() )
178178
{
179179
// model should know about the change and emit dataChanged signal for the view
@@ -256,6 +256,7 @@ void QgsRuleBasedRendererV2Widget::refineRuleCategoriesGui( const QModelIndexLis
256256
dlg.setWindowTitle( tr( "Refine a rule to categories" ) );
257257
QVBoxLayout* l = new QVBoxLayout();
258258
QgsCategorizedSymbolRendererV2Widget* w = new QgsCategorizedSymbolRendererV2Widget( mLayer, mStyle, NULL );
259+
w->setMapCanvas( mMapCanvas );
259260
l->addWidget( w );
260261
QDialogButtonBox* bb = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel );
261262
l->addWidget( bb );
@@ -286,6 +287,7 @@ void QgsRuleBasedRendererV2Widget::refineRuleRangesGui( const QModelIndexList& i
286287
dlg.setWindowTitle( tr( "Refine a rule to ranges" ) );
287288
QVBoxLayout* l = new QVBoxLayout();
288289
QgsGraduatedSymbolRendererV2Widget* w = new QgsGraduatedSymbolRendererV2Widget( mLayer, mStyle, NULL );
290+
w->setMapCanvas( mMapCanvas );
289291
l->addWidget( w );
290292
QDialogButtonBox* bb = new QDialogButtonBox( QDialogButtonBox::Ok | QDialogButtonBox::Cancel );
291293
l->addWidget( bb );
@@ -571,8 +573,8 @@ void QgsRuleBasedRendererV2Widget::countFeatures()
571573

572574
///////////
573575

574-
QgsRendererRulePropsDialog::QgsRendererRulePropsDialog( QgsRuleBasedRendererV2::Rule* rule, QgsVectorLayer* layer, QgsStyleV2* style, QWidget* parent )
575-
: QDialog( parent ), mRule( rule ), mLayer( layer ), mSymbolSelector( NULL ), mSymbol( NULL )
576+
QgsRendererRulePropsDialog::QgsRendererRulePropsDialog( QgsRuleBasedRendererV2::Rule* rule, QgsVectorLayer* layer, QgsStyleV2* style, QWidget* parent , QgsMapCanvas* mapCanvas )
577+
: QDialog( parent ), mRule( rule ), mLayer( layer ), mSymbolSelector( NULL ), mSymbol( NULL ), mMapCanvas( mapCanvas )
576578
{
577579
setupUi( this );
578580
#ifdef Q_OS_MAC
@@ -597,6 +599,7 @@ QgsRendererRulePropsDialog::QgsRendererRulePropsDialog( QgsRuleBasedRendererV2::
597599
if ( rule->scaleMaxDenom() > 0 )
598600
mScaleRangeWidget->setMinimumScale( 1.0 / rule->scaleMaxDenom() );
599601
}
602+
mScaleRangeWidget->setMapCanvas( mMapCanvas );
600603

601604
if ( mRule->symbol() )
602605
{
@@ -610,6 +613,7 @@ QgsRendererRulePropsDialog::QgsRendererRulePropsDialog( QgsRuleBasedRendererV2::
610613
}
611614

612615
mSymbolSelector = new QgsSymbolV2SelectorDialog( mSymbol, style, mLayer, this, true );
616+
mSymbolSelector->setMapCanvas( mMapCanvas );
613617
QVBoxLayout* l = new QVBoxLayout;
614618
l->addWidget( mSymbolSelector );
615619
groupSymbol->setLayout( l );

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ class GUI_EXPORT QgsRendererRulePropsDialog : public QDialog, private Ui::QgsRen
167167
Q_OBJECT
168168

169169
public:
170-
QgsRendererRulePropsDialog( QgsRuleBasedRendererV2::Rule* rule, QgsVectorLayer* layer, QgsStyleV2* style, QWidget* parent = 0 );
170+
QgsRendererRulePropsDialog( QgsRuleBasedRendererV2::Rule* rule, QgsVectorLayer* layer, QgsStyleV2* style, QWidget* parent = 0, QgsMapCanvas* mapCanvas = 0 );
171171
~QgsRendererRulePropsDialog();
172172

173173
QgsRuleBasedRendererV2::Rule* rule() { return mRule; }
@@ -183,6 +183,8 @@ class GUI_EXPORT QgsRendererRulePropsDialog : public QDialog, private Ui::QgsRen
183183

184184
QgsSymbolV2SelectorDialog* mSymbolSelector;
185185
QgsSymbolV2* mSymbol; // a clone of original symbol
186+
187+
QgsMapCanvas* mMapCanvas;
186188
};
187189

188190

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,12 @@ QgsFeatureRendererV2* QgsSingleSymbolRendererV2Widget::renderer()
8080
return mRenderer;
8181
}
8282

83+
void QgsSingleSymbolRendererV2Widget::setMapCanvas( QgsMapCanvas* canvas )
84+
{
85+
QgsRendererV2Widget::setMapCanvas( canvas );
86+
mSelector->setMapCanvas( canvas );
87+
}
88+
8389
void QgsSingleSymbolRendererV2Widget::changeSingleSymbol()
8490
{
8591
// update symbol from the GUI

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ class GUI_EXPORT QgsSingleSymbolRendererV2Widget : public QgsRendererV2Widget
3434

3535
virtual QgsFeatureRendererV2* renderer() override;
3636

37+
38+
virtual void setMapCanvas( QgsMapCanvas* canvas ) override;
39+
3740
public slots:
3841
void changeSingleSymbol();
3942

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,15 @@ static QgsExpressionContext _getExpressionContext( const void* context )
6868
return expContext;
6969
}
7070

71+
void QgsSymbolLayerV2Widget::setMapCanvas( QgsMapCanvas *canvas )
72+
{
73+
mMapCanvas = canvas;
74+
Q_FOREACH ( QgsUnitSelectionWidget* unitWidget, findChildren<QgsUnitSelectionWidget*>() )
75+
{
76+
unitWidget->setMapCanvas( mMapCanvas );
77+
}
78+
}
79+
7180
void QgsSymbolLayerV2Widget::registerDataDefinedButton( QgsDataDefinedButton * button, const QString & propertyName, QgsDataDefinedButton::DataType type, const QString & description )
7281
{
7382
const QgsDataDefined* dd = symbolLayer()->getDataDefinedProperty( propertyName );

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,14 @@
2323

2424
class QgsSymbolLayerV2;
2525
class QgsVectorLayer;
26+
class QgsMapCanvas;
2627

2728
class GUI_EXPORT QgsSymbolLayerV2Widget : public QWidget
2829
{
2930
Q_OBJECT
3031

3132
public:
32-
QgsSymbolLayerV2Widget( QWidget* parent, const QgsVectorLayer* vl = 0 ) : QWidget( parent ), mVectorLayer( vl ), mPresetExpressionContext( 0 ) {}
33+
QgsSymbolLayerV2Widget( QWidget* parent, const QgsVectorLayer* vl = 0 ) : QWidget( parent ), mVectorLayer( vl ), mPresetExpressionContext( 0 ), mMapCanvas( 0 ) {}
3334
virtual ~QgsSymbolLayerV2Widget() {}
3435

3536
virtual void setSymbolLayer( QgsSymbolLayerV2* layer ) = 0;
@@ -43,6 +44,13 @@ class GUI_EXPORT QgsSymbolLayerV2Widget : public QWidget
4344
*/
4445
QgsExpressionContext* expressionContext() const { return mPresetExpressionContext; }
4546

47+
/** Sets the map canvas associated with the widget. This allows the widget to retrieve the current
48+
* map scale and other properties from the canvas.
49+
* @param canvas map canvas
50+
* @note added in QGIS 2.12
51+
*/
52+
virtual void setMapCanvas( QgsMapCanvas* canvas );
53+
4654
/** Returns the vector layer associated with the widget.
4755
* @note added in QGIS 2.12
4856
*/
@@ -66,6 +74,8 @@ class GUI_EXPORT QgsSymbolLayerV2Widget : public QWidget
6674
//! Optional preset expression context
6775
QgsExpressionContext* mPresetExpressionContext;
6876

77+
QgsMapCanvas* mMapCanvas;
78+
6979
void registerDataDefinedButton( QgsDataDefinedButton * button, const QString & propertyName, QgsDataDefinedButton::DataType type, const QString & description );
7080

7181
/** Get label for data defined entry.

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,14 @@ QgsSymbolsListWidget::QgsSymbolsListWidget( QgsSymbolV2* symbol, QgsStyleV2* sty
117117
btnColor->setContext( "symbology" );
118118
}
119119

120+
void QgsSymbolsListWidget::setMapCanvas( QgsMapCanvas* canvas )
121+
{
122+
Q_FOREACH ( QgsUnitSelectionWidget* unitWidget, findChildren<QgsUnitSelectionWidget*>() )
123+
{
124+
unitWidget->setMapCanvas( canvas );
125+
}
126+
}
127+
120128
void QgsSymbolsListWidget::setExpressionContext( QgsExpressionContext *context )
121129
{
122130
mPresetExpressionContext = context;

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,13 @@ class GUI_EXPORT QgsSymbolsListWidget : public QWidget, private Ui::SymbolsListW
4040
*/
4141
QgsExpressionContext* expressionContext() const { return mPresetExpressionContext; }
4242

43+
/** Sets the map canvas associated with the widget. This allows the widget to retrieve the current
44+
* map scale and other properties from the canvas.
45+
* @param canvas map canvas
46+
* @note added in QGIS 2.12
47+
*/
48+
virtual void setMapCanvas( QgsMapCanvas* canvas );
49+
4350
/** Returns the vector layer associated with the widget.
4451
* @note added in QGIS 2.12
4552
*/

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

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,10 @@ class SymbolLayerItem : public QStandardItem
205205
//////////
206206

207207
QgsSymbolV2SelectorDialog::QgsSymbolV2SelectorDialog( QgsSymbolV2* symbol, QgsStyleV2* style, const QgsVectorLayer* vl, QWidget* parent, bool embedded )
208-
: QDialog( parent ), mAdvancedMenu( NULL ), mVectorLayer( vl )
208+
: QDialog( parent )
209+
, mAdvancedMenu( NULL )
210+
, mVectorLayer( vl )
211+
, mMapCanvas( 0 )
209212
{
210213
#ifdef Q_OS_MAC
211214
setWindowModality( Qt::WindowModal );
@@ -287,6 +290,20 @@ void QgsSymbolV2SelectorDialog::setExpressionContext( QgsExpressionContext *cont
287290
updatePreview();
288291
}
289292

293+
void QgsSymbolV2SelectorDialog::setMapCanvas( QgsMapCanvas *canvas )
294+
{
295+
mMapCanvas = canvas;
296+
297+
QWidget* widget = stackedWidget->currentWidget();
298+
QgsLayerPropertiesWidget* layerProp = dynamic_cast< QgsLayerPropertiesWidget* >( widget );
299+
QgsSymbolsListWidget* listWidget = dynamic_cast< QgsSymbolsListWidget* >( widget );
300+
301+
if ( layerProp )
302+
layerProp->setMapCanvas( canvas );
303+
if ( listWidget )
304+
listWidget->setMapCanvas( canvas );
305+
}
306+
290307
void QgsSymbolV2SelectorDialog::loadSymbol( QgsSymbolV2* symbol, SymbolLayerItem* parent )
291308
{
292309
SymbolLayerItem* symbolItem = new SymbolLayerItem( symbol );
@@ -399,6 +416,7 @@ void QgsSymbolV2SelectorDialog::layerChanged()
399416
mDataDefineRestorer.reset( new DataDefinedRestorer( parent->symbol(), currentItem->layer() ) );
400417
QgsLayerPropertiesWidget *layerProp = new QgsLayerPropertiesWidget( currentItem->layer(), parent->symbol(), mVectorLayer );
401418
layerProp->setExpressionContext( mPresetExpressionContext.data() );
419+
layerProp->setMapCanvas( mMapCanvas );
402420
setWidget( layerProp );
403421
connect( layerProp, SIGNAL( changed() ), mDataDefineRestorer.data(), SLOT( restore() ) );
404422
connect( layerProp, SIGNAL( changed() ), this, SLOT( updateLayerPreview() ) );
@@ -413,6 +431,7 @@ void QgsSymbolV2SelectorDialog::layerChanged()
413431
// Now populate symbols of that type using the symbols list widget:
414432
QgsSymbolsListWidget *symbolsList = new QgsSymbolsListWidget( currentItem->symbol(), mStyle, mAdvancedMenu, this, mVectorLayer );
415433
symbolsList->setExpressionContext( mPresetExpressionContext.data() );
434+
symbolsList->setMapCanvas( mMapCanvas );
416435

417436
setWidget( symbolsList );
418437
connect( symbolsList, SIGNAL( changed() ), this, SLOT( symbolChanged() ) );

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ class QgsLineSymbolV2;
3939
class QgsMarkerSymbolLayerV2;
4040
class QgsLineSymbolLayerV2;
4141

42+
class QgsMapCanvas;
43+
4244
class DataDefinedRestorer: public QObject
4345
{
4446
Q_OBJECT
@@ -93,6 +95,13 @@ class GUI_EXPORT QgsSymbolV2SelectorDialog : public QDialog, private Ui::QgsSymb
9395
*/
9496
QgsExpressionContext* expressionContext() const { return mPresetExpressionContext.data(); }
9597

98+
/** Sets the map canvas associated with the dialog. This allows the widget to retrieve the current
99+
* map scale and other properties from the canvas.
100+
* @param canvas map canvas
101+
* @note added in QGIS 2.12
102+
*/
103+
void setMapCanvas( QgsMapCanvas* canvas );
104+
96105
protected:
97106
//! Reimplements dialog keyPress event so we can ignore it
98107
void keyPressEvent( QKeyEvent * event ) override;
@@ -150,6 +159,8 @@ class GUI_EXPORT QgsSymbolV2SelectorDialog : public QDialog, private Ui::QgsSymb
150159
private:
151160
QScopedPointer<DataDefinedRestorer> mDataDefineRestorer;
152161
QScopedPointer< QgsExpressionContext > mPresetExpressionContext;
162+
163+
QgsMapCanvas* mMapCanvas;
153164
};
154165

155166
#endif

‎tests/src/python/test_qgsdoccoverage.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
# DON'T RAISE THIS THRESHOLD!!!
3434
# (changes which lower this threshold are welcomed though!)
3535

36-
ACCEPTABLE_MISSING_DOCS = 4038
36+
ACCEPTABLE_MISSING_DOCS = 4036
3737

3838

3939
def elemIsDocumentableClass(elem):

0 commit comments

Comments
 (0)
Please sign in to comment.