1
0
mirror of https://github.com/qgis/QGIS.git synced 2025-04-23 00:03:02 -04:00
QGIS/src/gui/processing/qgsprocessingalgorithmconfigurationwidget.h
2019-02-20 05:39:04 +10:00

142 lines
4.6 KiB
C++

/***************************************************************************
qgsprocessingalgorithmconfig.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 QGSPROCESSINGALGORITHMCONFIGURATIONWIDGET_H
#define QGSPROCESSINGALGORITHMCONFIGURATIONWIDGET_H
#include <QWidget>
#include <QVariantMap>
#include "qgis_gui.h"
#include "qgis_sip.h"
#include "qgsprocessingwidgetwrapper.h"
class QgsProcessingAlgorithm;
class QgsProcessingAlgorithmConfigurationWidget;
/**
* A configuration widget for processing algorithms allows providing additional
* configuration options directly on algorithm level, in addition to parameters.
*
* \ingroup gui
* \since QGIS 3.2
*/
class GUI_EXPORT QgsProcessingAlgorithmConfigurationWidget : public QWidget, public QgsExpressionContextGenerator
{
Q_OBJECT
public:
/**
* Creates a new QgsProcessingAlgorithmConfigurationWidget
*/
QgsProcessingAlgorithmConfigurationWidget( QWidget *parent = nullptr );
~QgsProcessingAlgorithmConfigurationWidget() override = default;
/**
* Read the current configuration from this widget.
*/
virtual QVariantMap configuration() const = 0;
/**
* Set the configuration which this widget should represent.
*/
virtual void setConfiguration( const QVariantMap &configuration ) = 0;
/**
* Sets the \a context in which the Processing algorithm widget is shown, e.g., the
* parent model algorithm, a linked map canvas, and other relevant information which allows the widget
* to fine-tune its behavior.
*
* Subclasses should take care to call the base class method when reimplementing this method.
*
* \see widgetContext()
* \since QGIS 3.6
*/
virtual void setWidgetContext( const QgsProcessingParameterWidgetContext &context );
/**
* Returns the context in which the Processing algorithm widget is shown, e.g., the
* parent model algorithm, a linked map canvas, and other relevant information which allows the widget
* to fine-tune its behavior.
*
* \see setWidgetContext()
* \since QGIS 3.6
*/
const QgsProcessingParameterWidgetContext &widgetContext() const;
/**
* Sets the algorithm instance associated with the widget.
*
* \see algorithm()
* \since QGIS 3.6
*/
void setAlgorithm( const QgsProcessingAlgorithm *algorithm );
/**
* Returns the algorithm instance associated with this widget.
*
* \see setAlgorithm()
* \since QGIS 3.6
*/
const QgsProcessingAlgorithm *algorithm() const { return mAlgorithm; }
/**
* Registers a Processing context \a generator class that will be used to retrieve
* a Processing context for the widget when required.
*
* \since QGIS 3.6
*/
void registerProcessingContextGenerator( QgsProcessingContextGenerator *generator );
QgsExpressionContext createExpressionContext() const override;
private:
QgsProcessingContextGenerator *mContextGenerator = nullptr;
const QgsProcessingAlgorithm *mAlgorithm = nullptr;
QgsProcessingParameterWidgetContext mWidgetContext;
};
/**
* Interface base class for factories for algorithm configuration widgets.
*
* \ingroup gui
* \since QGIS 3.2
*/
class GUI_EXPORT QgsProcessingAlgorithmConfigurationWidgetFactory
{
public:
virtual ~QgsProcessingAlgorithmConfigurationWidgetFactory() = default;
/**
* Create a new configuration widget for \a algorithm.
*/
virtual QgsProcessingAlgorithmConfigurationWidget *create( const QgsProcessingAlgorithm *algorithm ) const = 0 SIP_FACTORY;
/**
* Check if this factory can create widgets for \a algorithm.
*/
virtual bool canCreateFor( const QgsProcessingAlgorithm *algorithm ) const = 0;
};
#endif // QGSPROCESSINGALGORITHMCONFIGURATIONWIDGET_H