From 020972c2916ae5a24570a33133e89d56da684d87 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Sun, 12 Nov 2017 16:38:41 +1000 Subject: [PATCH] Tweaks to automatic layer name logic --- src/app/qgisapp.cpp | 9 +++++++-- src/core/qgsmaplayer.cpp | 6 +----- tests/src/core/testqgsmaplayer.cpp | 9 +++++++++ 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 8d6958d5fc6..1b793df9d56 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -4157,6 +4157,7 @@ bool QgisApp::addVectorLayers( const QStringList &layerQStringList, const QStrin QFileInfo fi( src ); base = fi.completeBaseName(); } + base = QgsMapLayer::formatLayerName( base ); QgsDebugMsg( "completeBaseName: " + base ); @@ -4200,8 +4201,10 @@ bool QgisApp::addVectorLayers( const QStringList &layerQStringList, const QStrin { //set friendly name for datasources with only one layer QStringList elements = sublayers.at( 0 ).split( ':' ); + QString subLayerNameFormatted = elements.size() >= 2 ? QgsMapLayer::formatLayerName( elements.at( 1 ) ) : QString(); - if ( elements.size() >= 4 && layer->name() != elements.at( 1 ) ) + if ( elements.size() >= 4 && layer->name().compare( elements.at( 1 ), Qt::CaseInsensitive ) != 0 + && layer->name().compare( subLayerNameFormatted, Qt::CaseInsensitive ) != 0 ) { layer->setName( QStringLiteral( "%1 %2" ).arg( layer->name(), elements.at( 1 ) ) ); } @@ -9994,8 +9997,10 @@ QgsVectorLayer *QgisApp::addVectorLayer( const QString &vectorLayerPath, const Q if ( !sublayers.isEmpty() ) { QStringList elements = sublayers.at( 0 ).split( ':' ); + QString subLayerNameFormatted = elements.size() >= 2 ? QgsMapLayer::formatLayerName( elements.at( 1 ) ) : QString(); - if ( elements.size() >= 4 && layer->name() != elements.at( 1 ) ) + if ( elements.size() >= 4 && layer->name().compare( elements.at( 1 ), Qt::CaseInsensitive ) != 0 + && layer->name().compare( subLayerNameFormatted, Qt::CaseInsensitive ) != 0 ) { layer->setName( QStringLiteral( "%1 %2" ).arg( layer->name(), elements.at( 1 ) ) ); } diff --git a/src/core/qgsmaplayer.cpp b/src/core/qgsmaplayer.cpp index d912d5b685b..4a7eb4432ae 100644 --- a/src/core/qgsmaplayer.cpp +++ b/src/core/qgsmaplayer.cpp @@ -1022,12 +1022,8 @@ void QgsMapLayer::setCrs( const QgsCoordinateReferenceSystem &srs, bool emitSign QString QgsMapLayer::formatLayerName( const QString &name ) { QString layerName( name ); - - if ( !layerName.isEmpty() ) - layerName = QgsStringUtils::capitalize( name, QgsStringUtils::ForceFirstLetterToCapital ); - layerName.replace( '_', ' ' ); - + layerName = QgsStringUtils::capitalize( layerName, QgsStringUtils::ForceFirstLetterToCapital ); return layerName; } diff --git a/tests/src/core/testqgsmaplayer.cpp b/tests/src/core/testqgsmaplayer.cpp index e7cd69deb43..12797ae87e3 100644 --- a/tests/src/core/testqgsmaplayer.cpp +++ b/tests/src/core/testqgsmaplayer.cpp @@ -62,6 +62,7 @@ class TestQgsMapLayer : public QObject void cleanup(); // will be called after every testfunction. void isValid(); + void formatName(); void setBlendMode(); @@ -116,6 +117,14 @@ void TestQgsMapLayer::isValid() QVERIFY( mpLayer->isValid() ); } +void TestQgsMapLayer::formatName() +{ + QCOMPARE( QgsMapLayer::formatLayerName( QString() ), QString() ); + QCOMPARE( QgsMapLayer::formatLayerName( QStringLiteral( "layer" ) ), QStringLiteral( "Layer" ) ); + QCOMPARE( QgsMapLayer::formatLayerName( QStringLiteral( "layer name" ) ), QStringLiteral( "Layer Name" ) ); + QCOMPARE( QgsMapLayer::formatLayerName( QStringLiteral( "layer_name" ) ), QStringLiteral( "Layer Name" ) ); +} + void TestQgsMapLayer::setBlendMode() { TestSignalReceiver receiver;