Skip to content

Commit 03c5998

Browse files
committedMar 11, 2013
support embedding of spatialite layers on relative paths
1 parent 558dcf2 commit 03c5998

File tree

2 files changed

+29
-11
lines changed

2 files changed

+29
-11
lines changed
 

‎src/core/qgsproject.cpp

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
#include "qgsprojectversion.h"
3232
#include "qgspluginlayer.h"
3333
#include "qgspluginlayerregistry.h"
34+
#include "qgsdatasourceuri.h"
3435

3536
#include <QApplication>
3637
#include <QFileInfo>
@@ -1597,13 +1598,31 @@ bool QgsProject::createEmbeddedLayer( const QString& layerId, const QString& pro
15971598
//change datasource path from relative to absolute if necessary
15981599
if ( !useAbsolutePathes )
15991600
{
1600-
QDomElement dsElem = mapLayerElem.firstChildElement( "datasource" );
1601-
QString debug( QFileInfo( projectFilePath ).absolutePath() + "/" + dsElem.text() );
1602-
QFileInfo absoluteDs( QFileInfo( projectFilePath ).absolutePath() + "/" + dsElem.text() );
1603-
if ( absoluteDs.exists() )
1601+
QDomElement provider = mapLayerElem.firstChildElement( "provider" );
1602+
if ( provider.text() == "spatialite" )
16041603
{
1605-
dsElem.removeChild( dsElem.childNodes().at( 0 ) );
1606-
dsElem.appendChild( projectDocument.createTextNode( absoluteDs.absoluteFilePath() ) );
1604+
QDomElement dsElem = mapLayerElem.firstChildElement( "datasource" );
1605+
1606+
QgsDataSourceURI uri( dsElem.text() );
1607+
1608+
QFileInfo absoluteDs( QFileInfo( projectFilePath ).absolutePath() + "/" + uri.database() );
1609+
if ( absoluteDs.exists() )
1610+
{
1611+
uri.setDatabase( absoluteDs.absoluteFilePath() );
1612+
dsElem.removeChild( dsElem.childNodes().at( 0 ) );
1613+
dsElem.appendChild( projectDocument.createTextNode( uri.uri() ) );
1614+
}
1615+
}
1616+
else
1617+
{
1618+
QDomElement dsElem = mapLayerElem.firstChildElement( "datasource" );
1619+
QString debug( QFileInfo( projectFilePath ).absolutePath() + "/" + dsElem.text() );
1620+
QFileInfo absoluteDs( QFileInfo( projectFilePath ).absolutePath() + "/" + dsElem.text() );
1621+
if ( absoluteDs.exists() )
1622+
{
1623+
dsElem.removeChild( dsElem.childNodes().at( 0 ) );
1624+
dsElem.appendChild( projectDocument.createTextNode( absoluteDs.absoluteFilePath() ) );
1625+
}
16071626
}
16081627
}
16091628

‎src/core/qgsvectorlayer.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2313,7 +2313,6 @@ bool QgsVectorLayer::readXml( const QDomNode& layer_node )
23132313
} // void QgsVectorLayer::readXml
23142314

23152315

2316-
23172316
bool QgsVectorLayer::setDataProvider( QString const & provider )
23182317
{
23192318
// XXX should I check for and possibly delete any pre-existing providers?
@@ -2619,7 +2618,7 @@ bool QgsVectorLayer::readSymbology( const QDomNode& node, QString& errorMessage
26192618
mEditTypes.insert( name, editType );
26202619

26212620
int editable = editTypeElement.attribute( "editable" , "1" ).toInt();
2622-
mFieldEditables.insert( name, editable == 1);
2621+
mFieldEditables.insert( name, editable == 1 );
26232622

26242623
switch ( editType )
26252624
{
@@ -2936,7 +2935,7 @@ bool QgsVectorLayer::writeSymbology( QDomNode& node, QDomDocument& doc, QString&
29362935
QDomElement editTypeElement = doc.createElement( "edittype" );
29372936
editTypeElement.setAttribute( "name", it.key() );
29382937
editTypeElement.setAttribute( "type", it.value() );
2939-
editTypeElement.setAttribute( "editable", mFieldEditables[ it.key()]?1:0 );
2938+
editTypeElement.setAttribute( "editable", mFieldEditables[ it.key()] ? 1 : 0 );
29402939

29412940
switch (( EditType ) it.value() )
29422941
{
@@ -3903,7 +3902,7 @@ bool QgsVectorLayer::fieldEditable( int idx )
39033902
{
39043903
const QgsFields &fields = pendingFields();
39053904
if ( idx >= 0 && idx < fields.count() && mEditTypes.contains( fields[idx].name() ) )
3906-
return mFieldEditables[ fields[idx].name() ];
3905+
return mFieldEditables[ fields[idx].name()];
39073906
else
39083907
return false;
39093908
}
@@ -3912,7 +3911,7 @@ void QgsVectorLayer::setFieldEditable( int idx, bool editable )
39123911
{
39133912
const QgsFields &fields = pendingFields();
39143913
if ( idx >= 0 && idx < fields.count() && mEditTypes.contains( fields[idx].name() ) )
3915-
mFieldEditables[ fields[idx].name() ] = editable;
3914+
mFieldEditables[ fields[idx].name()] = editable;
39163915
}
39173916

39183917
void QgsVectorLayer::addOverlay( QgsVectorOverlay* overlay )

0 commit comments

Comments
 (0)
Please sign in to comment.