QGIS API Documentation 3.99.0-Master (09f76ad7019)
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;
36
38
45class GUI_EXPORT QgsModelGraphicsScene : public QGraphicsScene
46{
47 Q_OBJECT
48
49 public:
51 enum ZValues
52 {
53 GroupBox = 0,
54 ArrowLink = 1,
55 ArrowDecoration = 2,
56 ModelComponent = 10,
57 MouseHandles = 99,
58 RubberBand = 100,
59 ZSnapIndicator = 101,
60
61 };
62
64 enum Flag SIP_ENUM_BASETYPE( IntFlag )
65 {
66 FlagHideControls = 1 << 1,
67 FlagHideComments = 1 << 2,
68 FlagHideFeatureCount = 1 << 3,
69 };
70 Q_DECLARE_FLAGS( Flags, Flag )
71
72
75 QgsModelGraphicsScene( QObject *parent SIP_TRANSFERTHIS = nullptr );
76
77 QgsProcessingModelAlgorithm *model();
78
79 void setModel( QgsProcessingModelAlgorithm *model );
80
86 void setFlags( QgsModelGraphicsScene::Flags flags ) { mFlags = flags; }
87
94 void setFlag( QgsModelGraphicsScene::Flag flag, bool on = true );
95
101 QgsModelGraphicsScene::Flags flags() const { return mFlags; }
102
103 void mousePressEvent( QGraphicsSceneMouseEvent *event ) override;
104
108 void createItems( QgsProcessingModelAlgorithm *model, QgsProcessingContext &context );
109
113 QList<QgsModelComponentGraphicItem *> selectedComponentItems();
114
118 QgsModelComponentGraphicItem *componentItemAt( QPointF position ) const;
119
123 QgsModelComponentGraphicItem *groupBoxItem( const QString &uuid );
124
130 QgsModelChildAlgorithmGraphicItem *childAlgorithmItem( const QString &childId );
131
137 QgsModelComponentGraphicItem *parameterItem( const QString &name );
138
142 void selectAll();
143
150 void deselectAll();
151
155 void setSelectedItem( QgsModelComponentGraphicItem *item );
156
160 void setLastRunResult( const QgsProcessingModelResult &result, QgsProcessingContext &context );
161
167 QgsMessageBar *messageBar() const;
168
174 void setMessageBar( QgsMessageBar *bar );
175
179 void showWarning( const QString &shortMessage, const QString &title, const QString &longMessage, Qgis::MessageLevel level = Qgis::MessageLevel::Warning ) const;
180
186 void requestRebuildRequired();
187
195 void updateBounds();
196
197 signals:
198
202 void rebuildRequired();
203
210 void componentAboutToChange( const QString &text, int id = 0 );
211
215 void componentChanged();
216
221 void selectedItemChanged( QgsModelComponentGraphicItem *selected );
222
228 void runSelected();
229
235 void runFromChild( const QString &childId );
236
242 void showChildAlgorithmOutputs( const QString &childId );
243
249 void showChildAlgorithmLog( const QString &childId );
250
251 protected:
255 virtual QgsModelComponentGraphicItem *createParameterGraphicItem( QgsProcessingModelAlgorithm *model, QgsProcessingModelParameter *param ) const SIP_FACTORY;
256
260 virtual QgsModelChildAlgorithmGraphicItem *createChildAlgGraphicItem( QgsProcessingModelAlgorithm *model, QgsProcessingModelChildAlgorithm *child ) const SIP_FACTORY;
261
265 virtual QgsModelComponentGraphicItem *createOutputGraphicItem( QgsProcessingModelAlgorithm *model, QgsProcessingModelOutput *output ) const SIP_FACTORY;
266
270 virtual QgsModelComponentGraphicItem *createCommentGraphicItem( QgsProcessingModelAlgorithm *model, QgsProcessingModelComment *comment, QgsModelComponentGraphicItem *parentItem ) const SIP_FACTORY;
271
275 QgsModelComponentGraphicItem *createGroupBoxGraphicItem( QgsProcessingModelAlgorithm *model, QgsProcessingModelGroupBox *box ) const SIP_FACTORY;
276
277 private:
278 struct LinkSource
279 {
280 QgsModelComponentGraphicItem *item = nullptr;
281 Qt::Edge edge = Qt::LeftEdge;
282 int linkIndex = -1;
283 };
284 QList<LinkSource> linkSourcesForParameterValue( QgsProcessingModelAlgorithm *model, const QVariant &value, const QString &childId, QgsProcessingContext &context ) const;
285
286 void addCommentItemForComponent( QgsProcessingModelAlgorithm *model, const QgsProcessingModelComponent &component, QgsModelComponentGraphicItem *parentItem );
287 void addFeatureCountItemForArrow( QgsModelArrowItem *arrow, const QString &layerId );
288
289 Flags mFlags = Flags();
290
291 QgsProcessingModelAlgorithm *mModel = nullptr;
292
293 QMap<QString, QgsModelComponentGraphicItem *> mParameterItems;
294 QMap<QString, QgsModelChildAlgorithmGraphicItem *> mChildAlgorithmItems;
295 QMap<QString, QMap<QString, QgsModelComponentGraphicItem *>> mOutputItems;
296 QMap<QString, QgsModelComponentGraphicItem *> mGroupBoxItems;
297 QgsProcessingModelResult mLastResult;
298 QMap<QString, long long> mLastResultCount;
299
300 static constexpr int SCENE_COMPONENT_MARGIN = 50;
301
302 QgsMessageBar *mMessageBar = nullptr;
303};
304
305Q_DECLARE_METATYPE( QgsModelGraphicsScene::Flags )
306
307
308
309#endif // QGSMODELCOMPONENTGRAPHICITEM_H
MessageLevel
Level for messages This will be used both for message log and message bar in application.
Definition qgis.h:159
@ Warning
Warning message.
Definition qgis.h:161
A bar for displaying non-blocking messages to the user.
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:53
#define SIP_ENUM_BASETYPE(type)
Definition qgis_sip.h:275
#define SIP_FACTORY
Definition qgis_sip.h:84
Q_DECLARE_METATYPE(QgsDatabaseQueryLogEntry)