Exemple #1
0
def initializeParameters():
    from processing.core.Processing import Processing

    Processing.registerParameter(PARAMETER_MAP_LAYER, QCoreApplication.translate('Processing', 'Map Layer'),
                                 QgsProcessingParameterMapLayer,
                                 description=QCoreApplication.translate('Processing', 'A generic map layer parameter, which accepts either vector or raster layers.'))
    Processing.registerParameter(PARAMETER_BAND, QCoreApplication.translate('Processing', 'Raster Band'),
                                 QgsProcessingParameterBand,
                                 description=QCoreApplication.translate('Processing', 'A raster band parameter, for selecting an existing band from a raster source.'))
    Processing.registerParameter(PARAMETER_EXPRESSION, QCoreApplication.translate('Processing', 'Expression'),
                                 QgsProcessingParameterExpression,
                                 description=QCoreApplication.translate('Processing', 'A QGIS expression parameter, which presents an expression builder widget to users.'))
    Processing.registerParameter(PARAMETER_RASTER, QCoreApplication.translate('Processing', 'Raster Layer'), QgsProcessingParameterRasterLayer,
                                 description=QCoreApplication.translate('Processing', 'A raster layer parameter.'))
    Processing.registerParameter(PARAMETER_TABLE, QCoreApplication.translate('Processing', 'Vector Layer'), QgsProcessingParameterVectorLayer,
                                 description=QCoreApplication.translate('Processing', 'A vector feature parameter, e.g. for algorithms which operate on the features within a layer.'))
    Processing.registerParameter(PARAMETER_BOOLEAN, QCoreApplication.translate('Processing', 'Boolean'), QgsProcessingParameterBoolean,
                                 description=QCoreApplication.translate('Processing', 'A boolean parameter, for true/false values.'))
    Processing.registerParameter(PARAMETER_CRS, QCoreApplication.translate('Processing', 'CRS'), QgsProcessingParameterCrs,
                                 description=QCoreApplication.translate('Processing', 'A coordinate reference system (CRS) input parameter.'))
    Processing.registerParameter(PARAMETER_RANGE, QCoreApplication.translate('Processing', 'Range'), QgsProcessingParameterRange)
    Processing.registerParameter(PARAMETER_POINT, QCoreApplication.translate('Processing', 'Point'), QgsProcessingParameterPoint,
                                 description=QCoreApplication.translate('Processing', 'A geographic point parameter.'))
    Processing.registerParameter(PARAMETER_ENUM, QCoreApplication.translate('Processing', 'Enum'), QgsProcessingParameterEnum, exposeToModeller=False)
    Processing.registerParameter(PARAMETER_EXTENT, QCoreApplication.translate('Processing', 'Extent'), QgsProcessingParameterExtent,
                                 description=QCoreApplication.translate('Processing', 'A map extent parameter.'))
    Processing.registerParameter(PARAMETER_MATRIX, QCoreApplication.translate('Processing', 'Matrix'), QgsProcessingParameterMatrix)
    Processing.registerParameter(PARAMETER_FILE, QCoreApplication.translate('Processing', 'File'), QgsProcessingParameterFile,
                                 description=QCoreApplication.translate('Processing', 'A file parameter, for use with non-map layer file sources.'))
    Processing.registerParameter(PARAMETER_TABLE_FIELD, QCoreApplication.translate('Processing', 'Field'), QgsProcessingParameterField,
                                 description=QCoreApplication.translate('Processing', 'A vector field parameter, for selecting an existing field from a vector source.'))
    Processing.registerParameter(PARAMETER_VECTOR_DESTINATION, QCoreApplication.translate('Processing', 'Vector Destination'), QgsProcessingParameterVectorDestination, exposeToModeller=False)
    Processing.registerParameter(PARAMETER_FILE_DESTINATION, QCoreApplication.translate('Processing', 'File Destination'), QgsProcessingParameterFileDestination, exposeToModeller=False)
    Processing.registerParameter(PARAMETER_FOLDER_DESTINATION, QCoreApplication.translate('Processing', 'Folder Destination'), QgsProcessingParameterFolderDestination, exposeToModeller=False)
    Processing.registerParameter(PARAMETER_RASTER_DESTINATION, QCoreApplication.translate('Processing', 'Raster Destination'), QgsProcessingParameterRasterDestination, exposeToModeller=False)
    Processing.registerParameter(PARAMETER_STRING, QCoreApplication.translate('Processing', 'String'), QgsProcessingParameterString,
                                 description=QCoreApplication.translate('Processing', 'A freeform string parameter.'))
    Processing.registerParameter(PARAMETER_MULTIPLE, QCoreApplication.translate('Processing', 'Multiple Layers'), QgsProcessingParameterMultipleLayers,
                                 description=QCoreApplication.translate('Processing', 'An input allowing selection of multiple sources, including multiple map layers or file sources.'))
    Processing.registerParameter(PARAMETER_VECTOR, QCoreApplication.translate('Processing', 'Feature Source'), QgsProcessingParameterFeatureSource)
    Processing.registerParameter(PARAMETER_NUMBER, QCoreApplication.translate('Processing', 'Number'), QgsProcessingParameterNumber,
                                 description=QCoreApplication.translate('Processing', 'A numeric parameter, including float or integer values.'))
    Processing.registeredParameters()
