@@ -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