Skip to content

Commit

Permalink
[mesh] Use standard presentation for metadata/information tab on prop…
Browse files Browse the repository at this point in the history
…erties dialog
  • Loading branch information
nyalldawson committed Oct 19, 2020
1 parent a35ebd7 commit 3c67e1a
Show file tree
Hide file tree
Showing 5 changed files with 135 additions and 17 deletions.
2 changes: 2 additions & 0 deletions python/core/auto_generated/mesh/qgsmeshlayer.sip.in
Expand Up @@ -146,6 +146,8 @@ QgsMeshLayer cannot be copied.

virtual QStringList subLayers() const;

virtual QString htmlMetadata() const;


QString providerType() const;
%Docstring
Expand Down
110 changes: 110 additions & 0 deletions src/core/mesh/qgsmeshlayer.cpp
Expand Up @@ -36,6 +36,7 @@
#include "qgsstyle.h"
#include "qgstriangularmesh.h"
#include "qgsmesh3daveraging.h"
#include "qgslayermetadataformatter.h"

QgsMeshLayer::QgsMeshLayer( const QString &meshLayerPath,
const QString &baseName,
Expand Down Expand Up @@ -1251,6 +1252,115 @@ QStringList QgsMeshLayer::subLayers() const
return QStringList();
}

QString QgsMeshLayer::htmlMetadata() const
{
QgsLayerMetadataFormatter htmlFormatter( metadata() );
QString myMetadata = QStringLiteral( "<html>\n<body>\n" );

// Begin Provider section
myMetadata += QStringLiteral( "<h1>" ) + tr( "Information from provider" ) + QStringLiteral( "</h1>\n<hr>\n" );
myMetadata += QLatin1String( "<table class=\"list-view\">\n" );

// name
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + tr( "Name" ) + QStringLiteral( "</td><td>" ) + name() + QStringLiteral( "</td></tr>\n" );

// local path
QVariantMap uriComponents = QgsProviderRegistry::instance()->decodeUri( mProviderKey, publicSource() );
QString path;
if ( uriComponents.contains( QStringLiteral( "path" ) ) )
{
path = uriComponents[QStringLiteral( "path" )].toString();
if ( QFile::exists( path ) )
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + tr( "Path" ) + QStringLiteral( "</td><td>%1" ).arg( QStringLiteral( "<a href=\"%1\">%2</a>" ).arg( QUrl::fromLocalFile( path ).toString(), QDir::toNativeSeparators( path ) ) ) + QStringLiteral( "</td></tr>\n" );
}
if ( uriComponents.contains( QStringLiteral( "url" ) ) )
{
const QString url = uriComponents[QStringLiteral( "url" )].toString();
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + tr( "URL" ) + QStringLiteral( "</td><td>%1" ).arg( QStringLiteral( "<a href=\"%1\">%2</a>" ).arg( QUrl( url ).toString(), url ) ) + QStringLiteral( "</td></tr>\n" );
}

// data source
if ( publicSource() != path )
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + tr( "Source" ) + QStringLiteral( "</td><td>%1" ).arg( publicSource() ) + QStringLiteral( "</td></tr>\n" );

// EPSG
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + tr( "CRS" ) + QStringLiteral( "</td><td>" );
if ( crs().isValid() )
{
myMetadata += crs().userFriendlyIdentifier( QgsCoordinateReferenceSystem::FullString ) + QStringLiteral( " - " );
if ( crs().isGeographic() )
myMetadata += tr( "Geographic" );
else
myMetadata += tr( "Projected" );
}
myMetadata += QLatin1String( "</td></tr>\n" );

// Extent
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + tr( "Extent" ) + QStringLiteral( "</td><td>" ) + extent().toString() + QStringLiteral( "</td></tr>\n" );

// unit
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" ) + tr( "Unit" ) + QStringLiteral( "</td><td>" ) + QgsUnitTypes::toString( crs().mapUnits() ) + QStringLiteral( "</td></tr>\n" );

// feature count
QLocale locale = QLocale();
locale.setNumberOptions( locale.numberOptions() &= ~QLocale::NumberOption::OmitGroupSeparator );

if ( dataProvider() )
{
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" )
+ tr( "Vertex count" ) + QStringLiteral( "</td><td>" )
+ ( locale.toString( static_cast<qlonglong>( dataProvider()->vertexCount() ) ) )
+ QStringLiteral( "</td></tr>\n" );
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" )
+ tr( "Face count" ) + QStringLiteral( "</td><td>" )
+ ( locale.toString( static_cast<qlonglong>( dataProvider()->faceCount() ) ) )
+ QStringLiteral( "</td></tr>\n" );
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" )
+ tr( "Edge count" ) + QStringLiteral( "</td><td>" )
+ ( locale.toString( static_cast<qlonglong>( dataProvider()->edgeCount() ) ) )
+ QStringLiteral( "</td></tr>\n" );
myMetadata += QStringLiteral( "<tr><td class=\"highlight\">" )
+ tr( "Dataset groups count" ) + QStringLiteral( "</td><td>" )
+ ( locale.toString( static_cast<qlonglong>( dataProvider()->datasetGroupCount() ) ) )
+ QStringLiteral( "</td></tr>\n" );
}

// End Provider section
myMetadata += QLatin1String( "</table>\n<br><br>" );

// identification section
myMetadata += QStringLiteral( "<h1>" ) + tr( "Identification" ) + QStringLiteral( "</h1>\n<hr>\n" );
myMetadata += htmlFormatter.identificationSectionHtml( );
myMetadata += QLatin1String( "<br><br>\n" );

// extent section
myMetadata += QStringLiteral( "<h1>" ) + tr( "Extent" ) + QStringLiteral( "</h1>\n<hr>\n" );
myMetadata += htmlFormatter.extentSectionHtml( isSpatial() );
myMetadata += QLatin1String( "<br><br>\n" );

// Start the Access section
myMetadata += QStringLiteral( "<h1>" ) + tr( "Access" ) + QStringLiteral( "</h1>\n<hr>\n" );
myMetadata += htmlFormatter.accessSectionHtml( );
myMetadata += QLatin1String( "<br><br>\n" );

// Start the contacts section
myMetadata += QStringLiteral( "<h1>" ) + tr( "Contacts" ) + QStringLiteral( "</h1>\n<hr>\n" );
myMetadata += htmlFormatter.contactsSectionHtml( );
myMetadata += QLatin1String( "<br><br>\n" );

// Start the links section
myMetadata += QStringLiteral( "<h1>" ) + tr( "Links" ) + QStringLiteral( "</h1>\n<hr>\n" );
myMetadata += htmlFormatter.linksSectionHtml( );
myMetadata += QLatin1String( "<br><br>\n" );

// Start the history section
myMetadata += QStringLiteral( "<h1>" ) + tr( "History" ) + QStringLiteral( "</h1>\n<hr>\n" );
myMetadata += htmlFormatter.historySectionHtml( );
myMetadata += QLatin1String( "<br><br>\n" );

myMetadata += QLatin1String( "\n</body>\n</html>\n" );
return myMetadata;
}

