QGIS API Documentation 4.1.0-Master (ca2ac17535b)
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;
37
39
46class GUI_EXPORT QgsModelGraphicsScene : public QGraphicsScene
47{
48 Q_OBJECT
49
50 public:
52 enum ZValues
53 {
54 GroupBox = 0,
55 ArrowLink = 1,
56 ArrowDecoration = 2,
57 ModelComponent = 10,
58 MouseHandles = 99,
59 RubberBand = 100,
60 ZSnapIndicator = 101,
61
62 };
63
65 enum Flag SIP_ENUM_BASETYPE( IntFlag )
66 {
67 FlagHideControls = 1 << 1,
68 FlagHideComments = 1 << 2,
69 FlagHideFeatureCount = 1 << 3,
70 };
71 Q_DECLARE_FLAGS( Flags, Flag )
72
73
76 QgsModelGraphicsScene( QObject *parent SIP_TRANSFERTHIS = nullptr );
77
78 QgsProcessingModelAlgorithm *model();
79
80 void setModel( QgsProcessingModelAlgorithm *model );
81
87 void setFlags( QgsModelGraphicsScene::Flags flags ) { mFlags = flags; }
88
95 void setFlag( QgsModelGraphicsScene::Flag flag, bool on = true );
96
102 QgsModelGraphicsScene::Flags flags() const { return mFlags; }
103
104 void mousePressEvent( QGraphicsSceneMouseEvent *event ) override;
105
109 void createItems( QgsProcessingModelAlgorithm *model, QgsProcessingContext &context );
110
114 QList<QgsModelComponentGraphicItem *> selectedComponentItems();
115
119 QgsModelComponentGraphicItem *componentItemAt( QPointF position ) const;
120
124 QgsModelComponentGraphicItem *groupBoxItem( const QString &uuid );
125
131 QgsModelChildAlgorithmGraphicItem *childAlgorithmItem( const QString &childId );
132
141 void resetChildAlgorithmItems( const QSet<QString> &childAlgorithmSubset = QSet<QString>() );
142
148 QgsModelComponentGraphicItem *parameterItem( const QString &name );
149
155 QgsModelComponentGraphicItem *outputItem( const QString &childId, const QString &childOutputName );
156
160 void selectAll();
161
168 void deselectAll();
169
173 void setSelectedItem( QgsModelComponentGraphicItem *item );
174
178 void setLastRunResult( const QgsProcessingModelResult &result, QgsProcessingContext &context );
179
185 QgsMessageBar *messageBar() const;
186
192 void setMessageBar( QgsMessageBar *bar );
193
197 void showWarning( const QString &shortMessage, const QString &title, const QString &longMessage, Qgis::MessageLevel level = Qgis::MessageLevel::Warning ) const;
198
204 void requestRebuildRequired();
205
213 void updateBounds();
214
223 void setupFeedbackConnections( QgsProcessingModelFeedback *feedback ) SIP_SKIP;
224
230 void flagChildrenAsOutdated( const QSet< QString > &children );
231
232 signals:
233
237 void rebuildRequired();
238
245 void componentAboutToChange( const QString &text, const QString &id = QString() );
246
250 void componentChanged();
251
256 void selectedItemChanged( QgsModelComponentGraphicItem *selected );
257
263 void runSelected();
264
270 void runFromChild( const QString &childId );
271
277 void showChildAlgorithmOutputs( const QString &childId );
278
284 void showChildAlgorithmLog( const QString &childId );
285
286 protected:
290 virtual QgsModelComponentGraphicItem *createParameterGraphicItem( QgsProcessingModelAlgorithm *model, QgsProcessingModelParameter *param ) const SIP_FACTORY;
291
295 virtual QgsModelChildAlgorithmGraphicItem *createChildAlgGraphicItem( QgsProcessingModelAlgorithm *model, QgsProcessingModelChildAlgorithm *child ) const SIP_FACTORY;
296
300 virtual QgsModelComponentGraphicItem *createOutputGraphicItem( QgsProcessingModelAlgorithm *model, QgsProcessingModelOutput *output ) const SIP_FACTORY;
301
305 virtual QgsModelComponentGraphicItem *createCommentGraphicItem( QgsProcessingModelAlgorithm *model, QgsProcessingModelComment *comment, QgsModelComponentGraphicItem *parentItem ) const SIP_FACTORY;
306
310 QgsModelComponentGraphicItem *createGroupBoxGraphicItem( QgsProcessingModelAlgorithm *model, QgsProcessingModelGroupBox *box ) const SIP_FACTORY;
311
312 private:
313 struct LinkSource
314 {
315 QgsModelComponentGraphicItem *item = nullptr;
316 Qt::Edge edge = Qt::LeftEdge;
317 int linkIndex = -1;
318 };
319 QList<LinkSource> linkSourcesForParameterValue( QgsProcessingModelAlgorithm *model, const QVariant &value, const QString &childId, QgsProcessingContext &context ) const;
320
321 void addCommentItemForComponent( QgsProcessingModelAlgorithm *model, const QgsProcessingModelComponent &component, QgsModelComponentGraphicItem *parentItem );
322 void addFeatureCountItemForArrow( QgsModelArrowItem *arrow, const QString &layerId );
323
324 Flags mFlags = Flags();
325
326 QgsProcessingModelAlgorithm *mModel = nullptr;
327
328 QMap<QString, QgsModelComponentGraphicItem *> mParameterItems;
329 QMap<QString, QgsModelChildAlgorithmGraphicItem *> mChildAlgorithmItems;
330 QMap<QString, QMap<QString, QgsModelComponentGraphicItem *>> mOutputItems;
331 QMap<QString, QgsModelComponentGraphicItem *> mGroupBoxItems;
332 QgsProcessingModelResult mLastResult;
333 QMap<QString, long long> mLastResultCount;
334
335 static constexpr int SCENE_COMPONENT_MARGIN = 500;
336
337 QgsMessageBar *mMessageBar = nullptr;
338};
339
340Q_DECLARE_METATYPE( QgsModelGraphicsScene::Flags )
341
342
343
344#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...
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:52
#define SIP_ENUM_BASETYPE(type)
Definition qgis_sip.h:272
#define SIP_SKIP
Definition qgis_sip.h:133
#define SIP_FACTORY
Definition qgis_sip.h:83
Q_DECLARE_METATYPE(QgsDatabaseQueryLogEntry)