Exemple #2
0
        def _dropEvent(event):
            from processing.core.Processing import Processing

            if event.mimeData().hasText():
                itemId = event.mimeData().text()
                if itemId in Processing.registeredParameters():
                    self.addInputOfType(itemId, event.pos())
                else:
                    alg = QgsApplication.processingRegistry().createAlgorithmById(itemId)
                    if alg is not None:
                        self._addAlgorithm(alg, event.pos())
                event.accept()
            else:
                event.ignore()
Exemple #3
0
        def _dropEvent(event):
            from processing.core.Processing import Processing

            if event.mimeData().hasText():
                itemId = event.mimeData().text()
                if itemId in Processing.registeredParameters():
                    self.addInputOfType(itemId, event.pos())
                else:
                    alg = QgsApplication.processingRegistry(
                    ).createAlgorithmById(itemId)
                    if alg is not None:
                        self._addAlgorithm(alg, event.pos())
                event.accept()
            else:
                event.ignore()
Exemple #4
0
    def fillInputsTree(self):
        from processing.core.Processing import Processing

        icon = QIcon(os.path.join(pluginPath, 'images', 'input.svg'))
        parametersItem = QTreeWidgetItem()
        parametersItem.setText(0, self.tr('Parameters'))
        sortedParams = sorted(Processing.registeredParameters().items())
        for param in sortedParams:
            if param[1]['exposeToModeller']:
                paramItem = QTreeWidgetItem()
                paramItem.setText(0, param[1]['name'])
                paramItem.setData(0, Qt.UserRole, param[0])
                paramItem.setIcon(0, icon)
                paramItem.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable | Qt.ItemIsDragEnabled)
                paramItem.setToolTip(0, param[1]['description'])
                parametersItem.addChild(paramItem)
        self.inputsTree.addTopLevelItem(parametersItem)
        parametersItem.setExpanded(True)
Exemple #5
0
    def fillInputsTree(self):
        from processing.core.Processing import Processing

        icon = QIcon(os.path.join(pluginPath, 'images', 'input.svg'))
        parametersItem = QTreeWidgetItem()
        parametersItem.setText(0, self.tr('Parameters'))
        sortedParams = sorted(Processing.registeredParameters().items())
        for param in sortedParams:
            if param[1]['exposeToModeller']:
                paramItem = QTreeWidgetItem()
                paramItem.setText(0, param[1]['name'])
                paramItem.setData(0, Qt.UserRole, param[0])
                paramItem.setIcon(0, icon)
                paramItem.setFlags(Qt.ItemIsEnabled | Qt.ItemIsSelectable
                                   | Qt.ItemIsDragEnabled)
                paramItem.setToolTip(0, param[1]['description'])
                parametersItem.addChild(paramItem)
        self.inputsTree.addTopLevelItem(parametersItem)
        parametersItem.setExpanded(True)
