Move flags (hide from toolbox, etc) to QgsProcessingAlgorithm

This commit is contained in:
Nyall Dawson 2017-03-29 15:00:20 +10:00
parent 6987d7b37c
commit e506ceb1f8
15 changed files with 94 additions and 49 deletions

View File

@ -6,6 +6,15 @@ class QgsProcessingAlgorithm
public:
enum Flag
{
FlagHideFromToolbox,
FlagHideFromModeler,
FlagSupportsBatch,
FlagDeprecated,
};
typedef QFlags<QgsProcessingAlgorithm::Flag> Flags;
QgsProcessingAlgorithm();
virtual ~QgsProcessingAlgorithm();
@ -15,6 +24,6 @@ class QgsProcessingAlgorithm
virtual QIcon icon() const;
virtual QString svgIconPath() const;
virtual QString group() const;
virtual Flags flags() const;
};
QFlags<QgsProcessingAlgorithm::Flag> operator|(QgsProcessingAlgorithm::Flag f1, QFlags<QgsProcessingAlgorithm::Flag> f2);

View File

@ -32,7 +32,8 @@ import os
import time
from qgis.PyQt.QtGui import QIcon
from qgis.core import QgsRasterLayer
from qgis.core import (QgsProcessingAlgorithm,
QgsRasterLayer)
from processing.core.GeoAlgorithm import GeoAlgorithm
from processing.core.parameters import ParameterMultipleInput
@ -55,13 +56,12 @@ class nviz7(GeoAlgorithm):
GRASS_REGION_EXTENT_PARAMETER = 'GRASS_REGION_PARAMETER'
GRASS_REGION_CELLSIZE_PARAMETER = 'GRASS_REGION_CELLSIZE_PARAMETER'
def __init__(self):
GeoAlgorithm.__init__(self)
self.showInModeler = False
def icon(self):
return QIcon(os.path.join(pluginPath, 'images', 'grass.png'))
def flags(self):
return QgsProcessingAlgorithm.FlagHideFromModeler
def name(self):
return 'nviz7'

View File

@ -32,7 +32,8 @@ import codecs
from qgis.PyQt.QtGui import QIcon
from qgis.core import (QgsStatisticalSummary,
QgsFeatureRequest)
QgsFeatureRequest,
QgsProcessingAlgorithm)
from processing.core.GeoAlgorithm import GeoAlgorithm
from processing.core.parameters import ParameterTable
@ -67,10 +68,9 @@ class BasicStatisticsNumbers(GeoAlgorithm):
NULLVALUES = 'NULLVALUES'
IQR = 'IQR'
def __init__(self):
GeoAlgorithm.__init__(self)
def flags(self):
# this algorithm is deprecated - use BasicStatistics instead
self.showInToolbox = False
return QgsProcessingAlgorithm.FlagDeprecated
def icon(self):
return QIcon(os.path.join(pluginPath, 'images', 'ftools', 'basic_statistics.png'))

View File

