void QgsLegendModel::updateLayer( QStandardItem* layerItem ) { QgsDebugMsg( "Entered." ); QgsComposerLayerItem* lItem = dynamic_cast<QgsComposerLayerItem*>( layerItem ); if ( lItem ) { QgsMapLayer* mapLayer = QgsMapLayerRegistry::instance()->mapLayer( lItem->layerID() ); if ( mapLayer ) { updateLayerItemText( lItem ); QgsVectorLayer* vLayer = qobject_cast<QgsVectorLayer*>( mapLayer ); if ( vLayer ) { addVectorLayerItemsV2( lItem, vLayer ); } QgsRasterLayer* rLayer = qobject_cast<QgsRasterLayer*>( mapLayer ); if ( rLayer ) { addRasterLayerItems( lItem, rLayer ); } } } }
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 ); }
void QgsLegendModel::setLayerSetAndGroups( const QStringList& layerIds, const QList< GroupLayerInfo >& groupInfo ) { setLayerSet( layerIds ); QStandardItem* currentItem = 0; QStandardItem* currentGroupItem = 0; int i = 0; QList< GroupLayerInfo >::const_iterator infoIt = groupInfo.constBegin(); for ( ; infoIt != groupInfo.constEnd() && i < invisibleRootItem()->rowCount(); ) { currentItem = invisibleRootItem()->child( i, 0 ); QString infoKey = infoIt->first; if ( infoKey.isNull() ) //a toplevel layer { ++i; } else //a group { currentGroupItem = addGroup( infoKey, i ); ++i; QList<QString> layerList = infoIt->second; QList<QString>::const_iterator groupLayerIt = layerList.constBegin(); for ( ; currentItem && ( groupLayerIt != layerList.constEnd() ); ++groupLayerIt ) { //check if current item is contained in this group QgsComposerLayerItem* layerItem = dynamic_cast<QgsComposerLayerItem*>( currentItem ); if ( !layerItem ) { return; //should never happen } //QString layerID = currentItem->data(Qt::UserRole + 2).toString(); QString layerID = layerItem->layerID(); if ( layerList.contains( layerID ) ) { takeRow( i ); currentGroupItem->setChild( currentGroupItem->rowCount(), 0, currentItem ); } else { ++i; } currentItem = invisibleRootItem()->child( i, 0 ); } } ++infoIt; } }
void QgsLegendModel::updateLayer( QStandardItem* layerItem ) { QgsDebugMsg( "Entered." ); QgsComposerLayerItem* lItem = dynamic_cast<QgsComposerLayerItem*>( layerItem ); if ( lItem ) { QgsMapLayer* mapLayer = QgsMapLayerRegistry::instance()->mapLayer( lItem->layerID() ); if ( mapLayer ) { //delete all the entries under layer item int currentRowCount = lItem->rowCount(); for ( int i = currentRowCount - 1; i >= 0; --i ) { lItem->removeRow( i ); } QgsVectorLayer* vLayer = qobject_cast<QgsVectorLayer*>( mapLayer ); //set layer name as item text QString label = mapLayer->name(); if ( vLayer && lItem->showFeatureCount() ) { label += QString( " [%1]" ).arg( vLayer->featureCount() ); } layerItem->setText( label ); if ( vLayer ) { if ( vLayer->isUsingRendererV2() ) { addVectorLayerItemsV2( lItem, vLayer ); } else { addVectorLayerItems( lItem, vLayer ); } } QgsRasterLayer* rLayer = qobject_cast<QgsRasterLayer*>( mapLayer ); if ( rLayer ) { addRasterLayerItems( lItem, rLayer ); } } } }
void QgsLegendModel::removeLayer( const QString& layerId ) { int numRootItems = rowCount(); for ( int i = 0; i < numRootItems ; ++i ) { QgsComposerLayerItem* lItem = dynamic_cast<QgsComposerLayerItem*>( item( i ) ); if ( !lItem ) { continue; } if ( layerId == lItem->layerID() ) { removeRow( i ); //todo: also remove the subitems and their symbols... emit layersChanged(); return; } } }
void QgsLegendModel::updateRasterSymbolItemText( QStandardItem* symbolItem ) { QgsComposerRasterSymbolItem* rItem = dynamic_cast<QgsComposerRasterSymbolItem*>( symbolItem ); if ( !rItem ) return; QgsComposerLayerItem* lItem = dynamic_cast<QgsComposerLayerItem*>( rItem->parent() ); if ( !lItem ) return; QgsMapLayer* mapLayer = QgsMapLayerRegistry::instance()->mapLayer( lItem->layerID() ); if ( !mapLayer ) return; QgsRasterLayer* rLayer = qobject_cast<QgsRasterLayer*>( mapLayer ); if ( !rLayer ) return; QPair< QString, QColor> symbol = rLayer->legendSymbologyItems().value( symbolItem->row() ); QString label = rItem->userText().isEmpty() ? symbol.first : rItem->userText(); symbolItem->setText( label ); }
void QgsLegendModel::updateLayerItemText( QStandardItem* layerItem ) { QgsComposerLayerItem* lItem = dynamic_cast<QgsComposerLayerItem*>( layerItem ); if ( !lItem ) return; QgsMapLayer* mapLayer = QgsMapLayerRegistry::instance()->mapLayer( lItem->layerID() ); if ( !mapLayer ) return; QString label = lItem->userText().isEmpty() ? mapLayer->name() : lItem->userText(); QgsVectorLayer* vLayer = qobject_cast<QgsVectorLayer*>( mapLayer ); if ( vLayer ) { addVectorLayerItemsV2( lItem, vLayer ); if ( lItem->showFeatureCount() ) { label += QString( " [%1]" ).arg( vLayer->featureCount() ); } } lItem->setText( label ); }
void QgsComposerLegendWidget::selectedChanged( const QModelIndex & current, const QModelIndex & previous ) { Q_UNUSED( previous ); QgsDebugMsg( "Entered" ); mCountToolButton->setChecked( false ); mCountToolButton->setEnabled( false ); QStandardItemModel* itemModel = qobject_cast<QStandardItemModel *>( mItemTreeView->model() ); if ( !itemModel ) return; QStandardItem* currentItem = itemModel->itemFromIndex( current ); if ( !currentItem ) return; QgsComposerLayerItem* layerItem = dynamic_cast<QgsComposerLayerItem *>( currentItem ); if ( !layerItem ) return; QgsVectorLayer* vectorLayer = dynamic_cast<QgsVectorLayer*>( QgsMapLayerRegistry::instance()->mapLayer( layerItem->layerID() ) ); if ( !vectorLayer ) return; mCountToolButton->setChecked( layerItem->showFeatureCount() ); mCountToolButton->setEnabled( true ); }