void QgsBrowserLayerProperties::setItem( QgsDataItem* item ) { QgsLayerItem *layerItem = qobject_cast<QgsLayerItem*>( item ); if ( !layerItem ) return; mNoticeLabel->clear(); QgsMapLayer::LayerType type = layerItem->mapLayerType(); QString layerMetadata = tr( "Error" ); QgsCoordinateReferenceSystem layerCrs; // temporarily override /Projections/defaultBehaviour to avoid dialog prompt QSettings settings; QString defaultProjectionOption = settings.value( "/Projections/defaultBehaviour", "prompt" ).toString(); if ( settings.value( "/Projections/defaultBehaviour", "prompt" ).toString() == "prompt" ) { settings.setValue( "/Projections/defaultBehaviour", "useProject" ); } // find root item // we need to create a temporary layer to get metadata // we could use a provider but the metadata is not as complete and "pretty" and this is easier QgsDebugMsg( QString( "creating temporary layer using path %1" ).arg( layerItem->path() ) ); if ( type == QgsMapLayer::RasterLayer ) { QgsDebugMsg( "creating raster layer" ); // should copy code from addLayer() to split uri ? QgsRasterLayer* layer = new QgsRasterLayer( layerItem->uri(), layerItem->uri(), layerItem->providerKey() ); if ( layer ) { if ( layer->isValid() ) { layerCrs = layer->crs(); layerMetadata = layer->metadata(); } delete layer; } } else if ( type == QgsMapLayer::VectorLayer ) { QgsDebugMsg( "creating vector layer" ); QgsVectorLayer* layer = new QgsVectorLayer( layerItem->uri(), layerItem->name(), layerItem->providerKey() ); if ( layer ) { if ( layer->isValid() ) { layerCrs = layer->crs(); layerMetadata = layer->metadata(); } delete layer; } } else if ( type == QgsMapLayer::PluginLayer ) { // TODO: support display of properties for plugin layers return; } // restore /Projections/defaultBehaviour if ( defaultProjectionOption == "prompt" ) { settings.setValue( "/Projections/defaultBehaviour", defaultProjectionOption ); } mNameLabel->setText( layerItem->name() ); mUriLabel->setText( layerItem->uri() ); mProviderLabel->setText( layerItem->providerKey() ); QString myStyle = QgsApplication::reportStyleSheet(); mMetadataTextBrowser->document()->setDefaultStyleSheet( myStyle ); mMetadataTextBrowser->setHtml( layerMetadata ); // report if layer was set to to project crs without prompt (may give a false positive) if ( defaultProjectionOption == "prompt" ) { QgsCoordinateReferenceSystem defaultCrs = QgisApp::instance()->mapCanvas()->mapSettings().destinationCrs(); if ( layerCrs == defaultCrs ) mNoticeLabel->setText( "NOTICE: Layer srs set from project (" + defaultCrs.authid() + ')' ); } if ( mNoticeLabel->text().isEmpty() ) { mNoticeLabel->hide(); } }
void QgsBrowserDockWidget::showProperties( ) { QgsDebugMsg( "Entered" ); QgsDataItem* dataItem = mModel->dataItem( mBrowserView->currentIndex() ); if ( dataItem != NULL && dataItem->type() == QgsDataItem::Layer ) { QgsLayerItem *layerItem = qobject_cast<QgsLayerItem*>( dataItem ); if ( layerItem != NULL ) { QgsMapLayer::LayerType type = layerItem->mapLayerType(); QString layerMetadata = tr( "Error" ); QgsCoordinateReferenceSystem layerCrs; QString notice; // temporarily override /Projections/defaultBehaviour to avoid dialog prompt QSettings settings; QString defaultProjectionOption = settings.value( "/Projections/defaultBehaviour", "prompt" ).toString(); if ( settings.value( "/Projections/defaultBehaviour", "prompt" ).toString() == "prompt" ) { settings.setValue( "/Projections/defaultBehaviour", "useProject" ); } // find root item // we need to create a temporary layer to get metadata // we could use a provider but the metadata is not as complete and "pretty" and this is easier QgsDebugMsg( QString( "creating temporary layer using path %1" ).arg( layerItem->path() ) ); if ( type == QgsMapLayer::RasterLayer ) { QgsDebugMsg( "creating raster layer" ); // should copy code from addLayer() to split uri ? QgsRasterLayer* layer = new QgsRasterLayer( layerItem->uri(), layerItem->uri(), layerItem->providerKey() ); if ( layer != NULL ) { layerCrs = layer->crs(); layerMetadata = layer->metadata(); delete layer; } } else if ( type == QgsMapLayer::VectorLayer ) { QgsDebugMsg( "creating vector layer" ); QgsVectorLayer* layer = new QgsVectorLayer( layerItem->uri(), layerItem->name(), layerItem->providerKey() ); if ( layer != NULL ) { layerCrs = layer->crs(); layerMetadata = layer->metadata(); delete layer; } } // restore /Projections/defaultBehaviour if ( defaultProjectionOption == "prompt" ) { settings.setValue( "/Projections/defaultBehaviour", defaultProjectionOption ); } // initialize dialog QDialog *dialog = new QDialog( this ); Ui::QgsBrowserLayerPropertiesBase ui; ui.setupUi( dialog ); dialog->setWindowTitle( tr( "Layer Properties" ) ); ui.leName->setText( layerItem->name() ); ui.leSource->setText( layerItem->path() ); ui.leProvider->setText( layerItem->providerKey() ); QString myStyle = QgsApplication::reportStyleSheet(); ui.txtbMetadata->document()->setDefaultStyleSheet( myStyle ); ui.txtbMetadata->setHtml( layerMetadata ); // report if layer was set to to project crs without prompt (may give a false positive) if ( defaultProjectionOption == "prompt" ) { QgsCoordinateReferenceSystem defaultCrs = QgisApp::instance()->mapCanvas()->mapRenderer()->destinationCrs(); if ( layerCrs == defaultCrs ) ui.lblNotice->setText( "NOTICE: Layer srs set from project (" + defaultCrs.authid() + ")" ); } dialog->show(); } } }