@ -31,7 +31,8 @@ import codecs
from qgis.PyQt.QtGui import QIcon
from qgis.core import (QgsStringStatisticalSummary,
from qgis.core import (QgsProcessingAlgorithm,
QgsStringStatisticalSummary,
QgsFeatureRequest)
from processing.core.GeoAlgorithm import GeoAlgorithm
@ -60,10 +61,9 @@ class BasicStatisticsStrings(GeoAlgorithm):
MIN_VALUE = 'MIN_VALUE'
MAX_VALUE = 'MAX_VALUE'
def __init__(self):
GeoAlgorithm.__init__(self)
def flags(self):
# this algorithm is deprecated - use BasicStatistics instead
self.showInToolbox = False
return QgsProcessingAlgorithm.FlagDeprecated
def icon(self):
return QIcon(os.path.join(pluginPath, 'images', 'ftools', 'basic_statistics.png'))

View File

@ -29,7 +29,10 @@ import os
from qgis.PyQt.QtGui import QIcon
from qgis.core import QgsGeometry, QgsFeature, QgsWkbTypes
from qgis.core import (QgsProcessingAlgorithm,
QgsGeometry,
QgsFeature,
QgsWkbTypes)
from processing.core.GeoAlgorithm import GeoAlgorithm
from processing.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
@ -45,10 +48,9 @@ class PolygonCentroids(GeoAlgorithm):
INPUT_LAYER = 'INPUT_LAYER'
OUTPUT_LAYER = 'OUTPUT_LAYER'
def __init__(self):
GeoAlgorithm.__init__(self)
def flags(self):
# this algorithm is deprecated - use Centroids instead
self.showInToolbox = False
return QgsProcessingAlgorithm.FlagDeprecated
def icon(self):
return QIcon(os.path.join(pluginPath, 'images', 'ftools', 'centroids.png'))

View File

@ -27,7 +27,8 @@ __copyright__ = '(C) 2014, Bernhard Ströbl'
__revision__ = '$Format:%H$'
from qgis.core import (QgsApplication,
from qgis.core import (QgsProcessingAlgorithm,
QgsApplication,
QgsFeatureRequest,
QgsFeature,
QgsGeometry,
@ -47,10 +48,9 @@ class SplitLinesWithLines(GeoAlgorithm):
OUTPUT = 'OUTPUT'
def __init__(self):
GeoAlgorithm.__init__(self)
def flags(self):
# this algorithm is deprecated - use SplitWithLines instead
self.showInToolbox = False
return QgsProcessingAlgorithm.FlagDeprecated
def icon(self):
return QgsApplication.getThemeIcon("/providerQgis.svg")

View File

@ -31,7 +31,14 @@ import math
from qgis.PyQt.QtGui import QIcon
from qgis.PyQt.QtCore import QVariant
from qgis.core import QgsRectangle, QgsFields, QgsField, QgsFeature, QgsGeometry, QgsPoint, QgsWkbTypes
from qgis.core import (QgsProcessingAlgorithm,
QgsRectangle,
QgsFields,
QgsField,
QgsFeature,
QgsGeometry,
QgsPoint,
QgsWkbTypes)
from qgis.utils import iface
from processing.core.GeoAlgorithm import GeoAlgorithm
@ -50,10 +57,9 @@ class VectorGridLines(GeoAlgorithm):
STEP_Y = 'STEP_Y'
OUTPUT = 'OUTPUT'
def __init__(self):
GeoAlgorithm.__init__(self)
def flags(self):
# this algorithm is deprecated - use GridLine instead
self.showInToolbox = False
return QgsProcessingAlgorithm.FlagDeprecated
def icon(self):
return QIcon(os.path.join(pluginPath, 'images', 'ftools', 'vector_grid.png'))

View File

@ -31,7 +31,14 @@ import math
from qgis.PyQt.QtGui import QIcon
from qgis.PyQt.QtCore import QVariant
from qgis.core import QgsRectangle, QgsFields, QgsField, QgsFeature, QgsGeometry, QgsPoint, QgsWkbTypes
from qgis.core import (QgsProcessingAlgorithm,
QgsRectangle,
QgsFields,
QgsField,
QgsFeature,
QgsGeometry,
QgsPoint,
QgsWkbTypes)
from qgis.utils import iface
from processing.core.GeoAlgorithm import GeoAlgorithm
@ -50,10 +57,9 @@ class VectorGridPolygons(GeoAlgorithm):
STEP_Y = 'STEP_Y'
OUTPUT = 'OUTPUT'
def __init__(self):
GeoAlgorithm.__init__(self)
def flags(self):
# this algorithm is deprecated - use GridPolygon instead
self.showInToolbox = False
return QgsProcessingAlgorithm.FlagDeprecated
def icon(self):
return QIcon(os.path.join(pluginPath, 'images', 'ftools', 'vector_grid.png'))

View File

@ -65,14 +65,6 @@ class GeoAlgorithm(QgsProcessingAlgorithm):
# loading output layers
self.crs = None
# Change any of the following if your algorithm should not
# appear in the toolbox or modeler
self.showInToolbox = True
self.showInModeler = True
# False if it should not be run a a batch process
self.canRunInBatchMode = True
# To be set by the provider when it loads the algorithm
self.provider = None

View File

@ -33,7 +33,8 @@ from qgis.PyQt import uic
from qgis.PyQt.QtCore import Qt, QCoreApplication
from qgis.PyQt.QtWidgets import QMenu, QAction, QTreeWidgetItem, QLabel, QMessageBox
from qgis.utils import iface
from qgis.core import QgsApplication
from qgis.core import (QgsApplication,
QgsProcessingAlgorithm)
from processing.gui.Postprocessing import handleAlgorithmResults
from processing.core.Processing import Processing
@ -193,7 +194,7 @@ class ProcessingToolbox(BASE, WIDGET):
executeAction = QAction(self.tr('Execute'), self.algorithmTree)
executeAction.triggered.connect(self.executeAlgorithm)
popupmenu.addAction(executeAction)
if alg.canRunInBatchMode:
if alg.flags() & QgsProcessingAlgorithm.FlagSupportsBatch:
executeBatchAction = QAction(
self.tr('Execute as batch process'),
self.algorithmTree)
@ -398,7 +399,7 @@ class TreeProviderItem(QTreeWidgetItem):
# Add algorithms
for alg in algs:
if not alg.showInToolbox:
if alg.flags() & QgsProcessingAlgorithm.FlagHideFromToolbox:
continue
if alg.group() in groups:
groupItem = groups[alg.group()]

View File

@ -36,7 +36,9 @@ from qgis.PyQt.QtWidgets import QGraphicsView, QTreeWidget, QMessageBox, QFileDi
from qgis.PyQt.QtGui import QIcon, QImage, QPainter, QKeySequence
from qgis.PyQt.QtSvg import QSvgGenerator
from qgis.PyQt.QtPrintSupport import QPrinter
from qgis.core import QgsApplication, QgsSettings
from qgis.core import (QgsApplication,
QgsProcessingAlgorithm,
QgsSettings)
from qgis.gui import QgsMessageBar
from processing.core.ProcessingConfig import ProcessingConfig
from processing.core.ProcessingLog import ProcessingLog
@ -613,7 +615,7 @@ class ModelerDialog(BASE, WIDGET):
# Add algorithms
for alg in algs:
if not alg.showInModeler:
if alg.flags() & QgsProcessingAlgorithm.FlagHideFromModeler:
continue
if alg.commandLineName() == self.alg.commandLineName():
continue

View File

@ -27,6 +27,7 @@ __revision__ = '$Format:%H$'
import os
from qgis.core import (QgsProcessingAlgorithm)
from processing.core.GeoAlgorithm import GeoAlgorithm
from processing.core.alglist import algList
import json
@ -44,6 +45,9 @@ class PreconfiguredAlgorithm(GeoAlgorithm):
def group(self):
return self._group
def flags(self):
return QgsProcessingAlgorithm.FlagHideFromModeler
def getCopy(self):
newone = PreconfiguredAlgorithm(self.descriptionFile)
newone.outputs = []
@ -58,8 +62,6 @@ class PreconfiguredAlgorithm(GeoAlgorithm):
def defineCharacteristics(self):
self.name = self.description["name"]
self._group = self.description["group"]
self.canRunInBatchMode = False
self.showInModeler = False
def execute(self, feedback):
self.alg = algList.getAlgorithm(self.description["algname"]).getCopy()

View File

@ -31,6 +31,7 @@ import re
import json
from qgis.core import (QgsExpressionContextUtils,
QgsExpressionContext,
QgsProcessingAlgorithm,
QgsProject,
QgsApplication)
@ -59,6 +60,7 @@ class ScriptAlgorithm(GeoAlgorithm):
self._name = ''
self._display_name = ''
self._group = ''
self._flags = 0
self.script = script
self.allowEdit = True
@ -86,6 +88,9 @@ class ScriptAlgorithm(GeoAlgorithm):
def group(self):
return self._group
def flags(self):
return self._flags
def svgIconPath(self):
return QgsApplication.iconPath("processingScript.svg")
@ -107,8 +112,7 @@ class ScriptAlgorithm(GeoAlgorithm):
self.script += line
line = lines.readline()
if self._group == self.tr('[Test scripts]', 'ScriptAlgorithm'):
self.showInModeler = False
self.showInToolbox = False
self._flags = QgsProcessingAlgorithm.FlagHideFromToolbox | QgsProcessingAlgorithm.FlagHideFromModeler
def defineCharacteristicsFromScript(self):
lines = self.script.split('\n')
@ -139,7 +143,7 @@ class ScriptAlgorithm(GeoAlgorithm):
line = line.replace('#', '')
if line == "nomodeler":
self.showInModeler = False
self._flags = self._flags | QgsProcessingAlgorithm.FlagHideFromModeler
return
if line == "nocrswarning":
self.noCRSWarning = True

View File

@ -27,3 +27,8 @@ QString QgsProcessingAlgorithm::svgIconPath() const
{
return QgsApplication::iconPath( "processingAlgorithm.svg" );
}
QgsProcessingAlgorithm::Flags QgsProcessingAlgorithm::flags() const
{
return FlagSupportsBatch;
}

View File

@ -33,6 +33,16 @@ class CORE_EXPORT QgsProcessingAlgorithm
{
public:
//! Flags indicating how and when an algorithm operates and should be exposed to users
enum Flag
{
FlagHideFromToolbox = 1 << 1, //!< Algorithm should be hidden from the toolbox
FlagHideFromModeler = 1 << 2, //!< Algorithm should be hidden from the modeler
FlagSupportsBatch = 1 << 3, //!< Algorithm supports batch mode
FlagDeprecated = FlagHideFromToolbox | FlagHideFromModeler, //!< Algorithm is deprecated
};
Q_DECLARE_FLAGS( Flags, Flag )
/**
* Constructor for QgsProcessingAlgorithm.
*/
@ -82,7 +92,13 @@ class CORE_EXPORT QgsProcessingAlgorithm
*/
virtual QString group() const { return QString(); }
/**
* Returns the flags indicating how and when the algorithm operates and should be exposed to users.
*/
virtual Flags flags() const;
};
Q_DECLARE_OPERATORS_FOR_FLAGS( QgsProcessingAlgorithm::Flags )
#endif // QGSPROCESSINGALGORITHM_H