Skip to content

Commit 4bf04e1

Browse files
committed
combine layer type and edit icon when editing (fixes #11411)
1 parent 086b262 commit 4bf04e1

File tree

1 file changed

+29
-21
lines changed

1 file changed

+29
-21
lines changed

src/core/layertree/qgslayertreemodel.cpp

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -203,9 +203,9 @@ QVariant QgsLayerTreeModel::data( const QModelIndex &index, int role ) const
203203

204204
if ( QgsLayerTree::isLayer( node ) )
205205
{
206-
QgsLayerTreeLayer* nodeLayer = QgsLayerTree::toLayer( node );
206+
QgsLayerTreeLayer *nodeLayer = QgsLayerTree::toLayer( node );
207207

208-
QgsMapLayer* layer = nodeLayer->layer();
208+
QgsMapLayer *layer = nodeLayer->layer();
209209
if ( !layer )
210210
return QVariant();
211211

@@ -218,39 +218,47 @@ QVariant QgsLayerTreeModel::data( const QModelIndex &index, int role ) const
218218
return QIcon( rlayer->previewAsPixmap( QSize( 32, 32 ) ) );
219219
}
220220
}
221-
else if ( layer->type() == QgsMapLayer::VectorLayer )
221+
222+
QgsVectorLayer *vlayer = dynamic_cast<QgsVectorLayer*>( layer );
223+
224+
if ( layer->type() == QgsMapLayer::RasterLayer )
222225
{
223-
QgsVectorLayer* vlayer = static_cast<QgsVectorLayer*>( layer );
224-
if ( vlayer->isEditable() )
225-
{
226-
if ( vlayer->isModified() )
227-
return QIcon( QgsApplication::getThemePixmap( "/mIconEditableEdits.png" ) );
228-
else
229-
return QIcon( QgsApplication::getThemePixmap( "/mIconEditable.png" ) );
230-
}
226+
return QgsLayerItem::iconRaster();
231227
}
232228

229+
QIcon icon;
230+
233231
// if there's just on legend entry that should be embedded in layer - do that!
234232
if ( testFlag( ShowLegend ) && mLegendNodes[nodeLayer].count() == 1 && mLegendNodes[nodeLayer][0]->isEmbeddedInParent() )
235-
return mLegendNodes[nodeLayer][0]->data( Qt::DecorationRole );
236-
237-
if ( layer->type() == QgsMapLayer::RasterLayer )
238233
{
239-
return QgsLayerItem::iconRaster();
234+
icon = QIcon( qvariant_cast<QPixmap>( mLegendNodes[nodeLayer][0]->data( Qt::DecorationRole ) ) );
240235
}
241236
else if ( layer->type() == QgsMapLayer::VectorLayer )
242237
{
243-
QgsVectorLayer* vlayer = static_cast<QgsVectorLayer*>( layer );
244238
if ( vlayer->geometryType() == QGis::Point )
245-
return QgsLayerItem::iconPoint();
239+
icon = QgsLayerItem::iconPoint();
246240
else if ( vlayer->geometryType() == QGis::Line )
247-
return QgsLayerItem::iconLine();
241+
icon = QgsLayerItem::iconLine();
248242
else if ( vlayer->geometryType() == QGis::Polygon )
249-
return QgsLayerItem::iconPolygon();
243+
icon = QgsLayerItem::iconPolygon();
250244
else if ( vlayer->geometryType() == QGis::NoGeometry )
251-
return QgsLayerItem::iconTable();
245+
icon = QgsLayerItem::iconTable();
246+
else
247+
icon = QgsLayerItem::iconDefault();
252248
}
253-
return QgsLayerItem::iconDefault();
249+
250+
if ( vlayer && vlayer->isEditable() )
251+
{
252+
QPixmap pixmap( icon.pixmap( 16, 16 ) );
253+
254+
QPainter painter( &pixmap );
255+
painter.drawPixmap( 0, 0, 16, 16, QgsApplication::getThemePixmap( vlayer->isModified() ? "/mIconEditableEdits.png" : "/mIconEditable.png" ) );
256+
painter.end();
257+
258+
icon = QIcon( pixmap );
259+
}
260+
261+
return icon;
254262
}
255263
}
256264
else if ( role == Qt::CheckStateRole )

0 commit comments

Comments
 (0)