Skip to content

Commit 0750c1d

Browse files
committedJun 30, 2016
Fix inverted polygons and displacement renderer don't allow right
click on legend items (fix #14966) (cherry-picked from b2c43cb)
1 parent a1e1614 commit 0750c1d

7 files changed

+57
-33
lines changed
 

‎python/core/symbology-ng/qgsinvertedpolygonrenderer.sip

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ class QgsInvertedPolygonRenderer : QgsFeatureRendererV2
8585
void setEmbeddedRenderer( QgsFeatureRendererV2* subRenderer /Transfer/ );
8686
const QgsFeatureRendererV2* embeddedRenderer() const;
8787

88+
virtual void setLegendSymbolItem( const QString& key, QgsSymbolV2* symbol );
89+
8890
/** @returns true if the geometries are to be preprocessed (merged with an union) before rendering.*/
8991
bool preprocessingEnabled() const;
9092
/**

‎python/core/symbology-ng/qgspointdisplacementrenderer.sip

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ class QgsPointDisplacementRenderer : QgsFeatureRendererV2
7171
void setEmbeddedRenderer( QgsFeatureRendererV2* r /Transfer/ );
7272
QgsFeatureRendererV2* embeddedRenderer();
7373

74+
virtual void setLegendSymbolItem( const QString& key, QgsSymbolV2* symbol );
75+
7476
//! not available in python bindings
7577
//! @deprecated since 2.4
7678
// void setDisplacementGroups( const QList<QMap<QgsFeatureId, QgsFeature> >& list );

‎src/app/qgsapplayertreeviewmenuprovider.cpp

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -264,44 +264,44 @@ QMenu* QgsAppLayerTreeViewMenuProvider::createContextMenu()
264264
menu->addAction( QgsApplication::getThemeIcon( "/mActionHideAllLayers.png" ), tr( "&Hide All Items" ),
265265
symbolNode, SLOT( uncheckAllItems() ) );
266266
menu->addSeparator();
267+
}
267268

268-
if ( symbolNode->symbol() )
269+
if ( symbolNode->symbol() )
270+
{
271+
QgsColorWheel* colorWheel = new QgsColorWheel( menu );
272+
colorWheel->setColor( symbolNode->symbol()->color() );
273+
QgsColorWidgetAction* colorAction = new QgsColorWidgetAction( colorWheel, menu, menu );
274+
colorAction->setDismissOnColorSelection( false );
275+
connect( colorAction, SIGNAL( colorChanged( const QColor& ) ), this, SLOT( setSymbolLegendNodeColor( const QColor& ) ) );
276+
//store the layer id and rule key in action, so we can later retrieve the corresponding
277+
//legend node, if it still exists
278+
colorAction->setProperty( "layerId", symbolNode->layerNode()->layerId() );
279+
colorAction->setProperty( "ruleKey", symbolNode->data( QgsLayerTreeModelLegendNode::RuleKeyRole ).toString() );
280+
menu->addAction( colorAction );
281+
282+
//add recent colors action
283+
QList<QgsRecentColorScheme *> recentSchemes;
284+
QgsColorSchemeRegistry::instance()->schemes( recentSchemes );
285+
if ( !recentSchemes.isEmpty() )
269286
{
270-
QgsColorWheel* colorWheel = new QgsColorWheel( menu );
271-
colorWheel->setColor( symbolNode->symbol()->color() );
272-
QgsColorWidgetAction* colorAction = new QgsColorWidgetAction( colorWheel, menu, menu );
273-
colorAction->setDismissOnColorSelection( false );
274-
connect( colorAction, SIGNAL( colorChanged( const QColor& ) ), this, SLOT( setSymbolLegendNodeColor( const QColor& ) ) );
275-
//store the layer id and rule key in action, so we can later retrieve the corresponding
276-
//legend node, if it still exists
277-
colorAction->setProperty( "layerId", symbolNode->layerNode()->layerId() );
278-
colorAction->setProperty( "ruleKey", symbolNode->data( QgsLayerTreeModelLegendNode::RuleKeyRole ).toString() );
279-
menu->addAction( colorAction );
280-
281-
//add recent colors action
282-
QList<QgsRecentColorScheme *> recentSchemes;
283-
QgsColorSchemeRegistry::instance()->schemes( recentSchemes );
284-
if ( !recentSchemes.isEmpty() )
285-
{
286-
QgsColorSwatchGridAction* recentColorAction = new QgsColorSwatchGridAction( recentSchemes.at( 0 ), menu, "symbology", menu );
287-
recentColorAction->setProperty( "layerId", symbolNode->layerNode()->layerId() );
288-
recentColorAction->setProperty( "ruleKey", symbolNode->data( QgsLayerTreeModelLegendNode::RuleKeyRole ).toString() );
289-
recentColorAction->setDismissOnColorSelection( false );
290-
menu->addAction( recentColorAction );
291-
connect( recentColorAction, SIGNAL( colorChanged( const QColor& ) ), this, SLOT( setSymbolLegendNodeColor( const QColor& ) ) );
292-
}
293-
294-
menu->addSeparator();
287+
QgsColorSwatchGridAction* recentColorAction = new QgsColorSwatchGridAction( recentSchemes.at( 0 ), menu, "symbology", menu );
288+
recentColorAction->setProperty( "layerId", symbolNode->layerNode()->layerId() );
289+
recentColorAction->setProperty( "ruleKey", symbolNode->data( QgsLayerTreeModelLegendNode::RuleKeyRole ).toString() );
290+
recentColorAction->setDismissOnColorSelection( false );
291+
menu->addAction( recentColorAction );
292+
connect( recentColorAction, SIGNAL( colorChanged( const QColor& ) ), this, SLOT( setSymbolLegendNodeColor( const QColor& ) ) );
295293
}
296294

297-
QAction* editSymbolAction = new QAction( tr( "Edit Symbol..." ), menu );
298-
//store the layer id and rule key in action, so we can later retrieve the corresponding
299-
//legend node, if it still exists
300-
editSymbolAction->setProperty( "layerId", symbolNode->layerNode()->layerId() );
301-
editSymbolAction->setProperty( "ruleKey", symbolNode->data( QgsLayerTreeModelLegendNode::RuleKeyRole ).toString() );
302-
connect( editSymbolAction, SIGNAL( triggered() ), this, SLOT( editSymbolLegendNodeSymbol() ) );
303-
menu->addAction( editSymbolAction );
295+
menu->addSeparator();
304296
}
297+
298+
QAction* editSymbolAction = new QAction( tr( "Edit Symbol..." ), menu );
299+
//store the layer id and rule key in action, so we can later retrieve the corresponding
300+
//legend node, if it still exists
301+
editSymbolAction->setProperty( "layerId", symbolNode->layerNode()->layerId() );
302+
editSymbolAction->setProperty( "ruleKey", symbolNode->data( QgsLayerTreeModelLegendNode::RuleKeyRole ).toString() );
303+
connect( editSymbolAction, SIGNAL( triggered() ), this, SLOT( editSymbolLegendNodeSymbol() ) );
304+
menu->addAction( editSymbolAction );
305305
}
306306
}
307307

‎src/core/symbology-ng/qgsinvertedpolygonrenderer.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,14 @@ const QgsFeatureRendererV2* QgsInvertedPolygonRenderer::embeddedRenderer() const
6464
return mSubRenderer.data();
6565
}
6666

67+
void QgsInvertedPolygonRenderer::setLegendSymbolItem( const QString& key, QgsSymbolV2* symbol )
68+
{
69+
if ( !mSubRenderer )
70+
return;
71+
72+
mSubRenderer->setLegendSymbolItem( key, symbol );
73+
}
74+
6775
void QgsInvertedPolygonRenderer::startRender( QgsRenderContext& context, const QgsFields& fields )
6876
{
6977
if ( !mSubRenderer )

‎src/core/symbology-ng/qgsinvertedpolygonrenderer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@ class CORE_EXPORT QgsInvertedPolygonRenderer : public QgsFeatureRendererV2
121121
void setEmbeddedRenderer( QgsFeatureRendererV2* subRenderer ) override;
122122
const QgsFeatureRendererV2* embeddedRenderer() const override;
123123

124+
virtual void setLegendSymbolItem( const QString& key, QgsSymbolV2* symbol ) override;
125+
124126
/** @returns true if the geometries are to be preprocessed (merged with an union) before rendering.*/
125127
bool preprocessingEnabled() const { return mPreprocessingEnabled; }
126128
/**

‎src/core/symbology-ng/qgspointdisplacementrenderer.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,14 @@ const QgsFeatureRendererV2* QgsPointDisplacementRenderer::embeddedRenderer() con
226226
return mRenderer;
227227
}
228228

229+
void QgsPointDisplacementRenderer::setLegendSymbolItem( const QString& key, QgsSymbolV2* symbol )
230+
{
231+
if ( !mRenderer )
232+
return;
233+
234+
mRenderer->setLegendSymbolItem( key, symbol );
235+
}
236+
229237
QList<QString> QgsPointDisplacementRenderer::usedAttributes()
230238
{
231239
QList<QString> attributeList;

‎src/core/symbology-ng/qgspointdisplacementrenderer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@ class CORE_EXPORT QgsPointDisplacementRenderer: public QgsFeatureRendererV2
9898
void setEmbeddedRenderer( QgsFeatureRendererV2* r ) override;
9999
const QgsFeatureRendererV2* embeddedRenderer() const override;
100100

101+
virtual void setLegendSymbolItem( const QString& key, QgsSymbolV2* symbol ) override;
102+
101103
//! not available in python bindings
102104
//! @deprecated since 2.4
103105
Q_DECL_DEPRECATED void setDisplacementGroups( const QList<QMap<QgsFeatureId, QgsFeature> >& list ) { Q_UNUSED( list ); }

0 commit comments

Comments
 (0)
Please sign in to comment.