mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-08 00:05:09 -04:00
Consider setting layerTreeInsertionMethod when adding content from qlr to canvas
This commit is contained in:
parent
276b2cb565
commit
96d5cc99b3
@ -25,13 +25,33 @@ files also store the layer tree info for the exported layers, including group in
|
|||||||
#include "qgslayerdefinition.h"
|
#include "qgslayerdefinition.h"
|
||||||
%End
|
%End
|
||||||
public:
|
public:
|
||||||
static bool loadLayerDefinition( const QString &path, QgsProject *project, QgsLayerTreeGroup *rootGroup, QString &errorMessage /Out/ );
|
|
||||||
|
static bool loadLayerDefinition( const QString &path, QgsProject *project, QgsLayerTreeGroup *rootGroup, QString &errorMessage /Out/, const QgsLayerTreeRegistryBridge::InsertionPoint *insertPoint = 0 );
|
||||||
%Docstring
|
%Docstring
|
||||||
Loads the QLR at path into QGIS. New layers are added to given project into layer tree specified by rootGroup
|
Loads the QLR at path into QGIS. New layers are added to given project into layer tree specified by rootGroup
|
||||||
|
|
||||||
|
:param path: file path to the qlr
|
||||||
|
:param project: the current project
|
||||||
|
:param rootGroup: the layer tree group to insert the qlr content
|
||||||
|
:param insertPoint: describes where in rootGroup the qlr layers/groups shall be inserted
|
||||||
|
|
||||||
|
:return: - true in case of success
|
||||||
|
- errorMessage: the returned error message
|
||||||
%End
|
%End
|
||||||
static bool loadLayerDefinition( QDomDocument doc, QgsProject *project, QgsLayerTreeGroup *rootGroup, QString &errorMessage /Out/, QgsReadWriteContext &context );
|
|
||||||
|
static bool loadLayerDefinition( QDomDocument doc, QgsProject *project, QgsLayerTreeGroup *rootGroup, QString &errorMessage /Out/, QgsReadWriteContext &context, const QgsLayerTreeRegistryBridge::InsertionPoint *insertPoint = 0 );
|
||||||
%Docstring
|
%Docstring
|
||||||
Loads the QLR from the XML document. New layers are added to given project into layer tree specified by rootGroup
|
Loads the QLR from the XML document. New layers are added to given project into layer tree specified by rootGroup
|
||||||
|
|
||||||
|
:param doc: the xml document
|
||||||
|
:param project: the current project
|
||||||
|
:param rootGroup: the layer tree group to insert the qlr content
|
||||||
|
:param context: the read write context
|
||||||
|
:param insertPoint: describes where in rootGroup the qlr layers/groups shall be inserted
|
||||||
|
:param true: in case of success
|
||||||
|
|
||||||
|
:return: - true in case of success
|
||||||
|
- errorMessage: the returned error message
|
||||||
%End
|
%End
|
||||||
|
|
||||||
static bool exportLayerDefinition( const QString &path, const QList<QgsLayerTreeNode *> &selectedTreeNodes, QString &errorMessage /Out/ );
|
static bool exportLayerDefinition( const QString &path, const QList<QgsLayerTreeNode *> &selectedTreeNodes, QString &errorMessage /Out/ );
|
||||||
|
@ -25,13 +25,33 @@ files also store the layer tree info for the exported layers, including group in
|
|||||||
#include "qgslayerdefinition.h"
|
#include "qgslayerdefinition.h"
|
||||||
%End
|
%End
|
||||||
public:
|
public:
|
||||||
static bool loadLayerDefinition( const QString &path, QgsProject *project, QgsLayerTreeGroup *rootGroup, QString &errorMessage /Out/ );
|
|
||||||
|
static bool loadLayerDefinition( const QString &path, QgsProject *project, QgsLayerTreeGroup *rootGroup, QString &errorMessage /Out/, const QgsLayerTreeRegistryBridge::InsertionPoint *insertPoint = 0 );
|
||||||
%Docstring
|
%Docstring
|
||||||
Loads the QLR at path into QGIS. New layers are added to given project into layer tree specified by rootGroup
|
Loads the QLR at path into QGIS. New layers are added to given project into layer tree specified by rootGroup
|
||||||
|
|
||||||
|
:param path: file path to the qlr
|
||||||
|
:param project: the current project
|
||||||
|
:param rootGroup: the layer tree group to insert the qlr content
|
||||||
|
:param insertPoint: describes where in rootGroup the qlr layers/groups shall be inserted
|
||||||
|
|
||||||
|
:return: - true in case of success
|
||||||
|
- errorMessage: the returned error message
|
||||||
%End
|
%End
|
||||||
static bool loadLayerDefinition( QDomDocument doc, QgsProject *project, QgsLayerTreeGroup *rootGroup, QString &errorMessage /Out/, QgsReadWriteContext &context );
|
|
||||||
|
static bool loadLayerDefinition( QDomDocument doc, QgsProject *project, QgsLayerTreeGroup *rootGroup, QString &errorMessage /Out/, QgsReadWriteContext &context, const QgsLayerTreeRegistryBridge::InsertionPoint *insertPoint = 0 );
|
||||||
%Docstring
|
%Docstring
|
||||||
Loads the QLR from the XML document. New layers are added to given project into layer tree specified by rootGroup
|
Loads the QLR from the XML document. New layers are added to given project into layer tree specified by rootGroup
|
||||||
|
|
||||||
|
:param doc: the xml document
|
||||||
|
:param project: the current project
|
||||||
|
:param rootGroup: the layer tree group to insert the qlr content
|
||||||
|
:param context: the read write context
|
||||||
|
:param insertPoint: describes where in rootGroup the qlr layers/groups shall be inserted
|
||||||
|
:param true: in case of success
|
||||||
|
|
||||||
|
:return: - true in case of success
|
||||||
|
- errorMessage: the returned error message
|
||||||
%End
|
%End
|
||||||
|
|
||||||
static bool exportLayerDefinition( const QString &path, const QList<QgsLayerTreeNode *> &selectedTreeNodes, QString &errorMessage /Out/ );
|
static bool exportLayerDefinition( const QString &path, const QList<QgsLayerTreeNode *> &selectedTreeNodes, QString &errorMessage /Out/ );
|
||||||
|
@ -1209,7 +1209,7 @@ void QgsAppLayerHandling::addMapLayer( QgsMapLayer *mapLayer, bool addToLegend )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QgsAppLayerHandling::openLayerDefinition( const QString &filename )
|
void QgsAppLayerHandling::openLayerDefinition( const QString &filename, const QgsLayerTreeRegistryBridge::InsertionPoint *insertPoint )
|
||||||
{
|
{
|
||||||
QString errorMessage;
|
QString errorMessage;
|
||||||
QgsReadWriteContext context;
|
QgsReadWriteContext context;
|
||||||
@ -1236,7 +1236,7 @@ void QgsAppLayerHandling::openLayerDefinition( const QString &filename )
|
|||||||
context.setPathResolver( QgsPathResolver( filename ) );
|
context.setPathResolver( QgsPathResolver( filename ) );
|
||||||
context.setProjectTranslator( QgsProject::instance() );
|
context.setProjectTranslator( QgsProject::instance() );
|
||||||
|
|
||||||
loaded = QgsLayerDefinition::loadLayerDefinition( doc, QgsProject::instance(), QgsProject::instance()->layerTreeRoot(), errorMessage, context );
|
loaded = QgsLayerDefinition::loadLayerDefinition( doc, QgsProject::instance(), QgsProject::instance()->layerTreeRoot(), errorMessage, context, insertPoint );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1260,7 +1260,7 @@ void QgsAppLayerHandling::openLayerDefinition( const QString &filename )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QgsAppLayerHandling::addLayerDefinition()
|
void QgsAppLayerHandling::addLayerDefinition( const QgsLayerTreeRegistryBridge::InsertionPoint *insertPoint )
|
||||||
{
|
{
|
||||||
QgsSettings settings;
|
QgsSettings settings;
|
||||||
QString lastUsedDir = settings.value( QStringLiteral( "UI/lastQLRDir" ), QDir::homePath() ).toString();
|
QString lastUsedDir = settings.value( QStringLiteral( "UI/lastQLRDir" ), QDir::homePath() ).toString();
|
||||||
@ -1272,7 +1272,7 @@ void QgsAppLayerHandling::addLayerDefinition()
|
|||||||
QFileInfo fi( path );
|
QFileInfo fi( path );
|
||||||
settings.setValue( QStringLiteral( "UI/lastQLRDir" ), fi.path() );
|
settings.setValue( QStringLiteral( "UI/lastQLRDir" ), fi.path() );
|
||||||
|
|
||||||
openLayerDefinition( path );
|
openLayerDefinition( path, insertPoint );
|
||||||
}
|
}
|
||||||
|
|
||||||
QList< QgsMapLayer * > QgsAppLayerHandling::addDatabaseLayers( const QStringList &layerPathList, const QString &providerKey, bool &ok )
|
QList< QgsMapLayer * > QgsAppLayerHandling::addDatabaseLayers( const QStringList &layerPathList, const QString &providerKey, bool &ok )
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "qgsconfig.h"
|
#include "qgsconfig.h"
|
||||||
#include "qgsmaplayer.h"
|
#include "qgsmaplayer.h"
|
||||||
#include "qgsvectorlayerref.h"
|
#include "qgsvectorlayerref.h"
|
||||||
|
#include "qgslayertreeregistrybridge.h"
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
@ -149,10 +150,18 @@ class APP_EXPORT QgsAppLayerHandling
|
|||||||
//! Add a 'pre-made' map layer to the project
|
//! Add a 'pre-made' map layer to the project
|
||||||
static void addMapLayer( QgsMapLayer *mapLayer, bool addToLegend = true );
|
static void addMapLayer( QgsMapLayer *mapLayer, bool addToLegend = true );
|
||||||
|
|
||||||
static void openLayerDefinition( const QString &filename );
|
/**
|
||||||
|
* Opens qlr
|
||||||
|
* \param filename file path to the qlr
|
||||||
|
* \param insertPoint describes where the qlr layers/groups shall be inserted
|
||||||
|
*/
|
||||||
|
static void openLayerDefinition( const QString &filename, const QgsLayerTreeRegistryBridge::InsertionPoint *insertPoint = nullptr );
|
||||||
|
|
||||||
//! Add a Layer Definition file
|
/**
|
||||||
static void addLayerDefinition();
|
* Add a Layer Definition file
|
||||||
|
* \param insertPoint describes where the qlr layers/groups shall be inserted
|
||||||
|
*/
|
||||||
|
static void addLayerDefinition( const QgsLayerTreeRegistryBridge::InsertionPoint *insertPoint );
|
||||||
|
|
||||||
//! Add a list of database layers to the map
|
//! Add a list of database layers to the map
|
||||||
static QList< QgsMapLayer * > addDatabaseLayers( const QStringList &layerPathList, const QString &providerKey, bool &ok );
|
static QList< QgsMapLayer * > addDatabaseLayers( const QStringList &layerPathList, const QString &providerKey, bool &ok );
|
||||||
|
@ -863,6 +863,12 @@ void QgisApp::annotationItemTypeAdded( int id )
|
|||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QgisApp::addLayerDefinition()
|
||||||
|
{
|
||||||
|
QgsLayerTreeRegistryBridge::InsertionPoint pt = layerTreeInsertionPoint();
|
||||||
|
QgsAppLayerHandling::addLayerDefinition( &pt );
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This function contains forced validation of CRS used in QGIS.
|
* This function contains forced validation of CRS used in QGIS.
|
||||||
* There are 4 options depending on the settings:
|
* There are 4 options depending on the settings:
|
||||||
@ -3030,7 +3036,7 @@ void QgisApp::createActions()
|
|||||||
connect( mActionShowRasterCalculator, &QAction::triggered, this, &QgisApp::showRasterCalculator );
|
connect( mActionShowRasterCalculator, &QAction::triggered, this, &QgisApp::showRasterCalculator );
|
||||||
connect( mActionShowMeshCalculator, &QAction::triggered, this, &QgisApp::showMeshCalculator );
|
connect( mActionShowMeshCalculator, &QAction::triggered, this, &QgisApp::showMeshCalculator );
|
||||||
connect( mActionEmbedLayers, &QAction::triggered, this, &QgisApp::embedLayers );
|
connect( mActionEmbedLayers, &QAction::triggered, this, &QgisApp::embedLayers );
|
||||||
connect( mActionAddLayerDefinition, &QAction::triggered, this, [] { QgsAppLayerHandling::addLayerDefinition(); } );
|
connect( mActionAddLayerDefinition, &QAction::triggered, this, &QgisApp::addLayerDefinition );
|
||||||
connect( mActionAddOgrLayer, &QAction::triggered, this, [ = ] { dataSourceManager( QStringLiteral( "ogr" ) ); } );
|
connect( mActionAddOgrLayer, &QAction::triggered, this, [ = ] { dataSourceManager( QStringLiteral( "ogr" ) ); } );
|
||||||
connect( mActionAddRasterLayer, &QAction::triggered, this, [ = ] { dataSourceManager( QStringLiteral( "gdal" ) ); } );
|
connect( mActionAddRasterLayer, &QAction::triggered, this, [ = ] { dataSourceManager( QStringLiteral( "gdal" ) ); } );
|
||||||
connect( mActionAddMeshLayer, &QAction::triggered, this, [ = ] { dataSourceManager( QStringLiteral( "mdal" ) ); } );
|
connect( mActionAddMeshLayer, &QAction::triggered, this, [ = ] { dataSourceManager( QStringLiteral( "mdal" ) ); } );
|
||||||
@ -7062,7 +7068,8 @@ QList< QgsMapLayer * > QgisApp::openFile( const QString &fileName, const QString
|
|||||||
}
|
}
|
||||||
else if ( fi.suffix().compare( QLatin1String( "qlr" ), Qt::CaseInsensitive ) == 0 )
|
else if ( fi.suffix().compare( QLatin1String( "qlr" ), Qt::CaseInsensitive ) == 0 )
|
||||||
{
|
{
|
||||||
QgsAppLayerHandling::openLayerDefinition( fileName );
|
QgsLayerTreeRegistryBridge::InsertionPoint p = layerTreeInsertionPoint();
|
||||||
|
QgsAppLayerHandling::openLayerDefinition( fileName, &p );
|
||||||
}
|
}
|
||||||
else if ( fi.suffix().compare( QLatin1String( "qpt" ), Qt::CaseInsensitive ) == 0 )
|
else if ( fi.suffix().compare( QLatin1String( "qpt" ), Qt::CaseInsensitive ) == 0 )
|
||||||
{
|
{
|
||||||
|
@ -2117,6 +2117,11 @@ class APP_EXPORT QgisApp : public QMainWindow, private Ui::MainWindow
|
|||||||
|
|
||||||
void annotationItemTypeAdded( int id );
|
void annotationItemTypeAdded( int id );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open a qlr file
|
||||||
|
*/
|
||||||
|
void addLayerDefinition();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
#include "qgslayertreegroup.h"
|
#include "qgslayertreegroup.h"
|
||||||
#include "qgslayertreelayer.h"
|
#include "qgslayertreelayer.h"
|
||||||
|
|
||||||
bool QgsLayerDefinition::loadLayerDefinition( const QString &path, QgsProject *project, QgsLayerTreeGroup *rootGroup, QString &errorMessage )
|
bool QgsLayerDefinition::loadLayerDefinition( const QString &path, QgsProject *project, QgsLayerTreeGroup *rootGroup, QString &errorMessage, const QgsLayerTreeRegistryBridge::InsertionPoint *insertPoint )
|
||||||
{
|
{
|
||||||
QFile file( path );
|
QFile file( path );
|
||||||
if ( !file.open( QIODevice::ReadOnly ) )
|
if ( !file.open( QIODevice::ReadOnly ) )
|
||||||
@ -62,10 +62,10 @@ bool QgsLayerDefinition::loadLayerDefinition( const QString &path, QgsProject *p
|
|||||||
context.setPathResolver( QgsPathResolver( path ) );
|
context.setPathResolver( QgsPathResolver( path ) );
|
||||||
context.setProjectTranslator( project );
|
context.setProjectTranslator( project );
|
||||||
|
|
||||||
return loadLayerDefinition( doc, project, rootGroup, errorMessage, context );
|
return loadLayerDefinition( doc, project, rootGroup, errorMessage, context, insertPoint );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool QgsLayerDefinition::loadLayerDefinition( QDomDocument doc, QgsProject *project, QgsLayerTreeGroup *rootGroup, QString &errorMessage, QgsReadWriteContext &context )
|
bool QgsLayerDefinition::loadLayerDefinition( QDomDocument doc, QgsProject *project, QgsLayerTreeGroup *rootGroup, QString &errorMessage, QgsReadWriteContext &context, const QgsLayerTreeRegistryBridge::InsertionPoint *insertPoint )
|
||||||
{
|
{
|
||||||
errorMessage.clear();
|
errorMessage.clear();
|
||||||
|
|
||||||
@ -195,7 +195,26 @@ bool QgsLayerDefinition::loadLayerDefinition( QDomDocument doc, QgsProject *proj
|
|||||||
root->abandonChildren();
|
root->abandonChildren();
|
||||||
delete root;
|
delete root;
|
||||||
|
|
||||||
rootGroup->insertChildNodes( -1, nodes );
|
QgsSettings settings;
|
||||||
|
if ( !insertPoint )
|
||||||
|
{
|
||||||
|
rootGroup->insertChildNodes( -1, nodes );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Qgis::LayerTreeInsertionMethod insertionMethod = settings.enumValue( QStringLiteral( "qgis/layerTreeInsertionMethod" ), Qgis::LayerTreeInsertionMethod::AboveInsertionPoint );
|
||||||
|
switch ( insertionMethod )
|
||||||
|
{
|
||||||
|
case Qgis::LayerTreeInsertionMethod::AboveInsertionPoint:
|
||||||
|
insertPoint->group->insertChildNodes( insertPoint->position, nodes );
|
||||||
|
break;
|
||||||
|
case Qgis::LayerTreeInsertionMethod::TopOfTree:
|
||||||
|
rootGroup->insertChildNodes( 0, nodes );
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
rootGroup->insertChildNodes( -1, nodes ); //Qgis::LayerTreeInsertionMethod::OptimalInInsertionGroup does not really make sense for qlr
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include "qgis_core.h"
|
#include "qgis_core.h"
|
||||||
#include "qgis_sip.h"
|
#include "qgis_sip.h"
|
||||||
#include "qgis.h"
|
#include "qgis.h"
|
||||||
|
#include "qgslayertreeregistrybridge.h"
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QVector>
|
#include <QVector>
|
||||||
@ -44,10 +45,30 @@ class QgsProject;
|
|||||||
class CORE_EXPORT QgsLayerDefinition
|
class CORE_EXPORT QgsLayerDefinition
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! Loads the QLR at path into QGIS. New layers are added to given project into layer tree specified by rootGroup
|
|
||||||
static bool loadLayerDefinition( const QString &path, QgsProject *project, QgsLayerTreeGroup *rootGroup, QString &errorMessage SIP_OUT );
|
/**
|
||||||
//! Loads the QLR from the XML document. New layers are added to given project into layer tree specified by rootGroup
|
* Loads the QLR at path into QGIS. New layers are added to given project into layer tree specified by rootGroup
|
||||||
static bool loadLayerDefinition( QDomDocument doc, QgsProject *project, QgsLayerTreeGroup *rootGroup, QString &errorMessage SIP_OUT, QgsReadWriteContext &context );
|
* \param path file path to the qlr
|
||||||
|
* \param project the current project
|
||||||
|
* \param rootGroup the layer tree group to insert the qlr content
|
||||||
|
* \param errorMessage the returned error message
|
||||||
|
* \param insertPoint describes where in rootGroup the qlr layers/groups shall be inserted
|
||||||
|
* \return true in case of success
|
||||||
|
*/
|
||||||
|
static bool loadLayerDefinition( const QString &path, QgsProject *project, QgsLayerTreeGroup *rootGroup, QString &errorMessage SIP_OUT, const QgsLayerTreeRegistryBridge::InsertionPoint *insertPoint = nullptr );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the QLR from the XML document. New layers are added to given project into layer tree specified by rootGroup
|
||||||
|
* \param doc the xml document
|
||||||
|
* \param project the current project
|
||||||
|
* \param rootGroup the layer tree group to insert the qlr content
|
||||||
|
* \param errorMessage the returned error message
|
||||||
|
* \param context the read write context
|
||||||
|
* \param insertPoint describes where in rootGroup the qlr layers/groups shall be inserted
|
||||||
|
* \param true in case of success
|
||||||
|
* \return true in case of success
|
||||||
|
*/
|
||||||
|
static bool loadLayerDefinition( QDomDocument doc, QgsProject *project, QgsLayerTreeGroup *rootGroup, QString &errorMessage SIP_OUT, QgsReadWriteContext &context, const QgsLayerTreeRegistryBridge::InsertionPoint *insertPoint = nullptr );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Exports the selected layer tree nodes to a QLR file.
|
* Exports the selected layer tree nodes to a QLR file.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user