bool QgsMeshLayer::setDataProvider( QString const &provider, const QgsDataProvider::ProviderOptions &options, QgsDataProvider::ReadFlags flags )
{
Expand Down
1 change: 1 addition & 0 deletions src/core/mesh/qgsmeshlayer.h
Expand Up @@ -169,6 +169,7 @@ class CORE_EXPORT QgsMeshLayer : public QgsMapLayer
QgsMapLayerTemporalProperties *temporalProperties() override;
void reload() override;
QStringList subLayers() const override;
QString htmlMetadata() const override;

//! Returns the provider type for this layer
QString providerType() const;
Expand Down
36 changes: 19 additions & 17 deletions src/gui/mesh/qgsmeshlayerproperties.cpp
Expand Up @@ -38,8 +38,10 @@
#include "qgsproviderregistry.h"
#include "qgsdatumtransformdialog.h"
#include "qgsmaplayerconfigwidgetfactory.h"
#include "qgsgui.h"
#include "qgsnative.h"


#include <QDesktopServices>
#include <QFileDialog>
#include <QMessageBox>

Expand Down Expand Up @@ -159,22 +161,13 @@ void QgsMeshLayerProperties::syncToLayer()
/*
* Information Tab
*/
QString info;
if ( mMeshLayer->dataProvider() )
{
info += QLatin1String( "<table>" );
info += QStringLiteral( "<tr><td>%1: </td><td>%2</td><tr>" ).arg( tr( "Uri" ) ).arg( mMeshLayer->dataProvider()->dataSourceUri() );
info += QStringLiteral( "<tr><td>%1: </td><td>%2</td><tr>" ).arg( tr( "Vertex count" ) ).arg( mMeshLayer->dataProvider()->vertexCount() );
info += QStringLiteral( "<tr><td>%1: </td><td>%2</td><tr>" ).arg( tr( "Face count" ) ).arg( mMeshLayer->dataProvider()->faceCount() );
info += QStringLiteral( "<tr><td>%1: </td><td>%2</td><tr>" ).arg( tr( "Edge count" ) ).arg( mMeshLayer->dataProvider()->edgeCount() );
info += QStringLiteral( "<tr><td>%1: </td><td>%2</td><tr>" ).arg( tr( "Dataset groups count" ) ).arg( mMeshLayer->dataProvider()->datasetGroupCount() );
info += QLatin1String( "</table>" );
}
else
{
info += tr( "Invalid data provider" );
}
mInformationTextBrowser->setText( info );
QString myStyle = QgsApplication::reportStyleSheet();
myStyle.append( QStringLiteral( "body { margin: 10px; }\n " ) );
mInformationTextBrowser->clear();
mInformationTextBrowser->document()->setDefaultStyleSheet( myStyle );
mInformationTextBrowser->setHtml( mMeshLayer->htmlMetadata() );
mInformationTextBrowser->setOpenLinks( false );
connect( mInformationTextBrowser, &QTextBrowser::anchorClicked, this, &QgsMeshLayerProperties::urlClicked );

QgsDebugMsgLevel( QStringLiteral( "populate source tab" ), 4 );
/*
Expand Down Expand Up @@ -468,3 +461,12 @@ void QgsMeshLayerProperties::onStaticDatasetCheckBoxChanged()
{
mStaticDatasetGroupBox->setCollapsed( !mTemporalStaticDatasetCheckBox->isChecked() && mIsMapSettingsTemporal );
}

void QgsMeshLayerProperties::urlClicked( const QUrl &url )
{
QFileInfo file( url.toLocalFile() );
if ( file.exists() && !file.isDir() )
QgsGui::instance()->nativePlatformInterface()->openFileExplorerAndSelectFile( url.toLocalFile() );
else
QDesktopServices::openUrl( url );
}
3 changes: 3 additions & 0 deletions src/gui/mesh/qgsmeshlayerproperties.h
Expand Up @@ -86,6 +86,9 @@ class GUI_EXPORT QgsMeshLayerProperties : public QgsOptionsDialogBase, private U
void onTimeReferenceChange();

void onStaticDatasetCheckBoxChanged();

void urlClicked( const QUrl &url );

private:
//! Pointer to the mesh styling widget
QgsRendererMeshPropertiesWidget *mRendererMeshPropertiesWidget = nullptr;
Expand Down

0 comments on commit 3c67e1a

Please sign in to comment.