Exemple #6
0
def initializeParameters():
    from processing.core.Processing import Processing

    Processing.registerParameter(
        PARAMETER_MAP_LAYER,
        QCoreApplication.translate('Processing', 'Map Layer'),
        QgsProcessingParameterMapLayer,
        description=QCoreApplication.translate(
            'Processing',
            'A generic map layer parameter, which accepts either vector or raster layers.'
        ))
    Processing.registerParameter(
        PARAMETER_BAND,
        QCoreApplication.translate('Processing', 'Raster Band'),
        QgsProcessingParameterBand,
        description=QCoreApplication.translate(
            'Processing',
            'A raster band parameter, for selecting an existing band from a raster source.'
        ))
    Processing.registerParameter(
        PARAMETER_EXPRESSION,
        QCoreApplication.translate('Processing', 'Expression'),
        QgsProcessingParameterExpression,
        description=QCoreApplication.translate(
            'Processing',
            'A QGIS expression parameter, which presents an expression builder widget to users.'
        ))
    Processing.registerParameter(
        PARAMETER_RASTER,
        QCoreApplication.translate('Processing', 'Raster Layer'),
        QgsProcessingParameterRasterLayer,
        description=QCoreApplication.translate('Processing',
                                               'A raster layer parameter.'))
    Processing.registerParameter(
        PARAMETER_TABLE,
        QCoreApplication.translate('Processing', 'Vector Layer'),
        QgsProcessingParameterVectorLayer,
        description=QCoreApplication.translate(
            'Processing',
            'A vector feature parameter, e.g. for algorithms which operate on the features within a layer.'
        ))
    Processing.registerParameter(
        PARAMETER_BOOLEAN,
        QCoreApplication.translate('Processing', 'Boolean'),
        QgsProcessingParameterBoolean,
        description=QCoreApplication.translate(
            'Processing', 'A boolean parameter, for true/false values.'))
    Processing.registerParameter(
        PARAMETER_CRS,
        QCoreApplication.translate('Processing', 'CRS'),
        QgsProcessingParameterCrs,
        description=QCoreApplication.translate(
            'Processing',
            'A coordinate reference system (CRS) input parameter.'))
    Processing.registerParameter(
        PARAMETER_RANGE, QCoreApplication.translate('Processing', 'Range'),
        QgsProcessingParameterRange)
    Processing.registerParameter(PARAMETER_POINT,
                                 QCoreApplication.translate(
                                     'Processing', 'Point'),
                                 QgsProcessingParameterPoint,
                                 description=QCoreApplication.translate(
                                     'Processing',
                                     'A geographic point parameter.'))
    Processing.registerParameter(PARAMETER_ENUM,
                                 QCoreApplication.translate(
                                     'Processing', 'Enum'),
                                 QgsProcessingParameterEnum,
                                 exposeToModeller=False)
    Processing.registerParameter(
        PARAMETER_EXTENT,
        QCoreApplication.translate('Processing', 'Extent'),
        QgsProcessingParameterExtent,
        description=QCoreApplication.translate('Processing',
                                               'A map extent parameter.'))
    Processing.registerParameter(
        PARAMETER_MATRIX, QCoreApplication.translate('Processing', 'Matrix'),
        QgsProcessingParameterMatrix)
    Processing.registerParameter(
        PARAMETER_FILE,
        QCoreApplication.translate('Processing', 'File'),
        QgsProcessingParameterFile,
        description=QCoreApplication.translate(
            'Processing',
            'A file parameter, for use with non-map layer file sources.'))
    Processing.registerParameter(
        PARAMETER_TABLE_FIELD,
        QCoreApplication.translate('Processing', 'Field'),
        QgsProcessingParameterField,
        description=QCoreApplication.translate(
            'Processing',
            'A vector field parameter, for selecting an existing field from a vector source.'
        ))
    Processing.registerParameter(PARAMETER_VECTOR_DESTINATION,
                                 QCoreApplication.translate(
                                     'Processing', 'Vector Destination'),
                                 QgsProcessingParameterVectorDestination,
                                 exposeToModeller=False)
    Processing.registerParameter(PARAMETER_FILE_DESTINATION,
                                 QCoreApplication.translate(
                                     'Processing', 'File Destination'),
                                 QgsProcessingParameterFileDestination,
                                 exposeToModeller=False)
    Processing.registerParameter(PARAMETER_FOLDER_DESTINATION,
                                 QCoreApplication.translate(
                                     'Processing', 'Folder Destination'),
                                 QgsProcessingParameterFolderDestination,
                                 exposeToModeller=False)
    Processing.registerParameter(PARAMETER_RASTER_DESTINATION,
                                 QCoreApplication.translate(
                                     'Processing', 'Raster Destination'),
                                 QgsProcessingParameterRasterDestination,
                                 exposeToModeller=False)
    Processing.registerParameter(
        PARAMETER_STRING,
        QCoreApplication.translate('Processing', 'String'),
        QgsProcessingParameterString,
        description=QCoreApplication.translate('Processing',
                                               'A freeform string parameter.'))
    Processing.registerParameter(
        PARAMETER_MULTIPLE,
        QCoreApplication.translate('Processing', 'Multiple Layers'),
        QgsProcessingParameterMultipleLayers,
        description=QCoreApplication.translate(
            'Processing',
            'An input allowing selection of multiple sources, including multiple map layers or file sources.'
        ))
    Processing.registerParameter(
        PARAMETER_VECTOR,
        QCoreApplication.translate('Processing', 'Feature Source'),
        QgsProcessingParameterFeatureSource)
    Processing.registerParameter(
        PARAMETER_NUMBER,
        QCoreApplication.translate('Processing', 'Number'),
        QgsProcessingParameterNumber,
        description=QCoreApplication.translate(
            'Processing',
            'A numeric parameter, including float or integer values.'))
    Processing.registeredParameters()
