Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsprocessingoutputs.h 3 : : ------------------------- 4 : : begin : May 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 : : #ifndef QGSPROCESSINGOUTPUTS_H 19 : : #define QGSPROCESSINGOUTPUTS_H 20 : : 21 : : #include "qgis_core.h" 22 : : #include "qgis.h" 23 : : #include "qgsprocessingparameters.h" 24 : : 25 : : // 26 : : // Output definitions 27 : : // 28 : : 29 : : /** 30 : : * \class QgsProcessingOutputDefinition 31 : : * \ingroup core 32 : : * 33 : : * \brief Base class for the definition of processing outputs. 34 : : * 35 : : * Output definitions encapsulate the properties regarding the outputs from algorithms, such 36 : : * as generated layers or calculated values. 37 : : * 38 : : * \since QGIS 3.0 39 : : */ 40 : : 41 : : class CORE_EXPORT QgsProcessingOutputDefinition 42 : : { 43 : : 44 : : #ifdef SIP_RUN 45 : : SIP_CONVERT_TO_SUBCLASS_CODE 46 : : if ( sipCpp->type() == QgsProcessingOutputVectorLayer::typeName() ) 47 : : sipType = sipType_QgsProcessingOutputVectorLayer; 48 : : else if ( sipCpp->type() == QgsProcessingOutputRasterLayer::typeName() ) 49 : : sipType = sipType_QgsProcessingOutputRasterLayer; 50 : : else if ( sipCpp->type() == QgsProcessingOutputMapLayer::typeName() ) 51 : : sipType = sipType_QgsProcessingOutputMapLayer; 52 : : else if ( sipCpp->type() == QgsProcessingOutputMultipleLayers::typeName() ) 53 : : sipType = sipType_QgsProcessingOutputMultipleLayers; 54 : : else if ( sipCpp->type() == QgsProcessingOutputHtml::typeName() ) 55 : : sipType = sipType_QgsProcessingOutputHtml; 56 : : else if ( sipCpp->type() == QgsProcessingOutputNumber::typeName() ) 57 : : sipType = sipType_QgsProcessingOutputNumber; 58 : : else if ( sipCpp->type() == QgsProcessingOutputString::typeName() ) 59 : : sipType = sipType_QgsProcessingOutputString; 60 : : else if ( sipCpp->type() == QgsProcessingOutputBoolean::typeName() ) 61 : : sipType = sipType_QgsProcessingOutputBoolean; 62 : : else if ( sipCpp->type() == QgsProcessingOutputFolder::typeName() ) 63 : : sipType = sipType_QgsProcessingOutputFolder; 64 : : else if ( sipCpp->type() == QgsProcessingOutputFile::typeName() ) 65 : : sipType = sipType_QgsProcessingOutputFile; 66 : : else if ( sipCpp->type() == QgsProcessingOutputConditionalBranch::typeName() ) 67 : : sipType = sipType_QgsProcessingOutputConditionalBranch; 68 : : else 69 : : sipType = nullptr; 70 : : SIP_END 71 : : #endif 72 : : 73 : : public: 74 : : 75 : : /** 76 : : * Constructor for QgsProcessingOutputDefinition. 77 : : */ 78 : : QgsProcessingOutputDefinition( const QString &name, const QString &description = QString() ); 79 : : 80 : 0 : virtual ~QgsProcessingOutputDefinition() = default; 81 : : 82 : : /** 83 : : * Unique output type name. 84 : : */ 85 : : virtual QString type() const = 0; 86 : : 87 : : /** 88 : : * Returns the name of the output. This is the internal identifier by which 89 : : * algorithms access this output. 90 : : * \see setName() 91 : : */ 92 : 0 : QString name() const { return mName; } 93 : : 94 : : /** 95 : : * Sets the \a name of the output. This is the internal identifier by which 96 : : * algorithms access this output. 97 : : * \see name() 98 : : */ 99 : : void setName( const QString &name ) { mName = name; } 100 : : 101 : : /** 102 : : * Returns the description for the output. This is the user-visible string 103 : : * used to identify this output. 104 : : * \see setDescription() 105 : : */ 106 : 0 : QString description() const { return mDescription; } 107 : : 108 : : /** 109 : : * Sets the \a description for the output. This is the user-visible string 110 : : * used to identify this output. 111 : : * \see description() 112 : : */ 113 : : void setDescription( const QString &description ) { mDescription = description; } 114 : : 115 : : /** 116 : : * Sets whether an output was automatically created when adding a parameter. 117 : : * \param autoCreated set to TRUE if the output is to be considered as automatically created. 118 : : * \see autoCreated() 119 : : * \since QGIS 3.14 120 : : */ 121 : 0 : void setAutoCreated( bool autoCreated ) { mAutoCreated = autoCreated; } 122 : : 123 : : /** 124 : : * Returns TRUE if the output was automatically created when adding a parameter. 125 : : * \see setAutoCreated() 126 : : * \since QGIS 3.14 127 : : */ 128 : 0 : bool autoCreated() const { return mAutoCreated; } 129 : : 130 : : protected: 131 : : 132 : : //! Output name 133 : : QString mName; 134 : : 135 : : //! Output description 136 : : QString mDescription; 137 : : 138 : : bool mAutoCreated = false; 139 : : 140 : : }; 141 : : 142 : : //! List of processing parameters 143 : : typedef QList< const QgsProcessingOutputDefinition * > QgsProcessingOutputDefinitions; 144 : : 145 : : /** 146 : : * \class QgsProcessingOutputMapLayer 147 : : * \ingroup core 148 : : * \brief A map layer output for processing algorithms, where layers may be either vector or raster. 149 : : * 150 : : * If the actual layer output type is known (e.g. always vector or always raster), use 151 : : * QgsProcessingOutputVectorLayer or QgsProcessingOutputRasterLayer instead. 152 : : * 153 : : * \since QGIS 3.0 154 : : */ 155 : 0 : class CORE_EXPORT QgsProcessingOutputMapLayer : public QgsProcessingOutputDefinition 156 : : { 157 : : public: 158 : : 159 : : /** 160 : : * Constructor for QgsProcessingOutputMapLayer. 161 : : */ 162 : : QgsProcessingOutputMapLayer( const QString &name, const QString &description = QString() ); 163 : : 164 : : /** 165 : : * Returns the type name for the output class. 166 : : */ 167 : 0 : static QString typeName() { return QStringLiteral( "outputLayer" ); } 168 : : 169 : : QString type() const override; 170 : : 171 : : }; 172 : : 173 : : /** 174 : : * \class QgsProcessingOutputVectorLayer 175 : : * \ingroup core 176 : : * \brief A vector layer output for processing algorithms. 177 : : * \since QGIS 3.0 178 : : */ 179 : 0 : class CORE_EXPORT QgsProcessingOutputVectorLayer : public QgsProcessingOutputDefinition 180 : : { 181 : : public: 182 : : 183 : : /** 184 : : * Constructor for QgsProcessingOutputVectorLayer. 185 : : */ 186 : : QgsProcessingOutputVectorLayer( const QString &name, const QString &description = QString(), QgsProcessing::SourceType type = QgsProcessing::TypeVectorAnyGeometry ); 187 : : 188 : : /** 189 : : * Returns the type name for the output class. 190 : : */ 191 : 0 : static QString typeName() { return QStringLiteral( "outputVector" ); } 192 : 0 : QString type() const override { return typeName(); } 193 : : 194 : : /** 195 : : * Returns the layer type for the output layer. 196 : : * \see setDataType() 197 : : */ 198 : : QgsProcessing::SourceType dataType() const; 199 : : 200 : : /** 201 : : * Sets the layer \a type for the output layer. 202 : : * \see dataType() 203 : : */ 204 : : void setDataType( QgsProcessing::SourceType type ); 205 : : 206 : : private: 207 : : 208 : : QgsProcessing::SourceType mDataType = QgsProcessing::TypeVectorAnyGeometry; 209 : : }; 210 : : 211 : : /** 212 : : * \class QgsProcessingOutputRasterLayer 213 : : * \ingroup core 214 : : * \brief A raster layer output for processing algorithms. 215 : : * \since QGIS 3.0 216 : : */ 217 : 0 : class CORE_EXPORT QgsProcessingOutputRasterLayer : public QgsProcessingOutputDefinition 218 : : { 219 : : public: 220 : : 221 : : /** 222 : : * Constructor for QgsProcessingOutputRasterLayer. 223 : : */ 224 : : QgsProcessingOutputRasterLayer( const QString &name, const QString &description = QString() ); 225 : : 226 : : /** 227 : : * Returns the type name for the output class. 228 : : */ 229 : 0 : static QString typeName() { return QStringLiteral( "outputRaster" ); } 230 : 0 : QString type() const override { return typeName(); } 231 : : 232 : : 233 : : }; 234 : : 235 : : /** 236 : : * \class QgsProcessingOutputMultipleLayers 237 : : * \ingroup core 238 : : * \brief A multi-layer output for processing algorithms which create map layers, when 239 : : * the number and nature of the output layers is not predefined. 240 : : * 241 : : * \note Always prefer to explicitly define QgsProcessingOutputVectorLayer, 242 : : * QgsProcessingOutputRasterLayer or QgsProcessingOutputMapLayer where possible. QgsProcessingOutputMultipleLayers 243 : : * should only ever be used when the number of output layers is not 244 : : * fixed - e.g. as a result of processing all layers in a specified 245 : : * folder. 246 : : * \since QGIS 3.0 247 : : */ 248 : 0 : class CORE_EXPORT QgsProcessingOutputMultipleLayers : public QgsProcessingOutputDefinition 249 : : { 250 : : public: 251 : : 252 : : /** 253 : : * Constructor for QgsProcessingOutputMultipleLayers. 254 : : */ 255 : : QgsProcessingOutputMultipleLayers( const QString &name, const QString &description = QString() ); 256 : : 257 : : /** 258 : : * Returns the type name for the output class. 259 : : */ 260 : 0 : static QString typeName() { return QStringLiteral( "outputMultilayer" ); } 261 : : QString type() const override; 262 : : 263 : : }; 264 : : 265 : : /** 266 : : * \class QgsProcessingOutputHtml 267 : : * \ingroup core 268 : : * \brief A HTML file output for processing algorithms. 269 : : * \since QGIS 3.0 270 : : */ 271 : 0 : class CORE_EXPORT QgsProcessingOutputHtml : public QgsProcessingOutputDefinition 272 : : { 273 : : public: 274 : : 275 : : /** 276 : : * Constructor for QgsProcessingOutputHtml. 277 : : */ 278 : : QgsProcessingOutputHtml( const QString &name, const QString &description = QString() ); 279 : : 280 : : /** 281 : : * Returns the type name for the output class. 282 : : */ 283 : 0 : static QString typeName() { return QStringLiteral( "outputHtml" ); } 284 : 0 : QString type() const override { return typeName(); } 285 : : 286 : : }; 287 : : 288 : : /** 289 : : * \class QgsProcessingOutputNumber 290 : : * \ingroup core 291 : : * \brief A numeric output for processing algorithms. 292 : : * \since QGIS 3.0 293 : : */ 294 : 0 : class CORE_EXPORT QgsProcessingOutputNumber : public QgsProcessingOutputDefinition 295 : : { 296 : : public: 297 : : 298 : : /** 299 : : * Constructor for QgsProcessingOutputNumber. 300 : : */ 301 : : QgsProcessingOutputNumber( const QString &name, const QString &description = QString() ); 302 : : 303 : : /** 304 : : * Returns the type name for the output class. 305 : : */ 306 : 0 : static QString typeName() { return QStringLiteral( "outputNumber" ); } 307 : 0 : QString type() const override { return typeName(); } 308 : : }; 309 : : 310 : : /** 311 : : * \class QgsProcessingOutputString 312 : : * \ingroup core 313 : : * \brief A string output for processing algorithms. 314 : : * \since QGIS 3.0 315 : : */ 316 : 0 : class CORE_EXPORT QgsProcessingOutputString : public QgsProcessingOutputDefinition 317 : : { 318 : : public: 319 : : 320 : : /** 321 : : * Constructor for QgsProcessingOutputString. 322 : : */ 323 : : QgsProcessingOutputString( const QString &name, const QString &description = QString() ); 324 : : 325 : : /** 326 : : * Returns the type name for the output class. 327 : : */ 328 : 0 : static QString typeName() { return QStringLiteral( "outputString" ); } 329 : 0 : QString type() const override { return typeName(); } 330 : : 331 : : }; 332 : : 333 : : /** 334 : : * \class QgsProcessingOutputBoolean 335 : : * \ingroup core 336 : : * \brief A boolean output for processing algorithms. 337 : : * \since QGIS 3.8 338 : : */ 339 : 0 : class CORE_EXPORT QgsProcessingOutputBoolean : public QgsProcessingOutputDefinition 340 : : { 341 : : public: 342 : : 343 : : /** 344 : : * Constructor for QgsProcessingOutputNumber. 345 : : */ 346 : : QgsProcessingOutputBoolean( const QString &name, const QString &description = QString() ); 347 : : 348 : : /** 349 : : * Returns the type name for the output class. 350 : : */ 351 : 0 : static QString typeName() { return QStringLiteral( "outputBoolean" ); } 352 : 0 : QString type() const override { return typeName(); } 353 : : }; 354 : : 355 : : /** 356 : : * \class QgsProcessingOutputFolder 357 : : * \ingroup core 358 : : * \brief A folder output for processing algorithms. 359 : : * \since QGIS 3.0 360 : : */ 361 : 0 : class CORE_EXPORT QgsProcessingOutputFolder : public QgsProcessingOutputDefinition 362 : : { 363 : : public: 364 : : 365 : : /** 366 : : * Constructor for QgsProcessingOutputFolder. 367 : : */ 368 : : 369 : : QgsProcessingOutputFolder( const QString &name, const QString &description = QString() ); 370 : : 371 : : /** 372 : : * Returns the type name for the output class. 373 : : */ 374 : 0 : static QString typeName() { return QStringLiteral( "outputFolder" ); } 375 : 0 : QString type() const override { return typeName(); } 376 : : 377 : : }; 378 : : 379 : : /** 380 : : * \class QgsProcessingOutputFile 381 : : * \ingroup core 382 : : * \brief A file output for processing algorithms. 383 : : * \since QGIS 3.0 384 : : */ 385 : 0 : class CORE_EXPORT QgsProcessingOutputFile : public QgsProcessingOutputDefinition 386 : : { 387 : : public: 388 : : 389 : : /** 390 : : * Constructor for QgsProcessingOutputFile. 391 : : */ 392 : : QgsProcessingOutputFile( const QString &name, const QString &description = QString() ); 393 : : 394 : : /** 395 : : * Returns the type name for the output class. 396 : : */ 397 : 0 : static QString typeName() { return QStringLiteral( "outputFile" ); } 398 : 0 : QString type() const override { return typeName(); } 399 : : 400 : : }; 401 : : 402 : : /** 403 : : * \class QgsProcessingOutputConditionalBranch 404 : : * \ingroup core 405 : : * \brief A conditional branch output for processing algorithms, which represents a possible model logic 406 : : * flow which branches out from this algorithm. 407 : : * \since QGIS 3.14 408 : : */ 409 : 0 : class CORE_EXPORT QgsProcessingOutputConditionalBranch : public QgsProcessingOutputDefinition 410 : : { 411 : : public: 412 : : 413 : : /** 414 : : * Constructor for QgsProcessingOutputConditionalBranch. 415 : : */ 416 : : QgsProcessingOutputConditionalBranch( const QString &name, const QString &description = QString() ); 417 : : 418 : : /** 419 : : * Returns the type name for the output class. 420 : : */ 421 : 0 : static QString typeName() { return QStringLiteral( "outputBranch" ); } 422 : 0 : QString type() const override { return typeName(); } 423 : : 424 : : }; 425 : : 426 : : 427 : : #endif // QGSPROCESSINGOUTPUTS_H 428 : : 429 : :