QGIS API Documentation  3.6.0-Noosa (5873452)
qgsalgorithmloadlayer.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsalgorithmloadlayer.cpp
3  ---------------------
4  begin : November 2017
5  copyright : (C) 2017 by Nyall Dawson
6  email : nyall dot dawson at gmail dot com
7  ***************************************************************************/
8 
9 /***************************************************************************
10  * *
11  * This program is free software; you can redistribute it and/or modify *
12  * it under the terms of the GNU General Public License as published by *
13  * the Free Software Foundation; either version 2 of the License, or *
14  * (at your option) any later version. *
15  * *
16  ***************************************************************************/
17 
18 #include "qgsalgorithmloadlayer.h"
19 
21 
22 QString QgsLoadLayerAlgorithm::name() const
23 {
24  return QStringLiteral( "loadlayer" );
25 }
26 
27 QgsProcessingAlgorithm::Flags QgsLoadLayerAlgorithm::flags() const
28 {
29  return FlagHideFromToolbox;
30 }
31 
32 QString QgsLoadLayerAlgorithm::displayName() const
33 {
34  return QObject::tr( "Load layer into project" );
35 }
36 
37 QStringList QgsLoadLayerAlgorithm::tags() const
38 {
39  return QObject::tr( "load,open,layer,raster,vector,project" ).split( ',' );
40 }
41 
42 QString QgsLoadLayerAlgorithm::group() const
43 {
44  return QObject::tr( "Modeler tools" );
45 }
46 
47 QString QgsLoadLayerAlgorithm::groupId() const
48 {
49  return QStringLiteral( "modelertools" );
50 }
51 
52 QString QgsLoadLayerAlgorithm::shortHelpString() const
53 {
54  return QObject::tr( "This algorithm loads a layer to the current project." );
55 }
56 
57 QgsLoadLayerAlgorithm *QgsLoadLayerAlgorithm::createInstance() const
58 {
59  return new QgsLoadLayerAlgorithm();
60 }
61 
62 void QgsLoadLayerAlgorithm::initAlgorithm( const QVariantMap & )
63 {
64  addParameter( new QgsProcessingParameterMapLayer( QStringLiteral( "INPUT" ), QObject::tr( "Layer" ) ) );
65  addParameter( new QgsProcessingParameterString( QStringLiteral( "NAME" ), QObject::tr( "Loaded layer name" ) ) );
66  addOutput( new QgsProcessingOutputMapLayer( QStringLiteral( "OUTPUT" ), QObject::tr( "Layer" ) ) );
67 }
68 
69 QVariantMap QgsLoadLayerAlgorithm::processAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback * )
70 {
71  QgsMapLayer *layer = parameterAsLayer( parameters, QStringLiteral( "INPUT" ), context );
72  QString name = parameterAsString( parameters, QStringLiteral( "NAME" ), context );
73 
74  if ( !layer )
75  throw QgsProcessingException( QObject::tr( "Invalid input layer" ) );
76 
77  if ( name.isEmpty() )
78  throw QgsProcessingException( QObject::tr( "Invalid (empty) layer name" ) );
79 
80  layer->setName( name );
81  context.addLayerToLoadOnCompletion( layer->id(), QgsProcessingContext::LayerDetails( name, context.project(), name ) );
82 
83  QVariantMap results;
84  results.insert( QStringLiteral( "OUTPUT" ), layer->id() );
85  return results;
86 }
87 
Base class for all map layer types.
Definition: qgsmaplayer.h:64
Base class for providing feedback from a processing algorithm.
A map layer parameter for processing algorithms.
QgsProject * project() const
Returns the project in which the algorithm is being executed.
QString id() const
Returns the layer's unique ID, which is used to access this layer from QgsProject.
Custom exception class for processing related exceptions.
Definition: qgsexception.h:82
void setName(const QString &name)
Set the display name of the layer.
Details for layers to load into projects.
void addLayerToLoadOnCompletion(const QString &layer, const QgsProcessingContext::LayerDetails &details)
Adds a layer to load (by ID or datasource) into the canvas upon completion of the algorithm or model...
Contains information about the context in which a processing algorithm is executed.
A string parameter for processing algorithms.
A map layer output for processing algorithms, where layers may be either vector or raster...