[layertree] Use writePath() for embedded groups (absolute vs relative path)

This commit is contained in:
Martin Dobias 2014-05-27 22:09:08 +07:00
parent 48ee84b1bf
commit 9cd70c563a
2 changed files with 21 additions and 0 deletions

View File

@ -999,6 +999,24 @@ void QgsProject::loadEmbeddedNodes( QgsLayerTreeGroup* group )
} }
} }
void QgsProject::updateEmbeddedGroupsProjectPath( QgsLayerTreeGroup* group )
{
foreach ( QgsLayerTreeNode* node, group->children() )
{
if ( QgsLayerTree::isGroup( node ) )
{
if ( !node->customProperty( "embedded_project" ).toString().isEmpty() )
{
// may change from absolute path to relative path
QString newPath = writePath( node->customProperty( "embedded_project" ).toString() );
node->setCustomProperty( "embedded_project", newPath );
}
else
updateEmbeddedGroupsProjectPath( QgsLayerTree::toGroup( node ) );
}
}
}
bool QgsProject::read( QDomNode & layerNode ) bool QgsProject::read( QDomNode & layerNode )
{ {
@ -1080,6 +1098,7 @@ bool QgsProject::write()
// write layer tree - make sure it is without embedded subgroups // write layer tree - make sure it is without embedded subgroups
QgsLayerTreeNode* clonedRoot = mRootGroup->clone(); QgsLayerTreeNode* clonedRoot = mRootGroup->clone();
QgsLayerTreeUtils::removeChildrenOfEmbeddedGroups( QgsLayerTree::toGroup( clonedRoot ) ); QgsLayerTreeUtils::removeChildrenOfEmbeddedGroups( QgsLayerTree::toGroup( clonedRoot ) );
updateEmbeddedGroupsProjectPath( QgsLayerTree::toGroup( clonedRoot ) ); // convert absolute paths to relative paths if required
clonedRoot->writeXML( qgisNode ); clonedRoot->writeXML( qgisNode );
delete clonedRoot; delete clonedRoot;

View File

@ -357,6 +357,8 @@ class CORE_EXPORT QgsProject : public QObject
void loadEmbeddedNodes( QgsLayerTreeGroup* group ); void loadEmbeddedNodes( QgsLayerTreeGroup* group );
void updateEmbeddedGroupsProjectPath( QgsLayerTreeGroup* group );
signals: signals:
//! emitted when project is being read //! emitted when project is being read
void readProject( const QDomDocument & ); void readProject( const QDomDocument & );