16#ifndef QGSPROCESSINGALGORITHMWIDGETBASE_H
17#define QGSPROCESSINGALGORITHMWIDGETBASE_H
19#include "ui_qgsprocessingalgorithmdialogbase.h"
20#include "ui_qgsprocessingalgorithmprogressdialogbase.h"
21#include "ui_qgsprocessingcontextoptionsbase.h"
35class QgsProcessingContextOptionsWidget;
39class QgsDockableWidgetHelper;
41class QgsProcessingParametersWidget;
49class GUI_EXPORT QgsProcessingFeedbackGenerator
52 virtual ~QgsProcessingFeedbackGenerator();
57 virtual QgsProcessingFeedback *createFeedback() = 0
SIP_FACTORY;
75 enum class LogFormat :
int
80 Q_ENUM( QgsProcessingAlgorithmWidgetBase::LogFormat )
87 enum class WidgetMode :
int
92 Q_ENUM( QgsProcessingAlgorithmWidgetBase::WidgetMode )
110 Q_DECLARE_FLAGS( WidgetFlags, WidgetFlag )
111 Q_FLAG( WidgetFlags )
116 QgsProcessingAlgorithmWidgetBase(
118 QgsProcessingAlgorithmWidgetBase::WidgetMode mode = QgsProcessingAlgorithmWidgetBase::WidgetMode::Single,
119 QgsProcessingAlgorithmWidgetBase::WidgetFlags flags = QgsProcessingAlgorithmWidgetBase::WidgetFlags(),
122 ~QgsProcessingAlgorithmWidgetBase()
override;
143 void setMainWidget( QgsPanelWidget *widget
SIP_TRANSFER );
149 QgsPanelWidget *mainWidget();
168 bool wasExecuted()
const {
return mExecuted; }
175 QVariantMap results()
const {
return mResults; }
190 void registerProcessingFeedbackGenerator( QgsProcessingFeedbackGenerator *generator );
198 QgsProcessingFeedback *createFeedback()
SIP_FACTORY;
206 void saveLogToFile( const QString &path, QgsProcessingAlgorithmWidgetBase::LogFormat format = QgsProcessingAlgorithmWidgetBase::LogFormat::FormatPlainText );
214 Qgis::ProcessingLogLevel logLevel() const;
222 void setLogLevel( Qgis::ProcessingLogLevel level );
229 virtual
void setParameters( const QVariantMap &values );
236 void setTitle( const QString &title );
254 void reportError( const QString &error,
bool fatalError );
259 void pushWarning( const QString &warning );
264 void pushInfo( const QString &info );
273 void pushFormattedMessage( const QString &html );
278 void pushDebugInfo( const QString &message );
283 void pushCommandInfo( const QString &info );
288 void setPercentage(
double percent );
293 void setProgressText( const QString &text );
298 void pushConsoleInfo( const QString &info );
304 QDialog *createProgressDialog();
323 void copyLogToClipboard();
328 void showParameters();
343 virtual
bool isRunning();
368 void hideShortHelp();
373 QgsMessageBar *messageBar();
378 QPushButton *runButton();
381 void closeEvent( QCloseEvent *e ) override;
386 QPushButton *cancelButton();
391 QPushButton *changeParametersButton();
396 QDialogButtonBox *buttonBox();
401 QTabWidget *tabWidget();
406 void clearProgress();
413 void setExecuted(
bool executed );
418 void setExecutedAnyResult(
bool executedAnyResult );
425 void setResults( const QVariantMap &results );
430 void setInfo( const QString &message,
bool isError = false,
bool escapeHtml = true,
bool isWarning = false );
441 virtual
void resetAdditionalGui();
446 void updateRunButtonVisibility();
452 void blockControlsWhileRunning();
458 virtual
void blockAdditionalControlsWhileRunning();
464 void setCurrentTask( QgsProcessingAlgRunnerTask *task
SIP_TRANSFER );
470 static QString formatStringForLog( const QString &
string );
477 virtual
bool isFinalized();
486 void applyContextOverrides( QgsProcessingContext *context );
497 void algorithmAboutToRun( QgsProcessingContext *context );
504 void algorithmFinished(
bool successful, const QVariantMap &result );
519 virtual
void finished(
bool successful, const QVariantMap &result, QgsProcessingContext &context, QgsProcessingFeedback *feedback );
524 virtual
void runAlgorithm();
531 virtual
void algExecuted(
bool successful, const QVariantMap &results );
536 void toggleCollapsed();
538 void splitterChanged(
int pos,
int index );
539 void mTabWidget_currentChanged(
int index );
540 void linkClicked( const QUrl &url );
541 void taskTriggered( QgsTask *task );
543 void urlClicked( const QUrl &url );
552 void disconnectCurrentTask();
554 QgsDockableWidgetHelper *mDockableWidgetHelper =
nullptr;
556 WidgetMode mMode = WidgetMode::Single;
558 QPushButton *mButtonRun =
nullptr;
559 QPushButton *mButtonClose =
nullptr;
560 QPushButton *mButtonChangeParameters =
nullptr;
561 QByteArray mSplitterState;
562 QToolButton *mButtonCollapse =
nullptr;
563 QgsMessageBar *mMessageBar =
nullptr;
564 QPushButton *mAdvancedButton =
nullptr;
565 QMenu *mAdvancedMenu =
nullptr;
566 QAction *mCopyAsQgisProcessCommand =
nullptr;
567 QAction *mPasteJsonAction =
nullptr;
568 QAction *mContextSettingsAction =
nullptr;
570 bool mExecuted = false;
571 bool mExecutedAnyResult = false;
572 QVariantMap mResults;
573 QgsPanelWidget *mMainWidget =
nullptr;
574 QgsProcessingFeedbackGenerator *mFeedbackFactory =
nullptr;
575 std::unique_ptr<QgsProcessingAlgorithm> mAlgorithm;
576 QgsProcessingAlgRunnerTask *mAlgorithmTask =
nullptr;
578 bool mHelpCollapsed = false;
580 int mMessageLoggedCount = 0;
582 Qgis::ProcessingLogLevel mLogLevel = Qgis::ProcessingLogLevel::DefaultLevel;
584 QPointer<QgsProcessingContextOptionsWidget> mContextOptionsWidget;
585 bool mOverrideDefaultContextSettings = false;
586 Qgis::InvalidGeometryCheck mGeometryCheck = Qgis::InvalidGeometryCheck::AbortOnInvalid;
587 Qgis::DistanceUnit mDistanceUnits = Qgis::DistanceUnit::Unknown;
588 Qgis::AreaUnit mAreaUnits = Qgis::AreaUnit::Unknown;
589 QString mTemporaryFolderOverride;
590 int mMaximumThreads = QThread::idealThreadCount();
592 QString formatHelp( QgsProcessingAlgorithm *
algorithm );
593 void scrollToBottomOfLog();
594 void processEvents();
605class GUI_EXPORT QgsProcessingAlgorithmWidget : public QgsProcessingAlgorithmWidgetBase
613 QgsProcessingAlgorithmWidget(
615 bool inPlace =
false,
617 QgsProcessingAlgorithmWidgetBase::WidgetFlags flags = QgsProcessingAlgorithmWidgetBase::WidgetFlags(),
624 bool inPlace()
const;
626 void setParameters(
const QVariantMap &values )
override;
628 QgsProcessingContext *processingContext()
const override;
634 virtual QgsProcessingParametersWidget *createParametersPanel(
bool inPlaceMode, QgsVectorLayer *activeLayer, QgsMessageBar *messageBar );
639 QgsProcessingParametersWidget *parametersWidget();
646 bool handleValidationResults(
const QList< QgsProcessingParametersGenerator::ParameterValidationResult > &results );
652 void flagInvalidParameterValue(
const QString &message, QWidget *widget );
657 void flagInvalidOutputExtension(
const QString &message, QWidget *widget );
659 mutable std::unique_ptr< QgsProcessingContext > mContext;
660 mutable std::unique_ptr< QgsProcessingFeedback > mFeedback;
662 bool mInPlace =
false;
663 QList< QWidget * > mWidgetsToResetPalette;
673class QgsProcessingAlgorithmProgressDialog :
public QDialog,
private Ui::QgsProcessingProgressDialogBase
681 QgsProcessingAlgorithmProgressDialog( QWidget *parent =
nullptr );
686 QProgressBar *progressBar();
691 QPushButton *cancelButton();
696 QTextEdit *logTextEdit();
700 void reject()
override;
709class GUI_EXPORT QgsProcessingContextOptionsWidget :
public QgsPanelWidget,
private Ui::QgsProcessingContextOptionsBase
717 QgsProcessingContextOptionsWidget( QWidget *parent
SIP_TRANSFERTHIS =
nullptr );
722 void setFromContext(
const QgsProcessingContext *context );
742 QString temporaryFolder();
747 int maximumThreads()
const;
DistanceUnit
Units of distance.
InvalidGeometryCheck
Methods for handling of features with invalid geometries.
DockableWidgetInitialState
Dockable widget initial states.
@ RestorePreviousState
Restore the previous state of this dock.
ProcessingLogLevel
Logging level for algorithms to use when pushing feedback messages.
A bar for displaying non-blocking messages to the user.
QgsTask task which runs a QgsProcessingAlgorithm in a background task.
Abstract base class for processing algorithms.
An interface for objects which can create Processing contexts.
An interface for objects which can create sets of parameter values for processing algorithms.
Abstract base class for long running background tasks.
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into allowing algorithms to be written in pure substantial changes are required in order to port existing x Processing algorithms for QGIS x The most significant changes are outlined not GeoAlgorithm For algorithms which operate on features one by consider subclassing the QgsProcessingFeatureBasedAlgorithm class This class allows much of the boilerplate code for looping over features from a vector layer to be bypassed and instead requires implementation of a processFeature method Ensure that your algorithm(or algorithm 's parent class) implements the new pure virtual createInstance(self) call
#define SIP_ENUM_BASETYPE(type)