Skip to content

Commit 3fcdc4c

Browse files
committed
Fix for embeding layer and groups from project with relative pathes
1 parent 16e872f commit 3fcdc4c

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

src/core/qgsproject.cpp

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1543,6 +1543,18 @@ bool QgsProject::createEmbeddedLayer( const QString& layerId, const QString& pro
15431543
return false;
15441544
}
15451545

1546+
//does project store pathes absolute or relative?
1547+
bool useAbsolutePathes = true;
1548+
QDomElement propertiesElem = projectDocument.documentElement().firstChildElement( "properties" );
1549+
if ( !propertiesElem.isNull() )
1550+
{
1551+
QDomElement absElem = propertiesElem.firstChildElement( "Paths" ).firstChildElement( "Absolute" );
1552+
if ( !absElem.isNull() )
1553+
{
1554+
useAbsolutePathes = absElem.text().compare( "true", Qt::CaseInsensitive ) == 0;
1555+
}
1556+
}
1557+
15461558
QDomElement projectLayersElem = projectDocument.documentElement().firstChildElement( "projectlayers" );
15471559
if ( projectLayersElem.isNull() )
15481560
{
@@ -1564,6 +1576,20 @@ bool QgsProject::createEmbeddedLayer( const QString& layerId, const QString& pro
15641576
}
15651577

15661578
mEmbeddedLayers.insert( layerId, qMakePair( projectFilePath, saveFlag ) );
1579+
1580+
//change datasource path from relative to absolute if necessary
1581+
if ( !useAbsolutePathes )
1582+
{
1583+
QDomElement dsElem = mapLayerElem.firstChildElement( "datasource" );
1584+
QString debug( QFileInfo( projectFilePath ).absolutePath() + "/" + dsElem.text() );
1585+
QFileInfo absoluteDs( QFileInfo( projectFilePath ).absolutePath() + "/" + dsElem.text() );
1586+
if ( absoluteDs.exists() )
1587+
{
1588+
dsElem.removeChild( dsElem.childNodes().at( 0 ) );
1589+
dsElem.appendChild( projectDocument.createTextNode( absoluteDs.absoluteFilePath() ) );
1590+
}
1591+
}
1592+
15671593
if ( addLayer( mapLayerElem, brokenNodes, vectorLayerList ) )
15681594
{
15691595
return true;
@@ -1576,7 +1602,6 @@ bool QgsProject::createEmbeddedLayer( const QString& layerId, const QString& pro
15761602
}
15771603
}
15781604

1579-
//brokenNodes.push_back( );
15801605
return false;
15811606
}
15821607

0 commit comments

Comments
 (0)