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 QgsProcessingModelAlgorithm *model();
85 void setModel( QgsProcessingModelAlgorithm *model
SIP_TRANSFER );
90 void loadModel(
const QString &path );
97 void handleVersionMismatch(
const QString &modelVersion )
const SIP_SKIP;
105 void setModelScene( QgsModelGraphicsScene *scene
SIP_TRANSFER );
113 QgsModelGraphicsScene *modelScene();
116 QgsProcessingFeedback *createFeedback() override
SIP_FACTORY;
117 QgsProcessingParameterWidgetContext createWidgetContext() override;
133 void saveInProject();
145 QgsProcessingContext *processingContext() const override;
154 void exportToImage();
157 void exportAsPython();
158 void toggleComments(
bool show );
159 void toggleFeatureCount(
bool show );
160 void updateWindowTitle();
161 void deleteSelected();
162 void populateZoomToMenu();
164 void reorderInputs();
165 void reorderOutputs();
166 void setPanelVisibility(
bool hidden );
168 void runSelectedSteps();
169 void runFromChild( const QString &
id );
170 void run( const QSet<QString> &childAlgorithmSubset = QSet<QString>() );
171 void showChildAlgorithmOutputs( const QString &childId );
172 void showChildAlgorithmLog( const QString &childId );
173 void onItemFocused( QgsModelComponentGraphicItem *item );
175 void cancelRunningModel();
183 enum class SaveAction
192 void beginUndoCommand(
const QString &text,
const QString &
id = QString(), QgsModelUndoCommand::CommandOperation operation = QgsModelUndoCommand::CommandOperation::Unknown );
197 void endUndoCommand();
203 void abortUndoCommand();
205 void repaintModel(
bool showControls =
true );
207 void setDirty(
bool dirty );
212 bool validateSave( SaveAction action );
219 bool checkForUnsavedChanges();
224 void setLastRunResult(
const QgsProcessingModelResult &result );
233 void setModelName(
const QString &name );
235 bool saveModel(
bool saveAs =
false );
237 QPointF getPositionForParameterItem()
const;
238 QPointF getPositionForAlgorithmItem()
const;
244 void autoGenerateParameterName( QgsProcessingParameterDefinition *parameter )
const;
246 void addAlgorithm(
const QString &algorithmId,
const QPointF &pos );
247 void addInput(
const QString ¶meterType,
const QPointF &pos );
249 QgsProcessingAlgorithmWidget *createExecutionWidget();
251 void exportAsScriptAlgorithm();
253 std::unique_ptr< QgsProcessingContext > mContext;
255 std::unique_ptr<QgsProcessingModelAlgorithm> mModel;
257 QgsScreenHelper *mScreenHelper =
nullptr;
259 QgsMessageBar *mMessageBar =
nullptr;
260 QgsModelerToolboxModel *mAlgorithmsModel =
nullptr;
262 QPointer<QgsProcessingAlgorithmWidget> mAlgorithmWidget;
264 QVector<QPointer<QgsProcessingAlgorithmWidget>> mAlgorithmWidgetsToCleanUp;
266 QActionGroup *mToolsActionGroup =
nullptr;
268 QgsModelViewToolPan *mPanTool =
nullptr;
269 QObjectUniquePtr<QgsModelViewToolSelect> mSelectTool;
270 QgsModelGraphicsScene *mScene =
nullptr;
272 bool mHasChanged =
false;
273 QUndoStack *mUndoStack =
nullptr;
274 std::unique_ptr<QgsModelUndoCommand> mActiveCommand;
276 QAction *mUndoAction =
nullptr;
277 QAction *mRedoAction =
nullptr;
278 QUndoView *mUndoView =
nullptr;
279 QgsDockWidget *mUndoDock =
nullptr;
281 QMenu *mGroupMenu =
nullptr;
283 QAction *mActionCut =
nullptr;
284 QAction *mActionCopy =
nullptr;
285 QAction *mActionPaste =
nullptr;
286 int mBlockUndoCommands = 0;
287 int mIgnoreUndoStackChanges = 0;
289 QgsDockWidget *mConfigWidgetDock =
nullptr;
290 QgsModelDesignerConfigDockWidget *mConfigWidget =
nullptr;
294 int mBlockRepaints = 0;
296 QgsProcessingModelResult mLastResult;
297 QSet< QString > mOutdatedChildResults;
299 bool isDirty()
const;
301 void fillInputsTree();
302 void updateVariablesGui();
306 PanelStatus(
bool visible =
true,
bool active =
false )
307 : isVisible( visible )
313 QMap<QString, PanelStatus> mPanelStatus;
315 QgsProcessingContext mLayerStore;
320class GUI_EXPORT QgsModelChildDependenciesWidget :
public QWidget
325 QgsModelChildDependenciesWidget( QWidget *parent, QgsProcessingModelAlgorithm *model,
const QString &childId );
326 QList<QgsProcessingModelChildDependency> value()
const {
return mValue; }
327 void setValue(
const QList<QgsProcessingModelChildDependency> &value );
343 void updateSummaryText();
345 QLineEdit *mLineEdit =
nullptr;
346 QToolButton *mToolButton =
nullptr;
348 QgsProcessingModelAlgorithm *mModel =
nullptr;
351 QList<QgsProcessingModelChildDependency> mValue;
353 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.