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;
48class GUI_EXPORT QgsProcessingFeedbackGenerator
51 virtual ~QgsProcessingFeedbackGenerator();
56 virtual QgsProcessingFeedback *createFeedback() = 0
SIP_FACTORY;
74 enum class LogFormat :
int
79 Q_ENUM( QgsProcessingAlgorithmWidgetBase::LogFormat )
86 enum class WidgetMode :
int
91 Q_ENUM( QgsProcessingAlgorithmWidgetBase::WidgetMode )
109 Q_DECLARE_FLAGS( WidgetFlags, WidgetFlag )
110 Q_FLAG( WidgetFlags )
115 QgsProcessingAlgorithmWidgetBase(
117 QgsProcessingAlgorithmWidgetBase::WidgetMode mode = QgsProcessingAlgorithmWidgetBase::WidgetMode::Single,
118 QgsProcessingAlgorithmWidgetBase::WidgetFlags flags = QgsProcessingAlgorithmWidgetBase::WidgetFlags(),
121 ~QgsProcessingAlgorithmWidgetBase()
override;
142 void setMainWidget( QgsPanelWidget *widget
SIP_TRANSFER );
148 QgsPanelWidget *mainWidget();
167 bool wasExecuted()
const {
return mExecuted; }
174 QVariantMap results()
const {
return mResults; }
189 void registerProcessingFeedbackGenerator( QgsProcessingFeedbackGenerator *generator );
197 QgsProcessingFeedback *createFeedback()
SIP_FACTORY;
205 void saveLogToFile( const QString &path, QgsProcessingAlgorithmWidgetBase::LogFormat format = QgsProcessingAlgorithmWidgetBase::LogFormat::FormatPlainText );
213 Qgis::ProcessingLogLevel logLevel() const;
221 void setLogLevel( Qgis::ProcessingLogLevel level );
228 virtual
void setParameters( const QVariantMap &values );
235 void setTitle( const QString &title );
253 void reportError( const QString &error,
bool fatalError );
258 void pushWarning( const QString &warning );
263 void pushInfo( const QString &info );
272 void pushFormattedMessage( const QString &html );
277 void pushDebugInfo( const QString &message );
282 void pushCommandInfo( const QString &info );
287 void setPercentage(
double percent );
292 void setProgressText( const QString &text );
297 void pushConsoleInfo( const QString &info );
303 QDialog *createProgressDialog();
322 void copyLogToClipboard();
327 void showParameters();
342 virtual
bool isRunning();
367 void hideShortHelp();
372 QgsMessageBar *messageBar();
375 void closeEvent( QCloseEvent *e ) override;
380 QPushButton *runButton();
385 QPushButton *cancelButton();
390 QPushButton *changeParametersButton();
395 QDialogButtonBox *buttonBox();
400 QTabWidget *tabWidget();
405 void clearProgress();
412 void setExecuted(
bool executed );
417 void setExecutedAnyResult(
bool executedAnyResult );
424 void setResults( const QVariantMap &results );
429 void setInfo( const QString &message,
bool isError = false,
bool escapeHtml = true,
bool isWarning = false );
440 virtual
void resetAdditionalGui();
445 void updateRunButtonVisibility();
451 void blockControlsWhileRunning();
457 virtual
void blockAdditionalControlsWhileRunning();
463 void setCurrentTask( QgsProcessingAlgRunnerTask *task
SIP_TRANSFER );
469 static QString formatStringForLog( const QString &
string );
476 virtual
bool isFinalized();
485 void applyContextOverrides( QgsProcessingContext *context );
496 void algorithmAboutToRun( QgsProcessingContext *context );
503 void algorithmFinished(
bool successful, const QVariantMap &result );
518 virtual
void finished(
bool successful, const QVariantMap &result, QgsProcessingContext &context, QgsProcessingFeedback *feedback );
523 virtual
void runAlgorithm();
530 virtual
void algExecuted(
bool successful, const QVariantMap &results );
535 void toggleCollapsed();
537 void splitterChanged(
int pos,
int index );
538 void mTabWidget_currentChanged(
int index );
539 void linkClicked( const QUrl &url );
540 void taskTriggered( QgsTask *task );
542 void urlClicked( const QUrl &url );
551 void disconnectCurrentTask();
553 QgsDockableWidgetHelper *mDockableWidgetHelper =
nullptr;
555 WidgetMode mMode = WidgetMode::Single;
557 QPushButton *mButtonRun =
nullptr;
558 QPushButton *mButtonClose =
nullptr;
559 QPushButton *mButtonChangeParameters =
nullptr;
560 QByteArray mSplitterState;
561 QToolButton *mButtonCollapse =
nullptr;
562 QgsMessageBar *mMessageBar =
nullptr;
563 QPushButton *mAdvancedButton =
nullptr;
564 QMenu *mAdvancedMenu =
nullptr;
565 QAction *mCopyAsQgisProcessCommand =
nullptr;
566 QAction *mPasteJsonAction =
nullptr;
567 QAction *mContextSettingsAction =
nullptr;
569 bool mExecuted = false;
570 bool mExecutedAnyResult = false;
571 QVariantMap mResults;
572 QgsPanelWidget *mMainWidget =
nullptr;
573 QgsProcessingFeedbackGenerator *mFeedbackFactory =
nullptr;
574 std::unique_ptr<QgsProcessingAlgorithm> mAlgorithm;
575 QgsProcessingAlgRunnerTask *mAlgorithmTask =
nullptr;
577 bool mHelpCollapsed = false;
579 int mMessageLoggedCount = 0;
581 Qgis::ProcessingLogLevel mLogLevel = Qgis::ProcessingLogLevel::DefaultLevel;
583 QPointer<QgsProcessingContextOptionsWidget> mContextOptionsWidget;
584 bool mOverrideDefaultContextSettings = false;
585 Qgis::InvalidGeometryCheck mGeometryCheck = Qgis::InvalidGeometryCheck::AbortOnInvalid;
586 Qgis::DistanceUnit mDistanceUnits = Qgis::DistanceUnit::Unknown;
587 Qgis::AreaUnit mAreaUnits = Qgis::AreaUnit::Unknown;
588 QString mTemporaryFolderOverride;
589 int mMaximumThreads = QThread::idealThreadCount();
591 QString formatHelp( QgsProcessingAlgorithm *
algorithm );
592 void scrollToBottomOfLog();
593 void processEvents();
603class QgsProcessingAlgorithmProgressDialog :
public QDialog,
private Ui::QgsProcessingProgressDialogBase
611 QgsProcessingAlgorithmProgressDialog( QWidget *parent =
nullptr );
616 QProgressBar *progressBar();
621 QPushButton *cancelButton();
626 QTextEdit *logTextEdit();
630 void reject()
override;
639class GUI_EXPORT QgsProcessingContextOptionsWidget :
public QgsPanelWidget,
private Ui::QgsProcessingContextOptionsBase
647 QgsProcessingContextOptionsWidget( QWidget *parent
SIP_TRANSFERTHIS =
nullptr );
652 void setFromContext(
const QgsProcessingContext *context );
672 QString temporaryFolder();
677 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)