mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-18 00:03:05 -04:00
[processing] New c++ QgsProcessingRegistry class
Intended as a registry for the various processing components, including providers, algorithms and various parameters and outputs. Currently handles only registration of providers, as a step toward removing processing's algList (this requires first porting the algorithm class to c++) A QgsProcessingRegistry instance is attached to QgsApplication, and is retrieved by QgsApplication::processingRegistry()
This commit is contained in:
parent
bb24dfe245
commit
dca697b427
@ -260,6 +260,7 @@
|
|||||||
%Include layertree/qgslayertreeutils.sip
|
%Include layertree/qgslayertreeutils.sip
|
||||||
|
|
||||||
%Include processing/qgsprocessingprovider.sip
|
%Include processing/qgsprocessingprovider.sip
|
||||||
|
%Include processing/qgsprocessingregistry.sip
|
||||||
|
|
||||||
%Include raster/qgsbilinearrasterresampler.sip
|
%Include raster/qgsbilinearrasterresampler.sip
|
||||||
%Include raster/qgsbrightnesscontrastfilter.sip
|
%Include raster/qgsbrightnesscontrastfilter.sip
|
||||||
|
72
python/core/processing/qgsprocessingregistry.sip
Normal file
72
python/core/processing/qgsprocessingregistry.sip
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
/**
|
||||||
|
* \class QgsProcessingRegistry
|
||||||
|
* \ingroup core
|
||||||
|
* Registry for various processing components, including providers, algorithms
|
||||||
|
* and various parameters and outputs.
|
||||||
|
*
|
||||||
|
* QgsProcessingRegistry is not usually directly created, but rather accessed through
|
||||||
|
* QgsApplication::processingRegistry().
|
||||||
|
* \note added in QGIS 3.0
|
||||||
|
*/
|
||||||
|
class QgsProcessingRegistry : QObject
|
||||||
|
{
|
||||||
|
%TypeHeaderCode
|
||||||
|
#include <qgsprocessingregistry.h>
|
||||||
|
%End
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for QgsProcessingRegistry.
|
||||||
|
*/
|
||||||
|
QgsProcessingRegistry( QObject* parent /TransferThis/ = nullptr );
|
||||||
|
|
||||||
|
~QgsProcessingRegistry();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get list of available providers.
|
||||||
|
*/
|
||||||
|
QList<QgsProcessingProvider*> providers() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a processing provider to the registry. Ownership of the provider is transferred to the registry.
|
||||||
|
* Returns false if the provider could not be added (eg if a provider with a duplicate ID already exists
|
||||||
|
* in the registry).
|
||||||
|
* @see removeProvider()
|
||||||
|
*/
|
||||||
|
bool addProvider( QgsProcessingProvider* provider /Transfer/ );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a provider implementation from the registry (the provider object is deleted).
|
||||||
|
* Returns false if the provider could not be removed (eg provider does not exist in the registry).
|
||||||
|
* @see addProvider()
|
||||||
|
*/
|
||||||
|
bool removeProvider( QgsProcessingProvider* provider );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a provider implementation from the registry (the provider object is deleted).
|
||||||
|
* Returns false if the provider could not be removed (eg provider does not exist in the registry).
|
||||||
|
* @see addProvider()
|
||||||
|
*/
|
||||||
|
bool removeProvider( const QString& providerId );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a matching provider by provider ID.
|
||||||
|
*/
|
||||||
|
QgsProcessingProvider* providerById( const QString& id );
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
//! Emitted when a provider has been added to the registry.
|
||||||
|
void providerAdded( const QString& id );
|
||||||
|
|
||||||
|
//! Emitted when a provider is removed from the registry
|
||||||
|
void providerRemoved( const QString& id );
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
//! Registry cannot be copied
|
||||||
|
QgsProcessingRegistry( const QgsProcessingRegistry& other );
|
||||||
|
//! Registry cannot be copied
|
||||||
|
//QgsProcessingRegistry& operator=( const QgsProcessingRegistry& other );
|
||||||
|
};
|
@ -442,6 +442,13 @@ static void qtgui_UpdatePyArgv(PyObject *argvlist, int argc, char **argv)
|
|||||||
*/
|
*/
|
||||||
static QgsMessageLog* messageLog();
|
static QgsMessageLog* messageLog();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the application's processing registry, used for managing processing providers,
|
||||||
|
* algorithms, and various parameters and outputs.
|
||||||
|
* @note added in QGIS 3.0
|
||||||
|
*/
|
||||||
|
static QgsProcessingRegistry* processingRegistry();
|
||||||
|
|
||||||
%If(ANDROID)
|
%If(ANDROID)
|
||||||
//dummy method to workaround sip generation issue issue
|
//dummy method to workaround sip generation issue issue
|
||||||
bool x11EventFilter ( XEvent * event );
|
bool x11EventFilter ( XEvent * event );
|
||||||
|
@ -38,7 +38,8 @@ from qgis.PyQt.QtWidgets import QApplication
|
|||||||
from qgis.PyQt.QtGui import QCursor
|
from qgis.PyQt.QtGui import QCursor
|
||||||
|
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
from qgis.core import QgsMessageLog
|
from qgis.core import (QgsMessageLog,
|
||||||
|
QgsApplication)
|
||||||
|
|
||||||
import processing
|
import processing
|
||||||
from processing.core.AlgorithmProvider import AlgorithmProvider
|
from processing.core.AlgorithmProvider import AlgorithmProvider
|
||||||
@ -87,7 +88,7 @@ class Processing(object):
|
|||||||
"""Use this method to add algorithms from external providers.
|
"""Use this method to add algorithms from external providers.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if provider.id() in [p.id() for p in algList.providers]:
|
if provider.id() in [p.id() for p in QgsApplication.processingRegistry().providers()]:
|
||||||
return
|
return
|
||||||
try:
|
try:
|
||||||
provider.initializeSettings()
|
provider.initializeSettings()
|
||||||
@ -128,11 +129,6 @@ class Processing(object):
|
|||||||
# before I find out how to properly avoid that.
|
# before I find out how to properly avoid that.
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def providerById(id):
|
|
||||||
"""Returns the provider with the given id."""
|
|
||||||
return algList.providerById(id)
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def activateProvider(providerOrName, activate=True):
|
def activateProvider(providerOrName, activate=True):
|
||||||
provider_id = providerOrName.id() if isinstance(providerOrName, AlgorithmProvider) else providerOrName
|
provider_id = providerOrName.id() if isinstance(providerOrName, AlgorithmProvider) else providerOrName
|
||||||
@ -155,7 +151,7 @@ class Processing(object):
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def addScripts(folder):
|
def addScripts(folder):
|
||||||
Processing.initialize()
|
Processing.initialize()
|
||||||
provider = Processing.providerById("qgis")
|
provider = QgsApplication.processingRegistry().providerById("qgis")
|
||||||
scripts = ScriptUtils.loadFromFolder(folder)
|
scripts = ScriptUtils.loadFromFolder(folder)
|
||||||
# fix_print_with_import
|
# fix_print_with_import
|
||||||
print(scripts)
|
print(scripts)
|
||||||
@ -168,7 +164,7 @@ class Processing(object):
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def removeScripts(folder):
|
def removeScripts(folder):
|
||||||
provider = Processing.providerById("qgis")
|
provider = QgsApplication.processingRegistry().providerById("qgis")
|
||||||
for alg in provider.externalAlgs[::-1]:
|
for alg in provider.externalAlgs[::-1]:
|
||||||
path = os.path.dirname(alg.descriptionFile)
|
path = os.path.dirname(alg.descriptionFile)
|
||||||
if path == folder:
|
if path == folder:
|
||||||
|
@ -25,13 +25,13 @@ __copyright__ = '(C) 2016, Victor Olaya'
|
|||||||
|
|
||||||
__revision__ = '$Format:%H$'
|
__revision__ = '$Format:%H$'
|
||||||
|
|
||||||
|
from qgis.core import (QgsApplication,
|
||||||
|
QgsProcessingRegistry)
|
||||||
from qgis.PyQt.QtCore import QObject, pyqtSignal
|
from qgis.PyQt.QtCore import QObject, pyqtSignal
|
||||||
|
|
||||||
|
|
||||||
class AlgorithmList(QObject):
|
class AlgorithmList(QObject):
|
||||||
|
|
||||||
providerAdded = pyqtSignal(str)
|
|
||||||
providerRemoved = pyqtSignal(str)
|
|
||||||
providerUpdated = pyqtSignal(str)
|
providerUpdated = pyqtSignal(str)
|
||||||
|
|
||||||
# A dictionary of algorithms. Keys are names of providers
|
# A dictionary of algorithms. Keys are names of providers
|
||||||
@ -41,13 +41,10 @@ class AlgorithmList(QObject):
|
|||||||
providers = []
|
providers = []
|
||||||
|
|
||||||
def removeProvider(self, provider_id):
|
def removeProvider(self, provider_id):
|
||||||
for p in self.providers:
|
|
||||||
if p.id() == provider_id:
|
|
||||||
self.providers.remove(p)
|
|
||||||
break
|
|
||||||
if provider_id in self.algs:
|
if provider_id in self.algs:
|
||||||
del self.algs[provider_id]
|
del self.algs[provider_id]
|
||||||
self.providerRemoved.emit(provider_id)
|
|
||||||
|
QgsApplication.processingRegistry().removeProvider(provider_id)
|
||||||
|
|
||||||
def reloadProvider(self, provider_id):
|
def reloadProvider(self, provider_id):
|
||||||
for p in self.providers:
|
for p in self.providers:
|
||||||
@ -58,14 +55,8 @@ class AlgorithmList(QObject):
|
|||||||
break
|
break
|
||||||
|
|
||||||
def addProvider(self, provider):
|
def addProvider(self, provider):
|
||||||
self.providers.append(provider)
|
if QgsApplication.processingRegistry().addProvider(provider):
|
||||||
self.algs[provider.id()] = {a.commandLineName(): a for a in provider.algs}
|
self.algs[provider.id()] = {a.commandLineName(): a for a in provider.algs}
|
||||||
self.providerAdded.emit(provider.id())
|
|
||||||
|
|
||||||
def providerById(self, id):
|
|
||||||
for provider in self.providers:
|
|
||||||
if provider.id() == id:
|
|
||||||
return provider
|
|
||||||
|
|
||||||
def getAlgorithm(self, name):
|
def getAlgorithm(self, name):
|
||||||
for provider in list(self.algs.values()):
|
for provider in list(self.algs.values()):
|
||||||
|
@ -33,6 +33,8 @@ from qgis.PyQt import uic
|
|||||||
from qgis.PyQt.QtCore import Qt, QCoreApplication
|
from qgis.PyQt.QtCore import Qt, QCoreApplication
|
||||||
from qgis.PyQt.QtWidgets import QMenu, QAction, QTreeWidgetItem, QLabel, QMessageBox
|
from qgis.PyQt.QtWidgets import QMenu, QAction, QTreeWidgetItem, QLabel, QMessageBox
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
|
from qgis.core import (QgsApplication,
|
||||||
|
QgsProcessingRegistry)
|
||||||
|
|
||||||
from processing.gui.Postprocessing import handleAlgorithmResults
|
from processing.gui.Postprocessing import handleAlgorithmResults
|
||||||
from processing.core.Processing import Processing
|
from processing.core.Processing import Processing
|
||||||
@ -82,8 +84,8 @@ class ProcessingToolbox(BASE, WIDGET):
|
|||||||
|
|
||||||
self.fillTree()
|
self.fillTree()
|
||||||
|
|
||||||
algList.providerRemoved.connect(self.removeProvider)
|
QgsApplication.processingRegistry().providerRemoved.connect(self.removeProvider)
|
||||||
algList.providerAdded.connect(self.addProvider)
|
QgsApplication.processingRegistry().providerAdded.connect(self.addProvider)
|
||||||
algList.providerUpdated.connect(self.updateProvider)
|
algList.providerUpdated.connect(self.updateProvider)
|
||||||
settingsWatcher.settingsChanged.connect(self.fillTree)
|
settingsWatcher.settingsChanged.connect(self.fillTree)
|
||||||
|
|
||||||
@ -159,7 +161,7 @@ class ProcessingToolbox(BASE, WIDGET):
|
|||||||
self.fillTree()
|
self.fillTree()
|
||||||
self.textChanged()
|
self.textChanged()
|
||||||
self.showDisabled()
|
self.showDisabled()
|
||||||
provider = Processing.providerById(id)
|
provider = QgsApplication.processingRegistry().providerById(id)
|
||||||
if not provider.canBeActivated():
|
if not provider.canBeActivated():
|
||||||
QMessageBox.warning(self, "Activate provider",
|
QMessageBox.warning(self, "Activate provider",
|
||||||
"The provider has been activated, but it might need additional configuration.")
|
"The provider has been activated, but it might need additional configuration.")
|
||||||
@ -376,7 +378,7 @@ class TreeProviderItem(QTreeWidgetItem):
|
|||||||
self.tree = tree
|
self.tree = tree
|
||||||
self.toolbox = toolbox
|
self.toolbox = toolbox
|
||||||
self.provider_id = provider_id
|
self.provider_id = provider_id
|
||||||
self.provider = Processing.providerById(provider_id)
|
self.provider = QgsApplication.processingRegistry().providerById(provider_id)
|
||||||
self.setIcon(0, self.provider.icon())
|
self.setIcon(0, self.provider.icon())
|
||||||
self.populate()
|
self.populate()
|
||||||
|
|
||||||
|
@ -43,7 +43,6 @@ from qgis.PyQt.QtWidgets import (QMenu,
|
|||||||
from qgis.core import QgsApplication
|
from qgis.core import QgsApplication
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
|
|
||||||
from processing.core.alglist import algList
|
|
||||||
from processing.gui.AlgorithmDialog import AlgorithmDialog
|
from processing.gui.AlgorithmDialog import AlgorithmDialog
|
||||||
from processing.gui.HelpEditionDialog import HelpEditionDialog
|
from processing.gui.HelpEditionDialog import HelpEditionDialog
|
||||||
from processing.algs.r.RAlgorithm import RAlgorithm
|
from processing.algs.r.RAlgorithm import RAlgorithm
|
||||||
@ -279,10 +278,10 @@ class ScriptEditorDialog(BASE, WIDGET):
|
|||||||
def runAlgorithm(self):
|
def runAlgorithm(self):
|
||||||
if self.algType == self.SCRIPT_PYTHON:
|
if self.algType == self.SCRIPT_PYTHON:
|
||||||
alg = ScriptAlgorithm(None, self.editor.text())
|
alg = ScriptAlgorithm(None, self.editor.text())
|
||||||
alg.provider = algList.providerById('script')
|
alg.provider = QgsApplication.processingRegistry().providerById('script')
|
||||||
if self.algType == self.SCRIPT_R:
|
if self.algType == self.SCRIPT_R:
|
||||||
alg = RAlgorithm(None, self.editor.text())
|
alg = RAlgorithm(None, self.editor.text())
|
||||||
alg.provider = algList.providerById('r')
|
alg.provider = QgsApplication.processingRegistry().providerById('r')
|
||||||
|
|
||||||
dlg = alg.getCustomParametersDialog()
|
dlg = alg.getCustomParametersDialog()
|
||||||
if not dlg:
|
if not dlg:
|
||||||
|
@ -8,6 +8,7 @@ from processing.core.ProcessingConfig import ProcessingConfig, Setting
|
|||||||
from processing.gui.MessageDialog import MessageDialog
|
from processing.gui.MessageDialog import MessageDialog
|
||||||
from processing.gui.AlgorithmDialog import AlgorithmDialog
|
from processing.gui.AlgorithmDialog import AlgorithmDialog
|
||||||
from qgis.utils import iface
|
from qgis.utils import iface
|
||||||
|
from qgis.core import QgsApplication
|
||||||
from processing.gui.MessageBarProgress import MessageBarProgress
|
from processing.gui.MessageBarProgress import MessageBarProgress
|
||||||
from processing.gui.AlgorithmExecutor import runalg
|
from processing.gui.AlgorithmExecutor import runalg
|
||||||
from processing.gui.Postprocessing import handleAlgorithmResults
|
from processing.gui.Postprocessing import handleAlgorithmResults
|
||||||
@ -111,7 +112,7 @@ defaultMenuEntries.update({'gdal:buildvirtualraster': miscMenu,
|
|||||||
|
|
||||||
|
|
||||||
def initializeMenus():
|
def initializeMenus():
|
||||||
for provider in algList.providers:
|
for provider in QgsApplication.processingRegistry().providers():
|
||||||
for alg in provider.algs:
|
for alg in provider.algs:
|
||||||
d = defaultMenuEntries.get(alg.commandLineName(), "")
|
d = defaultMenuEntries.get(alg.commandLineName(), "")
|
||||||
setting = Setting(menusSettingsGroup, "MENU_" + alg.commandLineName(),
|
setting = Setting(menusSettingsGroup, "MENU_" + alg.commandLineName(),
|
||||||
|
@ -272,7 +272,7 @@ class ModelerDialog(BASE, WIDGET):
|
|||||||
def editHelp(self):
|
def editHelp(self):
|
||||||
if self.alg.provider is None:
|
if self.alg.provider is None:
|
||||||
# Might happen if model is opened from modeler dialog
|
# Might happen if model is opened from modeler dialog
|
||||||
self.alg.provider = algList.providerById('model')
|
self.alg.provider = QgsApplication.processingRegistry().providerById('model')
|
||||||
alg = self.alg.getCopy()
|
alg = self.alg.getCopy()
|
||||||
dlg = HelpEditionDialog(alg)
|
dlg = HelpEditionDialog(alg)
|
||||||
dlg.exec_()
|
dlg.exec_()
|
||||||
@ -287,7 +287,7 @@ class ModelerDialog(BASE, WIDGET):
|
|||||||
|
|
||||||
if self.alg.provider is None:
|
if self.alg.provider is None:
|
||||||
# Might happen if model is opened from modeler dialog
|
# Might happen if model is opened from modeler dialog
|
||||||
self.alg.provider = algList.providerById('model')
|
self.alg.provider = QgsApplication.processingRegistry().providerById('model')
|
||||||
alg = self.alg.getCopy()
|
alg = self.alg.getCopy()
|
||||||
dlg = AlgorithmDialog(alg)
|
dlg = AlgorithmDialog(alg)
|
||||||
dlg.exec_()
|
dlg.exec_()
|
||||||
@ -640,7 +640,7 @@ class ModelerDialog(BASE, WIDGET):
|
|||||||
|
|
||||||
if len(groups) > 0:
|
if len(groups) > 0:
|
||||||
providerItem = QTreeWidgetItem()
|
providerItem = QTreeWidgetItem()
|
||||||
provider = algList.providerById(provider_id)
|
provider = QgsApplication.processingRegistry().providerById(provider_id)
|
||||||
providerItem.setText(0, provider.name())
|
providerItem.setText(0, provider.name())
|
||||||
providerItem.setToolTip(0, provider.name())
|
providerItem.setToolTip(0, provider.name())
|
||||||
providerItem.setIcon(0, provider.icon())
|
providerItem.setIcon(0, provider.icon())
|
||||||
|
@ -31,7 +31,7 @@ from qgis.PyQt import uic
|
|||||||
from qgis.PyQt.QtCore import Qt
|
from qgis.PyQt.QtCore import Qt
|
||||||
from qgis.PyQt.QtWidgets import QTreeWidgetItem, QFileDialog
|
from qgis.PyQt.QtWidgets import QTreeWidgetItem, QFileDialog
|
||||||
|
|
||||||
from processing.core.alglist import algList
|
from qgis.core import QgsApplication
|
||||||
|
|
||||||
pluginPath = os.path.split(os.path.dirname(__file__))[0]
|
pluginPath = os.path.split(os.path.dirname(__file__))[0]
|
||||||
WIDGET, BASE = uic.loadUiType(
|
WIDGET, BASE = uic.loadUiType(
|
||||||
@ -47,7 +47,7 @@ class ScriptSelector(BASE, WIDGET):
|
|||||||
self.scripts = None
|
self.scripts = None
|
||||||
|
|
||||||
allScripts = defaultdict(list)
|
allScripts = defaultdict(list)
|
||||||
alglist = algList.providerById("script").algs
|
alglist = QgsApplication.processingRegistry().providerById("script").algs
|
||||||
for script in alglist:
|
for script in alglist:
|
||||||
allScripts[script.group].append(script)
|
allScripts[script.group].append(script)
|
||||||
|
|
||||||
|
@ -79,6 +79,7 @@ SET(QGIS_CORE_SRCS
|
|||||||
auth/qgsauthmethodregistry.cpp
|
auth/qgsauthmethodregistry.cpp
|
||||||
|
|
||||||
processing/qgsprocessingprovider.cpp
|
processing/qgsprocessingprovider.cpp
|
||||||
|
processing/qgsprocessingregistry.cpp
|
||||||
|
|
||||||
qgis.cpp
|
qgis.cpp
|
||||||
qgsapplication.cpp
|
qgsapplication.cpp
|
||||||
@ -562,6 +563,8 @@ SET(QGIS_CORE_MOC_HDRS
|
|||||||
composer/qgsgroupungroupitemscommand.h
|
composer/qgsgroupungroupitemscommand.h
|
||||||
composer/qgspaperitem.h
|
composer/qgspaperitem.h
|
||||||
|
|
||||||
|
processing/qgsprocessingregistry.h
|
||||||
|
|
||||||
raster/qgsrasterlayer.h
|
raster/qgsrasterlayer.h
|
||||||
raster/qgsrasterdataprovider.h
|
raster/qgsrasterdataprovider.h
|
||||||
|
|
||||||
|
71
src/core/processing/qgsprocessingregistry.cpp
Normal file
71
src/core/processing/qgsprocessingregistry.cpp
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
qgsprocessingregistry.cpp
|
||||||
|
--------------------------
|
||||||
|
begin : December 2016
|
||||||
|
copyright : (C) 2016 by Nyall Dawson
|
||||||
|
email : nyall dot dawson at gmail dot com
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "qgsprocessingregistry.h"
|
||||||
|
|
||||||
|
QgsProcessingRegistry::QgsProcessingRegistry( QObject* parent )
|
||||||
|
: QObject( parent )
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
QgsProcessingRegistry::~QgsProcessingRegistry()
|
||||||
|
{
|
||||||
|
Q_FOREACH ( QgsProcessingProvider* p, mProviders )
|
||||||
|
{
|
||||||
|
removeProvider( p );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QgsProcessingRegistry::addProvider( QgsProcessingProvider* provider )
|
||||||
|
{
|
||||||
|
if ( !provider )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if ( mProviders.contains( provider->id() ) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
mProviders[ provider->id()] = provider;
|
||||||
|
emit providerAdded( provider->id() );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QgsProcessingRegistry::removeProvider( QgsProcessingProvider* provider )
|
||||||
|
{
|
||||||
|
if ( !provider )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
QString id = provider->id();
|
||||||
|
|
||||||
|
if ( !mProviders.contains( id ) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
delete mProviders.take( id );
|
||||||
|
emit providerRemoved( id );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool QgsProcessingRegistry::removeProvider( const QString& providerId )
|
||||||
|
{
|
||||||
|
QgsProcessingProvider* p = providerById( providerId );
|
||||||
|
return removeProvider( p );
|
||||||
|
}
|
||||||
|
|
||||||
|
QgsProcessingProvider* QgsProcessingRegistry::providerById( const QString& id )
|
||||||
|
{
|
||||||
|
return mProviders.value( id, nullptr );
|
||||||
|
}
|
101
src/core/processing/qgsprocessingregistry.h
Normal file
101
src/core/processing/qgsprocessingregistry.h
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
/***************************************************************************
|
||||||
|
qgsprocessingregistry.h
|
||||||
|
------------------------
|
||||||
|
begin : December 2016
|
||||||
|
copyright : (C) 2016 by Nyall Dawson
|
||||||
|
email : nyall dot dawson at gmail dot com
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
* *
|
||||||
|
* This program is free software; you can redistribute it and/or modify *
|
||||||
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or *
|
||||||
|
* (at your option) any later version. *
|
||||||
|
* *
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef QGSPROCESSINGREGISTRY_H
|
||||||
|
#define QGSPROCESSINGREGISTRY_H
|
||||||
|
|
||||||
|
#include "qgis_core.h"
|
||||||
|
#include "qgsprocessingprovider.h"
|
||||||
|
#include <QMap>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \class QgsProcessingRegistry
|
||||||
|
* \ingroup core
|
||||||
|
* Registry for various processing components, including providers, algorithms
|
||||||
|
* and various parameters and outputs.
|
||||||
|
*
|
||||||
|
* QgsProcessingRegistry is not usually directly created, but rather accessed through
|
||||||
|
* QgsApplication::processingRegistry().
|
||||||
|
* \note added in QGIS 3.0
|
||||||
|
*/
|
||||||
|
class CORE_EXPORT QgsProcessingRegistry : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor for QgsProcessingRegistry.
|
||||||
|
*/
|
||||||
|
QgsProcessingRegistry( QObject* parent = nullptr );
|
||||||
|
|
||||||
|
~QgsProcessingRegistry();
|
||||||
|
|
||||||
|
//! Registry cannot be copied
|
||||||
|
QgsProcessingRegistry( const QgsProcessingRegistry& other ) = delete;
|
||||||
|
//! Registry cannot be copied
|
||||||
|
QgsProcessingRegistry& operator=( const QgsProcessingRegistry& other ) = delete;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get list of available providers.
|
||||||
|
*/
|
||||||
|
QList<QgsProcessingProvider*> providers() const { return mProviders.values(); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a processing provider to the registry. Ownership of the provider is transferred to the registry.
|
||||||
|
* Returns false if the provider could not be added (eg if a provider with a duplicate ID already exists
|
||||||
|
* in the registry).
|
||||||
|
* @see removeProvider()
|
||||||
|
*/
|
||||||
|
bool addProvider( QgsProcessingProvider* provider );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a provider implementation from the registry (the provider object is deleted).
|
||||||
|
* Returns false if the provider could not be removed (eg provider does not exist in the registry).
|
||||||
|
* @see addProvider()
|
||||||
|
*/
|
||||||
|
bool removeProvider( QgsProcessingProvider* provider );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes a provider implementation from the registry (the provider object is deleted).
|
||||||
|
* Returns false if the provider could not be removed (eg provider does not exist in the registry).
|
||||||
|
* @see addProvider()
|
||||||
|
*/
|
||||||
|
bool removeProvider( const QString& providerId );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a matching provider by provider ID.
|
||||||
|
*/
|
||||||
|
QgsProcessingProvider* providerById( const QString& id );
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
//! Emitted when a provider has been added to the registry.
|
||||||
|
void providerAdded( const QString& id );
|
||||||
|
|
||||||
|
//! Emitted when a provider is removed from the registry
|
||||||
|
void providerRemoved( const QString& id );
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
//! Map of available providers by id. This class owns the pointers
|
||||||
|
QMap<QString, QgsProcessingProvider*> mProviders;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // QGSPROCESSINGREGISTRY_H
|
||||||
|
|
||||||
|
|
@ -36,6 +36,7 @@
|
|||||||
#include "gps/qgsgpsconnectionregistry.h"
|
#include "gps/qgsgpsconnectionregistry.h"
|
||||||
#include "qgspluginlayerregistry.h"
|
#include "qgspluginlayerregistry.h"
|
||||||
#include "qgsmessagelog.h"
|
#include "qgsmessagelog.h"
|
||||||
|
#include "processing/qgsprocessingregistry.h"
|
||||||
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
@ -114,20 +115,6 @@ const char* QgsApplication::QGIS_APPLICATION_NAME = "QGIS3";
|
|||||||
*/
|
*/
|
||||||
QgsApplication::QgsApplication( int & argc, char ** argv, bool GUIenabled, const QString& customConfigPath, const QString& platformName )
|
QgsApplication::QgsApplication( int & argc, char ** argv, bool GUIenabled, const QString& customConfigPath, const QString& platformName )
|
||||||
: QApplication( argc, argv, GUIenabled )
|
: QApplication( argc, argv, GUIenabled )
|
||||||
, mActionScopeRegistry( nullptr )
|
|
||||||
, mProfiler( nullptr )
|
|
||||||
, mTaskManager( nullptr )
|
|
||||||
, mFieldFormatterRegistry( nullptr )
|
|
||||||
, mColorSchemeRegistry( nullptr )
|
|
||||||
, mPaintEffectRegistry( nullptr )
|
|
||||||
, mRendererRegistry( nullptr )
|
|
||||||
, mSvgCache( nullptr )
|
|
||||||
, mSymbolLayerRegistry( nullptr )
|
|
||||||
, mRasterRendererRegistry( nullptr )
|
|
||||||
, mGpsConnectionRegistry( nullptr )
|
|
||||||
, mDataItemProviderRegistry( nullptr )
|
|
||||||
, mPluginLayerRegistry( nullptr )
|
|
||||||
, mMessageLog( nullptr )
|
|
||||||
{
|
{
|
||||||
sPlatformName = platformName;
|
sPlatformName = platformName;
|
||||||
|
|
||||||
@ -147,6 +134,7 @@ QgsApplication::QgsApplication( int & argc, char ** argv, bool GUIenabled, const
|
|||||||
mRasterRendererRegistry = new QgsRasterRendererRegistry();
|
mRasterRendererRegistry = new QgsRasterRendererRegistry();
|
||||||
mGpsConnectionRegistry = new QgsGPSConnectionRegistry();
|
mGpsConnectionRegistry = new QgsGPSConnectionRegistry();
|
||||||
mPluginLayerRegistry = new QgsPluginLayerRegistry();
|
mPluginLayerRegistry = new QgsPluginLayerRegistry();
|
||||||
|
mProcessingRegistry = new QgsProcessingRegistry();
|
||||||
|
|
||||||
init( customConfigPath ); // init can also be called directly by e.g. unit tests that don't inherit QApplication.
|
init( customConfigPath ); // init can also be called directly by e.g. unit tests that don't inherit QApplication.
|
||||||
}
|
}
|
||||||
@ -278,6 +266,7 @@ void QgsApplication::init( QString customConfigPath )
|
|||||||
|
|
||||||
QgsApplication::~QgsApplication()
|
QgsApplication::~QgsApplication()
|
||||||
{
|
{
|
||||||
|
delete mProcessingRegistry;
|
||||||
delete mActionScopeRegistry;
|
delete mActionScopeRegistry;
|
||||||
delete mTaskManager;
|
delete mTaskManager;
|
||||||
delete mFieldFormatterRegistry;
|
delete mFieldFormatterRegistry;
|
||||||
@ -1608,6 +1597,11 @@ QgsMessageLog* QgsApplication::messageLog()
|
|||||||
return instance()->mMessageLog;
|
return instance()->mMessageLog;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QgsProcessingRegistry*QgsApplication::processingRegistry()
|
||||||
|
{
|
||||||
|
return instance()->mProcessingRegistry;
|
||||||
|
}
|
||||||
|
|
||||||
QgsFieldFormatterRegistry* QgsApplication::fieldFormatterRegistry()
|
QgsFieldFormatterRegistry* QgsApplication::fieldFormatterRegistry()
|
||||||
{
|
{
|
||||||
return instance()->mFieldFormatterRegistry;
|
return instance()->mFieldFormatterRegistry;
|
||||||
|
@ -37,6 +37,7 @@ class QgsGPSConnectionRegistry;
|
|||||||
class QgsDataItemProviderRegistry;
|
class QgsDataItemProviderRegistry;
|
||||||
class QgsPluginLayerRegistry;
|
class QgsPluginLayerRegistry;
|
||||||
class QgsMessageLog;
|
class QgsMessageLog;
|
||||||
|
class QgsProcessingRegistry;
|
||||||
|
|
||||||
/** \ingroup core
|
/** \ingroup core
|
||||||
* Extends QApplication to provide access to QGIS specific resources such
|
* Extends QApplication to provide access to QGIS specific resources such
|
||||||
@ -454,6 +455,13 @@ class CORE_EXPORT QgsApplication : public QApplication
|
|||||||
*/
|
*/
|
||||||
static QgsMessageLog* messageLog();
|
static QgsMessageLog* messageLog();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the application's processing registry, used for managing processing providers,
|
||||||
|
* algorithms, and various parameters and outputs.
|
||||||
|
* @note added in QGIS 3.0
|
||||||
|
*/
|
||||||
|
static QgsProcessingRegistry* processingRegistry();
|
||||||
|
|
||||||
#ifdef ANDROID
|
#ifdef ANDROID
|
||||||
//dummy method to workaround sip generation issue issue
|
//dummy method to workaround sip generation issue issue
|
||||||
bool x11EventFilter( XEvent * event )
|
bool x11EventFilter( XEvent * event )
|
||||||
@ -584,20 +592,21 @@ class CORE_EXPORT QgsApplication : public QApplication
|
|||||||
|
|
||||||
QMap<QString, QIcon> mIconCache;
|
QMap<QString, QIcon> mIconCache;
|
||||||
|
|
||||||
QgsActionScopeRegistry* mActionScopeRegistry;
|
QgsActionScopeRegistry* mActionScopeRegistry = nullptr;
|
||||||
QgsRuntimeProfiler* mProfiler;
|
QgsRuntimeProfiler* mProfiler = nullptr;
|
||||||
QgsTaskManager* mTaskManager;
|
QgsTaskManager* mTaskManager = nullptr;
|
||||||
QgsFieldFormatterRegistry* mFieldFormatterRegistry;
|
QgsFieldFormatterRegistry* mFieldFormatterRegistry = nullptr;
|
||||||
QgsColorSchemeRegistry* mColorSchemeRegistry;
|
QgsColorSchemeRegistry* mColorSchemeRegistry = nullptr;
|
||||||
QgsPaintEffectRegistry* mPaintEffectRegistry;
|
QgsPaintEffectRegistry* mPaintEffectRegistry = nullptr;
|
||||||
QgsRendererRegistry* mRendererRegistry;
|
QgsRendererRegistry* mRendererRegistry = nullptr;
|
||||||
QgsSvgCache* mSvgCache;
|
QgsSvgCache* mSvgCache = nullptr;
|
||||||
QgsSymbolLayerRegistry* mSymbolLayerRegistry;
|
QgsSymbolLayerRegistry* mSymbolLayerRegistry = nullptr;
|
||||||
QgsRasterRendererRegistry* mRasterRendererRegistry;
|
QgsRasterRendererRegistry* mRasterRendererRegistry = nullptr;
|
||||||
QgsGPSConnectionRegistry* mGpsConnectionRegistry;
|
QgsGPSConnectionRegistry* mGpsConnectionRegistry = nullptr;
|
||||||
QgsDataItemProviderRegistry* mDataItemProviderRegistry;
|
QgsDataItemProviderRegistry* mDataItemProviderRegistry = nullptr;
|
||||||
QgsPluginLayerRegistry* mPluginLayerRegistry;
|
QgsPluginLayerRegistry* mPluginLayerRegistry = nullptr;
|
||||||
QgsMessageLog* mMessageLog;
|
QgsMessageLog* mMessageLog = nullptr;
|
||||||
|
QgsProcessingRegistry* mProcessingRegistry = nullptr;
|
||||||
QString mNullRepresentation;
|
QString mNullRepresentation;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user