16#ifndef QGSMODELDESIGNERDIALOG_H
17#define QGSMODELDESIGNERDIALOG_H
19#include "ui_qgsmodeldesignerdialogbase.h"
30class QgsProcessingModelAlgorithm;
31class QgsModelUndoCommand;
36class QgsProcessingAlgorithmWidgetBase;
49 explicit QgsModelerToolboxModel( QObject *parent =
nullptr );
50 Qt::ItemFlags flags(
const QModelIndex &index )
const override;
51 Qt::DropActions supportedDragActions()
const override;
62class GUI_EXPORT QgsModelDesignerDialog :
public QMainWindow,
63 public QgsProcessingFeedbackGenerator,
66 public Ui::QgsModelDesignerDialogBase
70 QgsModelDesignerDialog( QWidget *parent
SIP_TRANSFERTHIS =
nullptr, Qt::WindowFlags flags = Qt::WindowFlags() );
71 ~QgsModelDesignerDialog()
override;
73 void closeEvent( QCloseEvent *event )
override;
78 void beginUndoCommand(
const QString &text,
const QString &
id = QString(), QgsModelUndoCommand::CommandOperation operation
SIP_PYARGREMOVE = QgsModelUndoCommand::CommandOperation::Unknown );
83 void endUndoCommand();
89 void abortUndoCommand();
94 QgsProcessingModelAlgorithm *model();
101 void setModel( QgsProcessingModelAlgorithm *model
SIP_TRANSFER );
106 void loadModel(
const QString &path );
113 void setModelScene( QgsModelGraphicsScene *scene
SIP_TRANSFER );
121 QgsModelGraphicsScene *modelScene();
123 QgsProcessingFeedback *createFeedback() override
SIP_FACTORY;
124 QgsProcessingParameterWidgetContext createWidgetContext() override;
131 enum class SaveAction
148 virtual void repaintModel(
bool showControls =
true ) = 0;
149 virtual void addAlgorithm(
const QString &algorithmId,
const QPointF &pos ) = 0;
151 virtual void addInput(
const QString &inputId,
const QPointF &pos ) = 0;
153 virtual void exportAsScriptAlgorithm() = 0;
155 virtual bool saveModel(
bool saveAs =
false ) = 0;
157 virtual QgsProcessingAlgorithmWidgetBase *createExecutionWidget() = 0
SIP_TRANSFERBACK;
163 void registerProcessingContextGenerator( QgsProcessingContextGenerator *generator );
164 QgsProcessingContext *processingContext()
const override;
166 QToolBar *toolbar() {
return mToolbar; }
167 QAction *actionOpen() {
return mActionOpen; }
168 QAction *actionSaveInProject() {
return mActionSaveInProject; }
169 QAction *actionRun() {
return mActionRun; }
170 QgsMessageBar *messageBar() {
return mMessageBar; }
173 QgsModelGraphicsView *view() {
return mView; }
176 void setDirty(
bool dirty );
181 bool validateSave( SaveAction action );
188 bool checkForUnsavedChanges();
193 void setLastRunResult(
const QgsProcessingModelResult &result );
202 void setModelName(
const QString &name );
210 void exportToImage();
213 void exportAsPython();
214 void toggleComments(
bool show );
215 void toggleFeatureCount(
bool show );
216 void updateWindowTitle();
217 void deleteSelected();
218 void populateZoomToMenu();
220 void reorderInputs();
221 void reorderOutputs();
222 void setPanelVisibility(
bool hidden );
224 void runSelectedSteps();
225 void runFromChild(
const QString &
id );
226 void run(
const QSet<QString> &childAlgorithmSubset = QSet<QString>() );
227 void showChildAlgorithmOutputs(
const QString &childId );
228 void showChildAlgorithmLog(
const QString &childId );
229 void onItemFocused( QgsModelComponentGraphicItem *item );
231 void cancelRunningModel();
234 std::unique_ptr<QgsProcessingModelAlgorithm> mModel;
236 QgsScreenHelper *mScreenHelper =
nullptr;
238 QgsMessageBar *mMessageBar =
nullptr;
239 QgsModelerToolboxModel *mAlgorithmsModel =
nullptr;
241 QPointer<QgsProcessingAlgorithmWidgetBase> mAlgorithmWidget;
243 QVector<QPointer<QgsProcessingAlgorithmWidgetBase>> mAlgorithmWidgetsToCleanUp;
245 QActionGroup *mToolsActionGroup =
nullptr;
247 QgsModelViewToolPan *mPanTool =
nullptr;
248 QObjectUniquePtr<QgsModelViewToolSelect> mSelectTool;
249 QgsModelGraphicsScene *mScene =
nullptr;
251 bool mHasChanged =
false;
252 QUndoStack *mUndoStack =
nullptr;
253 std::unique_ptr<QgsModelUndoCommand> mActiveCommand;
255 QAction *mUndoAction =
nullptr;
256 QAction *mRedoAction =
nullptr;
257 QUndoView *mUndoView =
nullptr;
258 QgsDockWidget *mUndoDock =
nullptr;
260 QMenu *mGroupMenu =
nullptr;
262 QAction *mActionCut =
nullptr;
263 QAction *mActionCopy =
nullptr;
264 QAction *mActionPaste =
nullptr;
265 int mBlockUndoCommands = 0;
266 int mIgnoreUndoStackChanges = 0;
268 QgsDockWidget *mConfigWidgetDock =
nullptr;
269 QgsModelDesignerConfigDockWidget *mConfigWidget =
nullptr;
271 QgsProcessingContextGenerator *mProcessingContextGenerator =
nullptr;
275 int mBlockRepaints = 0;
277 QgsProcessingModelResult mLastResult;
278 QSet< QString > mOutdatedChildResults;
280 bool isDirty()
const;
282 void fillInputsTree();
283 void updateVariablesGui();
287 PanelStatus(
bool visible =
true,
bool active =
false )
288 : isVisible( visible )
294 QMap<QString, PanelStatus> mPanelStatus;
296 QgsProcessingContext mLayerStore;
300class GUI_EXPORT QgsModelChildDependenciesWidget :
public QWidget
305 QgsModelChildDependenciesWidget( QWidget *parent, QgsProcessingModelAlgorithm *model,
const QString &childId );
306 QList<QgsProcessingModelChildDependency> value()
const {
return mValue; }
307 void setValue(
const QList<QgsProcessingModelChildDependency> &value );
323 void updateSummaryText();
325 QLineEdit *mLineEdit =
nullptr;
326 QToolButton *mToolButton =
nullptr;
328 QgsProcessingModelAlgorithm *mModel =
nullptr;
331 QList<QgsProcessingModelChildDependency> mValue;
333 friend class TestProcessingGui;
A bar for displaying non-blocking messages to the user.
An interface for objects which can create Processing contexts.
Contains settings which reflect the context in which a Processing parameter widget is shown.
An interface for objects which can create Processing widget contexts.
A utility class for dynamic handling of changes to screen properties.