Exemple #7
0
    def accept(self):
        description = str(self.nameTextBox.text())
        if description.strip() == '':
            QMessageBox.warning(self, self.tr('Unable to define parameter'),
                                self.tr('Invalid parameter name'))
            return
        if self.param is None:
            validChars = \
                'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
            safeName = ''.join(c for c in description if c in validChars)
            name = safeName.lower()
            i = 2
            while self.alg.parameterDefinition(name):
                name = safeName.lower() + str(i)
                i += 1
        else:
            name = self.param.name()
        if (self.paramType == parameters.PARAMETER_BOOLEAN
                or isinstance(self.param, QgsProcessingParameterBoolean)):
            self.param = QgsProcessingParameterBoolean(name, description,
                                                       self.state.isChecked())
        elif (self.paramType == parameters.PARAMETER_TABLE_FIELD
              or isinstance(self.param, QgsProcessingParameterField)):
            if self.parentCombo.currentIndex() < 0:
                QMessageBox.warning(
                    self, self.tr('Unable to define parameter'),
                    self.tr('Wrong or missing parameter values'))
                return
            parent = self.parentCombo.currentData()
            datatype = self.datatypeCombo.currentData()
            default = self.defaultTextBox.text()
            if not default:
                default = None
            self.param = QgsProcessingParameterField(
                name,
                description,
                defaultValue=default,
                parentLayerParameterName=parent,
                type=datatype,
                allowMultiple=self.multipleCheck.isChecked())
        elif (self.paramType == parameters.PARAMETER_BAND
              or isinstance(self.param, QgsProcessingParameterBand)):
            if self.parentCombo.currentIndex() < 0:
                QMessageBox.warning(
                    self, self.tr('Unable to define parameter'),
                    self.tr('Wrong or missing parameter values'))
                return
            parent = self.parentCombo.currentData()
            self.param = QgsProcessingParameterBand(name, description, None,
                                                    parent)
        elif (self.paramType == parameters.PARAMETER_MAP_LAYER
              or isinstance(self.param, QgsProcessingParameterMapLayer)):
            self.param = QgsProcessingParameterMapLayer(name, description)
        elif (self.paramType == parameters.PARAMETER_RASTER
              or isinstance(self.param, QgsProcessingParameterRasterLayer)):
            self.param = QgsProcessingParameterRasterLayer(name, description)
        elif (self.paramType == parameters.PARAMETER_TABLE
              or isinstance(self.param, QgsProcessingParameterVectorLayer)):
            self.param = QgsProcessingParameterVectorLayer(
                name, description, [self.shapetypeCombo.currentData()])
        elif (self.paramType == parameters.PARAMETER_VECTOR
              or isinstance(self.param, QgsProcessingParameterFeatureSource)):
            self.param = QgsProcessingParameterFeatureSource(
                name, description, [self.shapetypeCombo.currentData()])
        elif (self.paramType == parameters.PARAMETER_MULTIPLE
              or isinstance(self.param, QgsProcessingParameterMultipleLayers)):
            self.param = QgsProcessingParameterMultipleLayers(
                name, description, self.datatypeCombo.currentData())
        elif (self.paramType == parameters.PARAMETER_NUMBER
              or isinstance(self.param, QgsProcessingParameterNumber)):
            try:
                self.param = QgsProcessingParameterNumber(
                    name, description, QgsProcessingParameterNumber.Double,
                    self.defaultTextBox.text())
                vmin = self.minTextBox.text().strip()
                if not vmin == '':
                    self.param.setMinimum(float(vmin))
                vmax = self.maxTextBox.text().strip()
                if not vmax == '':
                    self.param.setMaximum(float(vmax))
            except:
                QMessageBox.warning(
                    self, self.tr('Unable to define parameter'),
                    self.tr('Wrong or missing parameter values'))
                return
        elif (self.paramType == parameters.PARAMETER_EXPRESSION
              or isinstance(self.param, QgsProcessingParameterExpression)):
            parent = self.parentCombo.currentData()
            self.param = QgsProcessingParameterExpression(
                name, description, str(self.defaultEdit.expression()), parent)
        elif (self.paramType == parameters.PARAMETER_STRING
              or isinstance(self.param, QgsProcessingParameterString)):
            self.param = QgsProcessingParameterString(
                name, description, str(self.defaultTextBox.text()))
        elif (self.paramType == parameters.PARAMETER_EXTENT
              or isinstance(self.param, QgsProcessingParameterExtent)):
            self.param = QgsProcessingParameterExtent(name, description)
        elif (self.paramType == parameters.PARAMETER_FILE
              or isinstance(self.param, QgsProcessingParameterFile)):
            isFolder = self.fileFolderCombo.currentIndex() == 1
            self.param = QgsProcessingParameterFile(
                name, description, QgsProcessingParameterFile.Folder
                if isFolder else QgsProcessingParameterFile.File)
        elif (self.paramType == parameters.PARAMETER_POINT
              or isinstance(self.param, QgsProcessingParameterPoint)):
            self.param = QgsProcessingParameterPoint(
                name, description, str(self.defaultTextBox.text()))
        elif (self.paramType == parameters.PARAMETER_CRS
              or isinstance(self.param, QgsProcessingParameterCrs)):
            self.param = QgsProcessingParameterCrs(
                name, description,
                self.selector.crs().authid())
        else:
            from processing.core.Processing import Processing

            param = Processing.registeredParameters()[self.paramType]

            self.param = param['parameter'](name, description, None)
            self.param.setMetadata(param['metadata'])

        if not self.requiredCheck.isChecked():
            self.param.setFlags(
                self.param.flags()
                | QgsProcessingParameterDefinition.FlagOptional)

        settings = QgsSettings()
        settings.setValue(
            "/Processing/modelParametersDefinitionDialogGeometry",
            self.saveGeometry())

        QDialog.accept(self)
    def accept(self):
        description = str(self.nameTextBox.text())
        if description.strip() == '':
            QMessageBox.warning(self, self.tr('Unable to define parameter'),
                                self.tr('Invalid parameter name'))
            return
        if self.param is None:
            validChars = \
                'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
            safeName = ''.join(c for c in description if c in validChars)
            name = safeName.lower()
            i = 2
            while self.alg.parameterDefinition(name):
                name = safeName.lower() + str(i)
                i += 1
        else:
            name = self.param.name()
        if (self.paramType == parameters.PARAMETER_BOOLEAN or
                isinstance(self.param, QgsProcessingParameterBoolean)):
            self.param = QgsProcessingParameterBoolean(name, description, self.state.isChecked())
        elif (self.paramType == parameters.PARAMETER_TABLE_FIELD or
              isinstance(self.param, QgsProcessingParameterField)):
            if self.parentCombo.currentIndex() < 0:
                QMessageBox.warning(self, self.tr('Unable to define parameter'),
                                    self.tr('Wrong or missing parameter values'))
                return
            parent = self.parentCombo.currentData()
            datatype = self.datatypeCombo.currentData()
            default = self.defaultTextBox.text()
            if not default:
                default = None
            self.param = QgsProcessingParameterField(name, description, defaultValue=default,
                                                     parentLayerParameterName=parent, type=datatype,
                                                     allowMultiple=self.multipleCheck.isChecked())
        elif (self.paramType == parameters.PARAMETER_BAND or
              isinstance(self.param, QgsProcessingParameterBand)):
            if self.parentCombo.currentIndex() < 0:
                QMessageBox.warning(self, self.tr('Unable to define parameter'),
                                    self.tr('Wrong or missing parameter values'))
                return
            parent = self.parentCombo.currentData()
            self.param = QgsProcessingParameterBand(name, description, None, parent)
        elif (self.paramType == parameters.PARAMETER_MAP_LAYER or
              isinstance(self.param, QgsProcessingParameterMapLayer)):
            self.param = QgsProcessingParameterMapLayer(
                name, description)
        elif (self.paramType == parameters.PARAMETER_RASTER or
              isinstance(self.param, QgsProcessingParameterRasterLayer)):
            self.param = QgsProcessingParameterRasterLayer(
                name, description)
        elif (self.paramType == parameters.PARAMETER_TABLE or
              isinstance(self.param, QgsProcessingParameterVectorLayer)):
            self.param = QgsProcessingParameterVectorLayer(
                name, description,
                [self.shapetypeCombo.currentData()])
        elif (self.paramType == parameters.PARAMETER_VECTOR or
              isinstance(self.param, QgsProcessingParameterFeatureSource)):
            self.param = QgsProcessingParameterFeatureSource(
                name, description,
                [self.shapetypeCombo.currentData()])
        elif (self.paramType == parameters.PARAMETER_MULTIPLE or
              isinstance(self.param, QgsProcessingParameterMultipleLayers)):
            self.param = QgsProcessingParameterMultipleLayers(
                name, description,
                self.datatypeCombo.currentData())
        elif (self.paramType == parameters.PARAMETER_NUMBER or
              isinstance(self.param, QgsProcessingParameterNumber)):
            try:
                self.param = QgsProcessingParameterNumber(name, description, QgsProcessingParameterNumber.Double,
                                                          self.defaultTextBox.text())
                vmin = self.minTextBox.text().strip()
                if not vmin == '':
                    self.param.setMinimum(float(vmin))
                vmax = self.maxTextBox.text().strip()
                if not vmax == '':
                    self.param.setMaximum(float(vmax))
            except:
                QMessageBox.warning(self, self.tr('Unable to define parameter'),
                                    self.tr('Wrong or missing parameter values'))
                return
        elif (self.paramType == parameters.PARAMETER_EXPRESSION or
              isinstance(self.param, QgsProcessingParameterExpression)):
            parent = self.parentCombo.currentData()
            self.param = QgsProcessingParameterExpression(name, description,
                                                          str(self.defaultEdit.expression()),
                                                          parent)
        elif (self.paramType == parameters.PARAMETER_STRING or
              isinstance(self.param, QgsProcessingParameterString)):
            self.param = QgsProcessingParameterString(name, description,
                                                      str(self.defaultTextBox.text()))
        elif (self.paramType == parameters.PARAMETER_EXTENT or
              isinstance(self.param, QgsProcessingParameterExtent)):
            self.param = QgsProcessingParameterExtent(name, description)
        elif (self.paramType == parameters.PARAMETER_FILE or
              isinstance(self.param, QgsProcessingParameterFile)):
            isFolder = self.fileFolderCombo.currentIndex() == 1
            self.param = QgsProcessingParameterFile(name, description,
                                                    QgsProcessingParameterFile.Folder if isFolder else QgsProcessingParameterFile.File)
        elif (self.paramType == parameters.PARAMETER_POINT or
              isinstance(self.param, QgsProcessingParameterPoint)):
            self.param = QgsProcessingParameterPoint(name, description,
                                                     str(self.defaultTextBox.text()))
        elif (self.paramType == parameters.PARAMETER_CRS or
              isinstance(self.param, QgsProcessingParameterCrs)):
            self.param = QgsProcessingParameterCrs(name, description, self.selector.crs().authid())
        else:
            from processing.core.Processing import Processing

            param = Processing.registeredParameters()[self.paramType]

            self.param = param['parameter'](name, description, None)
            self.param.setMetadata(param['metadata'])

        if not self.requiredCheck.isChecked():
            self.param.setFlags(self.param.flags() | QgsProcessingParameterDefinition.FlagOptional)

        settings = QgsSettings()
        settings.setValue("/Processing/modelParametersDefinitionDialogGeometry", self.saveGeometry())

        QDialog.accept(self)