void QgsLegendModel::updateSymbolV2ItemText( QStandardItem* symbolItem ) { QgsComposerSymbolV2Item* sv2Item = dynamic_cast<QgsComposerSymbolV2Item*>( symbolItem ); if ( !sv2Item ) return; QgsComposerLayerItem* lItem = dynamic_cast<QgsComposerLayerItem*>( sv2Item->parent() ); if ( !lItem ) return; QgsMapLayer* mapLayer = QgsMapLayerRegistry::instance()->mapLayer( lItem->layerID() ); if ( !mapLayer ) return; QgsVectorLayer* vLayer = qobject_cast<QgsVectorLayer*>( mapLayer ); if ( !vLayer ) return; QgsFeatureRendererV2* renderer = vLayer->rendererV2(); if ( !renderer ) return; if ( lItem->showFeatureCount() ) vLayer->countSymbolFeatures(); QgsLegendSymbolList symbolList = renderer->legendSymbolItems(); QPair<QString, QgsSymbolV2*> symbol = symbolList.value( symbolItem->row() ); QString label = sv2Item->userText().isEmpty() ? symbol.first : sv2Item->userText(); if ( renderer->type() == "singleSymbol" ) { if ( !sv2Item->userText().isEmpty() ) { label = sv2Item->userText(); } else if ( !lItem->userText().isEmpty() ) { label = lItem->userText(); } else if ( !vLayer->title().isEmpty() ) { label = vLayer->title(); } else { label = vLayer->name(); } } if ( lItem->showFeatureCount() ) { // Add counts to multi symbols layers only or labeled single symbols, // so that single symbol layers are still drawn on single line if ( symbolList.size() > 1 || !label.isEmpty() ) { label += QString( " [%1]" ).arg( vLayer->featureCount( symbol.second ) ); } } symbolItem->setText( label ); }
int QgsLegendModel::addVectorLayerItemsV2( QStandardItem* layerItem, QgsVectorLayer* vlayer ) { QgsComposerLayerItem* lItem = dynamic_cast<QgsComposerLayerItem*>( layerItem ); if ( !layerItem || !lItem || !vlayer ) { return 1; } QgsFeatureRendererV2* renderer = vlayer->rendererV2(); if ( !renderer ) { return 2; } if ( lItem->showFeatureCount() ) { if ( !vlayer->countSymbolFeatures() ) { QgsDebugMsg( "Cannot get feature counts" ); } } QgsLegendSymbolList lst = renderer->legendSymbolItems(); QgsLegendSymbolList::const_iterator symbolIt = lst.constBegin(); for ( ; symbolIt != lst.constEnd(); ++symbolIt ) { QString label = symbolIt->first; if ( lItem->showFeatureCount() ) { // Add counts to multi symbols layers only or labeled single symbols, // so that single symbol layers are still drawn on single line if ( lst.size() > 1 || !label.isEmpty() ) { label += QString( " [%1]" ).arg( vlayer->featureCount( symbolIt->second ) ); } } QgsComposerSymbolV2Item* currentSymbolItem = new QgsComposerSymbolV2Item( label ); currentSymbolItem->setFlags( Qt::ItemIsEnabled | Qt::ItemIsSelectable ); if ( symbolIt->second ) { if ( mHasTopLevelWindow ) //only use QIcon / QPixmap if we have a running x-server { currentSymbolItem->setIcon( QgsSymbolLayerV2Utils::symbolPreviewIcon( symbolIt->second, QSize( 30, 30 ) ) ); } currentSymbolItem->setSymbolV2( symbolIt->second->clone() ); } layerItem->setChild( layerItem->rowCount(), 0, currentSymbolItem ); } return 0; }