mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-13 00:03:09 -04:00
Move processing algorithm configuration code to gui lib
This commit is contained in:
parent
31d7e4b6a0
commit
eb39d2379c
@ -367,7 +367,6 @@
|
||||
%Include locator/qgslocator.sip
|
||||
%Include locator/qgslocatorfilter.sip
|
||||
%Include locator/qgslocatormodel.sip
|
||||
%Include processing/qgsprocessingalgorithmconfigurationwidget.sip
|
||||
%Include processing/qgsprocessingalgrunnertask.sip
|
||||
%Include processing/qgsprocessingfeedback.sip
|
||||
%Include processing/qgsprocessingprovider.sip
|
||||
|
@ -168,6 +168,7 @@ their acceptable ranges, defaults, etc.
|
||||
FlagAdvanced,
|
||||
FlagHidden,
|
||||
FlagOptional,
|
||||
FlagIsModelOutput,
|
||||
};
|
||||
typedef QFlags<QgsProcessingParameterDefinition::Flag> Flags;
|
||||
|
||||
|
@ -143,30 +143,6 @@ Return a list with all known parameter types.
|
||||
.. versionadded:: 3.2
|
||||
%End
|
||||
|
||||
void addAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory /Transfer/ );
|
||||
%Docstring
|
||||
Add a new configuration widget factory for customized algorithm configuration
|
||||
widgets. Ownership is taken.
|
||||
|
||||
.. versionadded:: 3.2
|
||||
%End
|
||||
|
||||
void removeAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory );
|
||||
%Docstring
|
||||
Remove a configuration widget factory for customized algorithm configuration
|
||||
widgets.
|
||||
|
||||
.. versionadded:: 3.2
|
||||
%End
|
||||
|
||||
QgsProcessingAlgorithmConfigurationWidget *algorithmConfigurationWidget( QgsProcessingAlgorithm *algorithm ) const;
|
||||
%Docstring
|
||||
algorithmConfigurationWidget
|
||||
@param algorithm
|
||||
@return
|
||||
%End
|
||||
|
||||
|
||||
signals:
|
||||
|
||||
void providerAdded( const QString &id );
|
||||
|
@ -311,6 +311,8 @@
|
||||
%Include layout/qgslayoutviewtooltemporarymousepan.sip
|
||||
%Include layout/qgslayoutviewtoolzoom.sip
|
||||
%Include locator/qgslocatorwidget.sip
|
||||
%Include processing/qgsprocessingalgorithmconfigurationwidget.sip
|
||||
%Include processing/qgsprocessingalgorithmdialogbase.sip
|
||||
%Include processing/qgsprocessingconfigurationwidgets.sip
|
||||
%Include processing/qgsprocessingguiregistry.sip
|
||||
%Include qgsadvanceddigitizingcanvasitem.sip
|
||||
|
@ -11,44 +11,6 @@
|
||||
|
||||
|
||||
|
||||
class QgsProcessingConfigurationWidgets
|
||||
{
|
||||
%Docstring
|
||||
This class is responsible for the management of processing widgets which
|
||||
QGIS internally.
|
||||
|
||||
Standalone applications that require to show configuration widgets for processing
|
||||
algorithms will need to execute the following code to have the configuration
|
||||
interfaces available.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
# At startup time
|
||||
QgsApplicationProcessingConfigurationWidgets.initialize()
|
||||
|
||||
# At exit time
|
||||
QgsApplicationProcessingConfigurationWidgets.cleanup()
|
||||
%End
|
||||
|
||||
%TypeHeaderCode
|
||||
#include "qgsprocessingconfigurationwidgets.h"
|
||||
%End
|
||||
public:
|
||||
|
||||
static void initialize();
|
||||
%Docstring
|
||||
Initialize native configuration widgets.
|
||||
%End
|
||||
|
||||
static void cleanup();
|
||||
%Docstring
|
||||
Cleanup native configuration widgets.
|
||||
%End
|
||||
|
||||
private:
|
||||
QgsProcessingConfigurationWidgets();
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
61
python/gui/processing/qgsprocessingguiregistry.sip.in
Normal file
61
python/gui/processing/qgsprocessingguiregistry.sip.in
Normal file
@ -0,0 +1,61 @@
|
||||
/************************************************************************
|
||||
* This file has been generated automatically from *
|
||||
* *
|
||||
* src/gui/processing/qgsprocessingguiregistry.h *
|
||||
* *
|
||||
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
|
||||
************************************************************************/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class QgsProcessingGuiRegistry
|
||||
{
|
||||
%Docstring
|
||||
The QgsProcessingGuiRegistry is a home for widgets for processing
|
||||
configuration widgets.
|
||||
|
||||
.. versionadded:: 3.2
|
||||
%End
|
||||
|
||||
%TypeHeaderCode
|
||||
#include "qgsprocessingguiregistry.h"
|
||||
%End
|
||||
public:
|
||||
QgsProcessingGuiRegistry();
|
||||
~QgsProcessingGuiRegistry();
|
||||
|
||||
void addAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory /Transfer/ );
|
||||
%Docstring
|
||||
Add a new configuration widget factory for customized algorithm configuration
|
||||
widgets. Ownership is taken.
|
||||
|
||||
.. versionadded:: 3.2
|
||||
%End
|
||||
|
||||
void removeAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory );
|
||||
%Docstring
|
||||
Remove a configuration widget factory for customized algorithm configuration
|
||||
widgets.
|
||||
|
||||
.. versionadded:: 3.2
|
||||
%End
|
||||
|
||||
QgsProcessingAlgorithmConfigurationWidget *algorithmConfigurationWidget( QgsProcessingAlgorithm *algorithm ) const;
|
||||
%Docstring
|
||||
algorithmConfigurationWidget
|
||||
@param algorithm
|
||||
@return
|
||||
%End
|
||||
|
||||
};
|
||||
|
||||
/************************************************************************
|
||||
* This file has been generated automatically from *
|
||||
* *
|
||||
* src/gui/processing/qgsprocessingguiregistry.h *
|
||||
* *
|
||||
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
|
||||
************************************************************************/
|
@ -62,6 +62,8 @@ Returns the global map layer action registry, used for registering map layer act
|
||||
Returns the global layout item GUI registry, used for registering the GUI behavior of layout items.
|
||||
%End
|
||||
|
||||
static QgsProcessingGuiRegistry *processingGuiRegistry();
|
||||
|
||||
static void enableAutoGeometryRestore( QWidget *widget, const QString &key = QString() );
|
||||
%Docstring
|
||||
Register the widget to allow its position to be automatically saved and restored when open and closed.
|
||||
|
@ -53,7 +53,8 @@ from qgis.core import (Qgis,
|
||||
QgsProcessingOutputDefinition,
|
||||
QgsSettings)
|
||||
|
||||
from qgis.gui import (QgsMessageBar,
|
||||
from qgis.gui import (QgsGui,
|
||||
QgsMessageBar,
|
||||
QgsScrollArea,
|
||||
QgsFilterLineEdit,
|
||||
QgsHelp)
|
||||
@ -119,7 +120,7 @@ class ModelerParametersDialog(QDialog):
|
||||
line.setFrameShape(QFrame.HLine)
|
||||
line.setFrameShadow(QFrame.Sunken)
|
||||
self.verticalLayout.addWidget(line)
|
||||
self.algorithmItem = QgsApplication.instance().processingRegistry().algorithmConfigurationWidget(self._alg)
|
||||
self.algorithmItem = QgsGui.instance().processingGuiRegistry().algorithmConfigurationWidget(self._alg)
|
||||
if self.configuration:
|
||||
self.algorithmItem.setConfiguration(self.configuration)
|
||||
self.verticalLayout.addWidget(self.algorithmItem)
|
||||
@ -332,6 +333,13 @@ class ModelerParametersDialog(QDialog):
|
||||
output.setChildOutputName(dest.name())
|
||||
outputs[name] = output
|
||||
|
||||
if dest.flags() & QgsProcessingParameterDefinition.FlagIsModelOutput:
|
||||
if not name in outputs:
|
||||
output = QgsProcessingModelOutput(dest.name(), dest.name())
|
||||
output.setChildId(alg.childId())
|
||||
output.setChildOutputName(dest.name())
|
||||
outputs[dest.name()] = output
|
||||
|
||||
alg.setModelOutputs(outputs)
|
||||
|
||||
selectedOptions = self.dependenciesPanel.selectedoptions
|
||||
|
@ -75,7 +75,11 @@ void QgsFilterAlgorithm::initAlgorithm( const QVariantMap &configuration )
|
||||
const QVariantMap outputDef = output.toMap();
|
||||
const QString name = QStringLiteral( "OUTPUT_%1" ).arg( outputDef.value( QStringLiteral( "name" ) ).toString() );
|
||||
QgsProcessingParameterFeatureSink *outputParam = new QgsProcessingParameterFeatureSink( name, outputDef.value( QStringLiteral( "name" ) ).toString() );
|
||||
outputParam->setFlags( QgsProcessingParameterDefinition::FlagHidden );
|
||||
QgsProcessingParameterDefinition::Flags flags = QgsProcessingParameterDefinition::Flags();
|
||||
flags |= QgsProcessingParameterDefinition::FlagHidden;
|
||||
if ( outputDef.value( QStringLiteral( "isModelOutput" ) ).toBool() )
|
||||
flags |= QgsProcessingParameterDefinition::FlagIsModelOutput;
|
||||
outputParam->setFlags( flags );
|
||||
addParameter( outputParam );
|
||||
mOutputs.append( new Output( name, outputDef.value( QStringLiteral( "expression" ) ).toString() ) );
|
||||
}
|
||||
@ -92,6 +96,8 @@ QVariantMap QgsFilterAlgorithm::processAlgorithm( const QVariantMap ¶meters,
|
||||
for ( Output *output : qgis::as_const( mOutputs ) )
|
||||
{
|
||||
output->sink.reset( parameterAsSink( parameters, output->name, context, output->destinationIdentifier, source->fields(), source->wkbType(), source->sourceCrs() ) );
|
||||
if ( !output->sink )
|
||||
return QVariantMap();
|
||||
output->expression.prepare( &expressionContext );
|
||||
}
|
||||
|
||||
@ -115,7 +121,9 @@ QVariantMap QgsFilterAlgorithm::processAlgorithm( const QVariantMap ¶meters,
|
||||
for ( Output *output : qgis::as_const( mOutputs ) )
|
||||
{
|
||||
if ( output->expression.evaluate( &expressionContext ).toBool() )
|
||||
{
|
||||
output->sink->addFeature( f, QgsFeatureSink::FastInsert );
|
||||
}
|
||||
}
|
||||
|
||||
feedback->setProgress( current * step );
|
||||
|
@ -246,7 +246,6 @@ Q_GUI_EXPORT extern int qt_defaultDpiX();
|
||||
#include "qgsruntimeprofiler.h"
|
||||
#include "qgshandlebadlayers.h"
|
||||
#include "qgsprintlayout.h"
|
||||
#include "qgsprocessingconfigurationwidgets.h"
|
||||
#include "qgsprocessingregistry.h"
|
||||
#include "qgsproject.h"
|
||||
#include "qgsprojectlayergroupdialog.h"
|
||||
@ -1458,7 +1457,6 @@ QgisApp::~QgisApp()
|
||||
|
||||
// cancel request for FileOpen events
|
||||
QgsApplication::setFileOpenEventReceiver( nullptr );
|
||||
QgsProcessingConfigurationWidgets::cleanup();
|
||||
|
||||
unregisterCustomLayoutDropHandler( mLayoutQptDropHandler );
|
||||
|
||||
@ -10497,7 +10495,6 @@ void QgisApp::initNativeProcessing()
|
||||
#ifdef HAVE_3D
|
||||
QgsApplication::processingRegistry()->addProvider( new Qgs3DAlgorithms( QgsApplication::processingRegistry() ) );
|
||||
#endif
|
||||
QgsProcessingConfigurationWidgets::initialize();
|
||||
}
|
||||
|
||||
void QgisApp::initLayouts()
|
||||
|
@ -102,7 +102,6 @@ SET(QGIS_CORE_SRCS
|
||||
locator/qgslocatormodel.cpp
|
||||
|
||||
processing/qgsprocessingalgorithm.cpp
|
||||
processing/qgsprocessingalgorithmconfigurationwidget.cpp
|
||||
processing/qgsprocessingalgrunnertask.cpp
|
||||
processing/qgsprocessingcontext.cpp
|
||||
processing/qgsprocessingfeedback.cpp
|
||||
@ -669,7 +668,6 @@ SET(QGIS_CORE_MOC_HDRS
|
||||
locator/qgslocatorfilter.h
|
||||
locator/qgslocatormodel.h
|
||||
|
||||
processing/qgsprocessingalgorithmconfigurationwidget.h
|
||||
processing/qgsprocessingalgrunnertask.h
|
||||
processing/qgsprocessingfeedback.h
|
||||
processing/qgsprocessingprovider.h
|
||||
|
@ -247,6 +247,7 @@ class CORE_EXPORT QgsProcessingParameterDefinition
|
||||
FlagAdvanced = 1 << 1, //!< Parameter is an advanced parameter which should be hidden from users by default
|
||||
FlagHidden = 1 << 2, //!< Parameter is hidden and should not be shown to users
|
||||
FlagOptional = 1 << 3, //!< Parameter is optional
|
||||
FlagIsModelOutput = 1 << 4, //!< Destination parameter is final output. The parameter name will be used.
|
||||
};
|
||||
Q_DECLARE_FLAGS( Flags, Flag )
|
||||
|
||||
|
@ -18,7 +18,6 @@
|
||||
#include "qgsprocessingregistry.h"
|
||||
#include "qgsvectorfilewriter.h"
|
||||
#include "qgsprocessingparametertypeimpl.h"
|
||||
#include "qgsprocessingalgorithmconfigurationwidget.h"
|
||||
|
||||
QgsProcessingRegistry::QgsProcessingRegistry( QObject *parent SIP_TRANSFERTHIS )
|
||||
: QObject( parent )
|
||||
@ -189,28 +188,3 @@ QList<QgsProcessingParameterType *> QgsProcessingRegistry::parameterTypes() cons
|
||||
{
|
||||
return mParameterTypes.values();
|
||||
}
|
||||
|
||||
void QgsProcessingRegistry::addAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory )
|
||||
{
|
||||
mAlgorithmConfigurationWidgetFactories.append( factory );
|
||||
}
|
||||
|
||||
void QgsProcessingRegistry::removeAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory )
|
||||
{
|
||||
mAlgorithmConfigurationWidgetFactories.removeAll( factory );
|
||||
delete factory;
|
||||
}
|
||||
|
||||
QgsProcessingAlgorithmConfigurationWidget *QgsProcessingRegistry::algorithmConfigurationWidget( QgsProcessingAlgorithm *algorithm ) const
|
||||
{
|
||||
for ( const auto *factory : mAlgorithmConfigurationWidgetFactories )
|
||||
{
|
||||
if ( factory->canCreateFor( algorithm ) )
|
||||
{
|
||||
return factory->create( algorithm );
|
||||
}
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@ -169,30 +169,6 @@ class CORE_EXPORT QgsProcessingRegistry : public QObject
|
||||
*/
|
||||
QList<QgsProcessingParameterType *> parameterTypes() const;
|
||||
|
||||
/**
|
||||
* Add a new configuration widget factory for customized algorithm configuration
|
||||
* widgets. Ownership is taken.
|
||||
*
|
||||
* \since QGIS 3.2
|
||||
*/
|
||||
void addAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory SIP_TRANSFER );
|
||||
|
||||
/**
|
||||
* Remove a configuration widget factory for customized algorithm configuration
|
||||
* widgets.
|
||||
*
|
||||
* \since QGIS 3.2
|
||||
*/
|
||||
void removeAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory );
|
||||
|
||||
/**
|
||||
* @brief algorithmConfigurationWidget
|
||||
* @param algorithm
|
||||
* @return
|
||||
*/
|
||||
QgsProcessingAlgorithmConfigurationWidget *algorithmConfigurationWidget( QgsProcessingAlgorithm *algorithm ) const;
|
||||
|
||||
|
||||
signals:
|
||||
|
||||
//! Emitted when a provider has been added to the registry.
|
||||
@ -224,8 +200,6 @@ class CORE_EXPORT QgsProcessingRegistry : public QObject
|
||||
//! Hash of available parameter types by id. This object owns the pointers.
|
||||
QMap<QString, QgsProcessingParameterType *> mParameterTypes;
|
||||
|
||||
QList <QgsProcessingAlgorithmConfigurationWidgetFactory *> mAlgorithmConfigurationWidgetFactories;
|
||||
|
||||
#ifdef SIP_RUN
|
||||
QgsProcessingRegistry( const QgsProcessingRegistry &other );
|
||||
#endif
|
||||
|
@ -192,8 +192,10 @@ SET(QGIS_GUI_SRCS
|
||||
ogr/qgsnewogrconnection.cpp
|
||||
ogr/qgsvectorlayersaveasdialog.cpp
|
||||
|
||||
processing/qgsprocessingalgorithmconfigurationwidget.cpp
|
||||
processing/qgsprocessingalgorithmdialogbase.cpp
|
||||
processing/qgsprocessingconfigurationwidgets.cpp
|
||||
processing/qgsprocessingguiregistry.cpp
|
||||
|
||||
qgisinterface.cpp
|
||||
qgsactionmenu.cpp
|
||||
@ -710,8 +712,10 @@ SET(QGIS_GUI_MOC_HDRS
|
||||
|
||||
locator/qgslocatorwidget.h
|
||||
|
||||
processing/qgsprocessingalgorithmconfigurationwidget.h
|
||||
processing/qgsprocessingalgorithmdialogbase.h
|
||||
processing/qgsprocessingconfigurationwidgets.h
|
||||
processing/qgsprocessingguiregistry.h
|
||||
)
|
||||
SET_PROPERTY(GLOBAL PROPERTY QGIS_GUI_MOC_HDRS ${QGIS_GUI_MOC_HDRS})
|
||||
|
||||
@ -870,10 +874,11 @@ INCLUDE_DIRECTORIES(
|
||||
${CMAKE_SOURCE_DIR}/src/gui/auth
|
||||
${CMAKE_SOURCE_DIR}/src/gui/editorwidgets
|
||||
${CMAKE_SOURCE_DIR}/src/gui/editorwidgets/core
|
||||
${CMAKE_SOURCE_DIR}/src/gui/effects
|
||||
${CMAKE_SOURCE_DIR}/src/gui/layertree
|
||||
${CMAKE_SOURCE_DIR}/src/gui/layout
|
||||
${CMAKE_SOURCE_DIR}/src/gui/effects
|
||||
${CMAKE_SOURCE_DIR}/src/gui/ogr
|
||||
${CMAKE_SOURCE_DIR}/src/gui/processing
|
||||
${CMAKE_SOURCE_DIR}/src/core
|
||||
${CMAKE_SOURCE_DIR}/src/core/annotations
|
||||
${CMAKE_SOURCE_DIR}/src/core/auth
|
||||
|
@ -19,7 +19,6 @@
|
||||
#ifndef QGSPROCESSINGALGORITHMCONFIGURATIONWIDGET_H
|
||||
#define QGSPROCESSINGALGORITHMCONFIGURATIONWIDGET_H
|
||||
|
||||
|
||||
#include <QWidget>
|
||||
#include <QVariantMap>
|
||||
|
@ -20,7 +20,8 @@
|
||||
#include "qgsprocessingalgorithm.h"
|
||||
#include "qgsexpressionlineedit.h"
|
||||
#include "qgsapplication.h"
|
||||
#include "qgsprocessingregistry.h"
|
||||
#include "qgsgui.h"
|
||||
#include "qgsprocessingguiregistry.h"
|
||||
|
||||
#include <QTableWidget>
|
||||
#include <QGridLayout>
|
||||
@ -29,32 +30,6 @@
|
||||
#include <QCheckBox>
|
||||
#include <QHeaderView>
|
||||
|
||||
QList<QgsProcessingAlgorithmConfigurationWidgetFactory *> QgsProcessingConfigurationWidgets::sProcessingAlgorithmConfigurationWidgetFactories;
|
||||
|
||||
QgsProcessingConfigurationWidgets::QgsProcessingConfigurationWidgets()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void QgsProcessingConfigurationWidgets::initialize()
|
||||
{
|
||||
if ( !sProcessingAlgorithmConfigurationWidgetFactories.isEmpty() )
|
||||
{
|
||||
QgsDebugMsg( "QgsProcessingConfigurationWidgets::initialize() called more than once. Exiting now." );
|
||||
return;
|
||||
}
|
||||
QgsProcessingAlgorithmConfigurationWidgetFactory *factory = new QgsFilterAlgorithmConfigurationWidgetFactory();
|
||||
sProcessingAlgorithmConfigurationWidgetFactories.append( factory );
|
||||
QgsApplication::instance()->processingRegistry()->addAlgorithmConfigurationWidgetFactory( factory );
|
||||
}
|
||||
|
||||
void QgsProcessingConfigurationWidgets::cleanup()
|
||||
{
|
||||
for ( QgsProcessingAlgorithmConfigurationWidgetFactory *factory : qgis::as_const( sProcessingAlgorithmConfigurationWidgetFactories ) )
|
||||
QgsApplication::instance()->processingRegistry()->removeAlgorithmConfigurationWidgetFactory( factory );
|
||||
sProcessingAlgorithmConfigurationWidgetFactories.clear();
|
||||
}
|
||||
|
||||
QgsFilterAlgorithmConfigurationWidget::QgsFilterAlgorithmConfigurationWidget( QWidget *parent )
|
||||
: QgsProcessingAlgorithmConfigurationWidget( parent )
|
||||
{
|
||||
|
@ -25,41 +25,6 @@
|
||||
|
||||
class QTableWidget;
|
||||
|
||||
/**
|
||||
* This class is responsible for the management of processing widgets which
|
||||
* QGIS internally.
|
||||
*
|
||||
* Standalone applications that require to show configuration widgets for processing
|
||||
* algorithms will need to execute the following code to have the configuration
|
||||
* interfaces available.
|
||||
*
|
||||
* \code{.py}
|
||||
* # At startup time
|
||||
* QgsApplicationProcessingConfigurationWidgets.initialize()
|
||||
*
|
||||
* # At exit time
|
||||
* QgsApplicationProcessingConfigurationWidgets.cleanup()
|
||||
* \endcode
|
||||
*/
|
||||
class GUI_EXPORT QgsProcessingConfigurationWidgets
|
||||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Initialize native configuration widgets.
|
||||
*/
|
||||
static void initialize();
|
||||
|
||||
/**
|
||||
* Cleanup native configuration widgets.
|
||||
*/
|
||||
static void cleanup();
|
||||
|
||||
private:
|
||||
QgsProcessingConfigurationWidgets() SIP_FORCE;
|
||||
static QList<QgsProcessingAlgorithmConfigurationWidgetFactory *> sProcessingAlgorithmConfigurationWidgetFactories;
|
||||
};
|
||||
|
||||
///@cond PRIVATE
|
||||
|
||||
#ifndef SIP_RUN
|
||||
|
56
src/gui/processing/qgsprocessingguiregistry.cpp
Normal file
56
src/gui/processing/qgsprocessingguiregistry.cpp
Normal file
@ -0,0 +1,56 @@
|
||||
/***************************************************************************
|
||||
qgsprocessingguiregistry.cpp
|
||||
---------------------
|
||||
begin : April 2018
|
||||
copyright : (C) 2018 by Matthias Kuhn
|
||||
email : matthias@opengis.ch
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* *
|
||||
* 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 "qgsprocessingguiregistry.h"
|
||||
#include "qgsprocessingalgorithmconfigurationwidget.h"
|
||||
#include "qgsprocessingconfigurationwidgets.h"
|
||||
#include "qgis.h"
|
||||
|
||||
QgsProcessingGuiRegistry::QgsProcessingGuiRegistry()
|
||||
{
|
||||
addAlgorithmConfigurationWidgetFactory( new QgsFilterAlgorithmConfigurationWidgetFactory() );
|
||||
}
|
||||
|
||||
QgsProcessingGuiRegistry::~QgsProcessingGuiRegistry()
|
||||
{
|
||||
for ( QgsProcessingAlgorithmConfigurationWidgetFactory *factory : qgis::as_const( mAlgorithmConfigurationWidgetFactories ) )
|
||||
removeAlgorithmConfigurationWidgetFactory( factory );
|
||||
}
|
||||
|
||||
void QgsProcessingGuiRegistry::addAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory )
|
||||
{
|
||||
mAlgorithmConfigurationWidgetFactories.append( factory );
|
||||
}
|
||||
|
||||
void QgsProcessingGuiRegistry::removeAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory )
|
||||
{
|
||||
mAlgorithmConfigurationWidgetFactories.removeAll( factory );
|
||||
delete factory;
|
||||
}
|
||||
|
||||
QgsProcessingAlgorithmConfigurationWidget *QgsProcessingGuiRegistry::algorithmConfigurationWidget( QgsProcessingAlgorithm *algorithm ) const
|
||||
{
|
||||
for ( const auto *factory : mAlgorithmConfigurationWidgetFactories )
|
||||
{
|
||||
if ( factory->canCreateFor( algorithm ) )
|
||||
{
|
||||
return factory->create( algorithm );
|
||||
}
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
71
src/gui/processing/qgsprocessingguiregistry.h
Normal file
71
src/gui/processing/qgsprocessingguiregistry.h
Normal file
@ -0,0 +1,71 @@
|
||||
/***************************************************************************
|
||||
qgsprocessingguiregistry.h
|
||||
---------------------
|
||||
begin : April 2018
|
||||
copyright : (C) 2018 by Matthias Kuhn
|
||||
email : matthias@opengis.ch
|
||||
***************************************************************************/
|
||||
|
||||
/***************************************************************************
|
||||
* *
|
||||
* 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 QGSPROCESSINGGUIREGISTRY_H
|
||||
#define QGSPROCESSINGGUIREGISTRY_H
|
||||
|
||||
#include "qgis_gui.h"
|
||||
#include "qgis_sip.h"
|
||||
|
||||
#include <QList>
|
||||
|
||||
class QgsProcessingAlgorithm;
|
||||
class QgsProcessingAlgorithmConfigurationWidget;
|
||||
class QgsProcessingAlgorithmConfigurationWidgetFactory;
|
||||
|
||||
/**
|
||||
* The QgsProcessingGuiRegistry is a home for widgets for processing
|
||||
* configuration widgets.
|
||||
*
|
||||
* \ingroup gui
|
||||
* \since QGIS 3.2
|
||||
*/
|
||||
class GUI_EXPORT QgsProcessingGuiRegistry
|
||||
{
|
||||
public:
|
||||
QgsProcessingGuiRegistry();
|
||||
~QgsProcessingGuiRegistry();
|
||||
|
||||
/**
|
||||
* Add a new configuration widget factory for customized algorithm configuration
|
||||
* widgets. Ownership is taken.
|
||||
*
|
||||
* \since QGIS 3.2
|
||||
*/
|
||||
void addAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory SIP_TRANSFER );
|
||||
|
||||
/**
|
||||
* Remove a configuration widget factory for customized algorithm configuration
|
||||
* widgets.
|
||||
*
|
||||
* \since QGIS 3.2
|
||||
*/
|
||||
void removeAlgorithmConfigurationWidgetFactory( QgsProcessingAlgorithmConfigurationWidgetFactory *factory );
|
||||
|
||||
/**
|
||||
* @brief algorithmConfigurationWidget
|
||||
* @param algorithm
|
||||
* @return
|
||||
*/
|
||||
QgsProcessingAlgorithmConfigurationWidget *algorithmConfigurationWidget( QgsProcessingAlgorithm *algorithm ) const;
|
||||
|
||||
private:
|
||||
|
||||
QList <QgsProcessingAlgorithmConfigurationWidgetFactory *> mAlgorithmConfigurationWidgetFactories;
|
||||
};
|
||||
|
||||
#endif // QGSPROCESSINGGUIREGISTRY_H
|
@ -28,6 +28,7 @@
|
||||
#else
|
||||
#include "qgsnative.h"
|
||||
#endif
|
||||
#include "qgsprocessingguiregistry.h"
|
||||
#include "qgsshortcutsmanager.h"
|
||||
#include "qgswidgetstatehelper_p.h"
|
||||
#include "qgslogger.h"
|
||||
@ -73,6 +74,11 @@ QgsLayoutItemGuiRegistry *QgsGui::layoutItemGuiRegistry()
|
||||
return instance()->mLayoutItemGuiRegistry;
|
||||
}
|
||||
|
||||
QgsProcessingGuiRegistry *QgsGui::processingGuiRegistry()
|
||||
{
|
||||
return instance()->mProcessingGuiRegistry;
|
||||
}
|
||||
|
||||
void QgsGui::enableAutoGeometryRestore( QWidget *widget, const QString &key )
|
||||
{
|
||||
if ( widget->objectName().isEmpty() )
|
||||
@ -109,4 +115,5 @@ QgsGui::QgsGui()
|
||||
mSourceSelectProviderRegistry = new QgsSourceSelectProviderRegistry();
|
||||
mLayoutItemGuiRegistry = new QgsLayoutItemGuiRegistry();
|
||||
mWidgetStateHelper = new QgsWidgetStateHelper();
|
||||
mProcessingGuiRegistry = new QgsProcessingGuiRegistry();
|
||||
}
|
||||
|
@ -30,6 +30,7 @@ class QgsSourceSelectProviderRegistry;
|
||||
class QgsNative;
|
||||
class QgsLayoutItemGuiRegistry;
|
||||
class QgsWidgetStateHelper;
|
||||
class QgsProcessingGuiRegistry;
|
||||
|
||||
/**
|
||||
* \ingroup gui
|
||||
@ -89,6 +90,8 @@ class GUI_EXPORT QgsGui
|
||||
*/
|
||||
static QgsLayoutItemGuiRegistry *layoutItemGuiRegistry();
|
||||
|
||||
static QgsProcessingGuiRegistry *processingGuiRegistry();
|
||||
|
||||
/**
|
||||
* Register the widget to allow its position to be automatically saved and restored when open and closed.
|
||||
* Use this to avoid needing to call saveGeometry() and restoreGeometry() on your widget.
|
||||
@ -109,6 +112,7 @@ class GUI_EXPORT QgsGui
|
||||
QgsLayerTreeEmbeddedWidgetRegistry *mLayerTreeEmbeddedWidgetRegistry = nullptr;
|
||||
QgsMapLayerActionRegistry *mMapLayerActionRegistry = nullptr;
|
||||
QgsLayoutItemGuiRegistry *mLayoutItemGuiRegistry = nullptr;
|
||||
QgsProcessingGuiRegistry *mProcessingGuiRegistry = nullptr;
|
||||
|
||||
#ifdef SIP_RUN
|
||||
QgsGui( const QgsGui &other );
|
||||
|
Loading…
x
Reference in New Issue
Block a user