QGIS API Documentation 4.3.0-Master (d3b565c628d)
Loading...
Searching...
No Matches
qgsmodelgraphicsscene.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsmodelgraphicsscene.h
3 -----------------------
4 Date : March 2020
5 Copyright : (C) 2020 Nyall Dawson
6 Email : nyall dot dawson at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16#ifndef QGSMODELGRAPHICSCENE_H
17#define QGSMODELGRAPHICSCENE_H
18
19#include "qgis.h"
20#include "qgis_gui.h"
22
23#include <QGraphicsScene>
24
25class QgsProcessingModelAlgorithm;
26class QgsModelComponentGraphicItem;
27class QgsProcessingModelParameter;
28class QgsProcessingModelChildAlgorithm;
29class QgsProcessingModelOutput;
30class QgsProcessingModelComponent;
31class QgsProcessingModelComment;
32class QgsModelChildAlgorithmGraphicItem;
33class QgsProcessingModelGroupBox;
34class QgsMessageBar;
35class QgsModelArrowItem;
38
40
47class GUI_EXPORT QgsModelGraphicsScene : public QGraphicsScene
48{
49 Q_OBJECT
50
51 public:
53 enum ZValues
54 {
55 GroupBox = 0,
56 ArrowLink = 1,
57 ArrowDecoration = 2,
58 ModelComponent = 10,
59 MouseHandles = 99,
60 RubberBand = 100,
61 ZSnapIndicator = 101,
62
63 };
64
66 enum Flag SIP_ENUM_BASETYPE( IntFlag )
67 {
68 FlagHideControls = 1 << 1,
69 FlagHideComments = 1 << 2,
70 FlagHideFeatureCount = 1 << 3,
71 };
72 Q_DECLARE_FLAGS( Flags, Flag )
73
74
77 QgsModelGraphicsScene( QObject *parent SIP_TRANSFERTHIS = nullptr );
78
79 QgsProcessingModelAlgorithm *model();
80
81 void setModel( QgsProcessingModelAlgorithm *model );
82
88 void setFlags( QgsModelGraphicsScene::Flags flags ) { mFlags = flags; }
89
96 void setFlag( QgsModelGraphicsScene::Flag flag, bool on = true );
97
103 QgsModelGraphicsScene::Flags flags() const { return mFlags; }
104
105 void mousePressEvent( QGraphicsSceneMouseEvent *event ) override;
106
110 void createItems( QgsProcessingModelAlgorithm *model, QgsProcessingContext &context );
111
115 QList<QgsModelComponentGraphicItem *> selectedComponentItems();
116
120 SIP_SKIP QgsModelComponentGraphicItem *componentItemAt( QPointF position ) const;
121
125 SIP_SKIP QgsModelComponentGraphicItem *groupBoxItem( const QString &uuid );
126
132 SIP_SKIP QgsModelChildAlgorithmGraphicItem *childAlgorithmItem( const QString &childId );
133
142 void resetChildAlgorithmItems( const QSet<QString> &childAlgorithmSubset = QSet<QString>() );
143
149 QgsModelComponentGraphicItem *parameterItem( const QString &name );
150
156 QgsModelComponentGraphicItem *outputItem( const QString &childId, const QString &childOutputName );
157
161 void selectAll();
162
169 void deselectAll();
170
174 void setSelectedItem( QgsModelComponentGraphicItem *item );
175
179 void setLastRunResult( const QgsProcessingModelResult &result, QgsProcessingContext &context );
180
186 QgsMessageBar *messageBar() const;
187
193 void setMessageBar( QgsMessageBar *bar );
194
198 void showWarning( const QString &shortMessage, const QString &title, const QString &longMessage, Qgis::MessageLevel level = Qgis::MessageLevel::Warning ) const;
199
205 void requestRebuildRequired();
206
214 void updateBounds();
215
224 void setupFeedbackConnections( QgsProcessingModelFeedback *feedback ) SIP_SKIP;
225
231 void flagChildrenAsOutdated( const QSet< QString > &children );
232
238 void registerWidgetContextGenerator( QgsProcessingWidgetContextGenerator *generator );
239
240 signals:
241
245 void rebuildRequired();
246
253 void componentAboutToChange( const QString &text, const QString &id = QString() );
254
258 void componentChanged();
259
264 void selectedItemChanged( QgsModelComponentGraphicItem *selected );
265
271 void runSelected();
272
278 void runFromChild( const QString &childId );
279
285 void showChildAlgorithmOutputs( const QString &childId );
286
292 void showChildAlgorithmLog( const QString &childId );
293
294 protected:
298 SIP_SKIP virtual QgsModelComponentGraphicItem *createParameterGraphicItem( QgsProcessingModelAlgorithm *model, QgsProcessingModelParameter *param ) const;
299
303 SIP_SKIP QgsModelChildAlgorithmGraphicItem *createChildAlgGraphicItem( QgsProcessingModelAlgorithm *model, QgsProcessingModelChildAlgorithm *child ) const;
304
308 virtual QgsModelComponentGraphicItem *createOutputGraphicItem( QgsProcessingModelAlgorithm *model, QgsProcessingModelOutput *output ) const SIP_FACTORY;
309
313 SIP_SKIP QgsModelComponentGraphicItem *createCommentGraphicItem( QgsProcessingModelAlgorithm *model, QgsProcessingModelComment *comment, QgsModelComponentGraphicItem *parentItem ) const;
314
318 SIP_SKIP QgsModelComponentGraphicItem *createGroupBoxGraphicItem( QgsProcessingModelAlgorithm *model, QgsProcessingModelGroupBox *box ) const;
319
320 private:
321 struct LinkSource
322 {
323 QgsModelComponentGraphicItem *item = nullptr;
324 Qt::Edge edge = Qt::LeftEdge;
325 int linkIndex = -1;
326 };
327 QList<LinkSource> linkSourcesForParameterValue( QgsProcessingModelAlgorithm *model, const QVariant &value, const QString &childId, QgsProcessingContext &context ) const;
328
329 void addCommentItemForComponent( QgsProcessingModelAlgorithm *model, const QgsProcessingModelComponent &component, QgsModelComponentGraphicItem *parentItem );
330 void addFeatureCountItemForArrow( QgsModelArrowItem *arrow, const QString &layerId );
331
332 Flags mFlags = Flags();
333
334 QgsProcessingModelAlgorithm *mModel = nullptr;
335
336 QMap<QString, QgsModelComponentGraphicItem *> mParameterItems;
337 QMap<QString, QgsModelChildAlgorithmGraphicItem *> mChildAlgorithmItems;
338 QMap<QString, QMap<QString, QgsModelComponentGraphicItem *>> mOutputItems;
339 QMap<QString, QgsModelComponentGraphicItem *> mGroupBoxItems;
340 QgsProcessingModelResult mLastResult;
341 QMap<QString, long long> mLastResultCount;
342
343 static constexpr int SCENE_COMPONENT_MARGIN = 500;
344
345 QgsProcessingWidgetContextGenerator *mWidgetContextGenerator = nullptr;
346
347 QgsMessageBar *mMessageBar = nullptr;
348};
349
350Q_DECLARE_METATYPE( QgsModelGraphicsScene::Flags )
351
352
353
354#endif // QGSMODELCOMPONENTGRAPHICITEM_H
MessageLevel
Level for messages This will be used both for message log and message bar in application.
Definition qgis.h:160
@ Warning
Warning message.
Definition qgis.h:162
A bar for displaying non-blocking messages to the user.
A Processing feedback class with extra signals and properties specific to feedback from Processing mo...
An interface for objects which can create Processing widget contexts.
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:52
#define SIP_ENUM_BASETYPE(type)
Definition qgis_sip.h:277
#define SIP_SKIP
Definition qgis_sip.h:138
#define SIP_FACTORY
Definition qgis_sip.h:83
Q_DECLARE_METATYPE(QgsDatabaseQueryLogEntry)