QGIS API Documentation 3.99.0-Master (26c88405ac0)
Loading...
Searching...
No Matches
qgstaskmanagerwidget.h
Go to the documentation of this file.
1/***************************************************************************
2 qgstaskmanagerwidget.h
3 ----------------------
4 begin : April 2016
5 copyright : (C) 2016 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17#ifndef QGSTASKMANAGERWIDGET_H
18#define QGSTASKMANAGERWIDGET_H
19
20#include "qgis_gui.h"
21#include "qgis_sip.h"
22#include "qgsfloatingwidget.h"
23#include "qgstaskmanager.h"
24
25#include <QStyledItemDelegate>
26#include <QToolButton>
27
28class QgsTaskManager;
29class QgsTask;
30class QTreeView;
31class QProgressBar;
32class QgsTaskManagerModel;
33
40class GUI_EXPORT QgsTaskManagerWidget : public QWidget
41{
42 Q_OBJECT
43
44 public:
45
51 QgsTaskManagerWidget( QgsTaskManager *manager, QWidget *parent SIP_TRANSFERTHIS = nullptr );
52
53 ~QgsTaskManagerWidget() override;
54
55 private slots:
56
57 void modelRowsInserted( const QModelIndex &index, int start, int end );
58 void clicked( const QModelIndex &index );
59
60 private:
61 QgsTaskManager *mManager = nullptr;
62 QTreeView *mTreeView = nullptr;
63 QgsTaskManagerModel *mModel = nullptr;
64};
65
66#ifndef SIP_RUN
67
69
76class GUI_EXPORT QgsTaskManagerFloatingWidget : public QgsFloatingWidget
77{
78 Q_OBJECT
79
80 public:
81
87 QgsTaskManagerFloatingWidget( QgsTaskManager *manager, QWidget *parent = nullptr );
88};
89
97class GUI_EXPORT QgsTaskManagerStatusBarWidget : public QToolButton
98{
99 Q_OBJECT
100
101 public:
102
108 QgsTaskManagerStatusBarWidget( QgsTaskManager *manager, QWidget *parent = nullptr );
109
110 QSize sizeHint() const override;
111
112 protected:
113 void changeEvent( QEvent *event ) override;
114
115 private slots:
116
117 void toggleDisplay();
118 void overallProgressChanged( double progress );
119 void countActiveTasksChanged( int count );
120 void allFinished();
121 void showButton();
122
123 private:
124 QgsTaskManagerFloatingWidget *mFloatingWidget = nullptr;
125 QProgressBar *mProgressBar = nullptr;
126 QgsTaskManager *mManager = nullptr;
127};
128
135class GUI_EXPORT QgsTaskManagerModel : public QAbstractItemModel
136{
137 Q_OBJECT
138
139 public:
140 enum Columns
141 {
142 Description = 0,
143 Progress = 1,
144 Status = 2,
145 };
146
147 // *INDENT-OFF*
148
155 enum class CustomRole SIP_MONKEYPATCH_SCOPEENUM_UNNEST( QgsTaskManagerModel, Roles ) : int
156 {
157 Status SIP_MONKEYPATCH_COMPAT_NAME( StatusRole ) = Qt::UserRole,
158 };
159 Q_ENUM( CustomRole )
160 // *INDENT-ON*
161
162
167 explicit QgsTaskManagerModel( QgsTaskManager *manager, QObject *parent = nullptr );
168
169 //reimplemented QAbstractItemModel methods
170 QModelIndex index( int row, int column, const QModelIndex &parent = QModelIndex() ) const override;
171 QModelIndex parent( const QModelIndex &index ) const override;
172 int rowCount( const QModelIndex &parent = QModelIndex() ) const override;
173 int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
174 QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const override;
175 Qt::ItemFlags flags( const QModelIndex &index ) const override;
176 bool setData( const QModelIndex &index, const QVariant &value, int role = Qt::EditRole ) override;
177
182 QgsTask *indexToTask( const QModelIndex &index ) const;
183
184 private slots:
185
186 void taskAdded( long id );
187 void taskDeleted( long id );
188 void progressChanged( long id, double progress );
189 void statusChanged( long id, int status );
190
191 private:
192 enum ToolTipType
193 {
194 ToolTipDescription,
195 ToolTipStatus,
196 ToolTipProgress,
197 };
198
199 QgsTaskManager *mManager = nullptr;
200
201 QList<long> mRowToTaskIdList;
202
203
204 int idToRow( long id ) const;
205 QModelIndex idToIndex( long id, int column ) const;
206 static QString createTooltip( QgsTask *task, ToolTipType type );
207
208 friend class QgsTaskManagerStatusBarWidget;
209};
210
216class GUI_EXPORT QgsTaskStatusWidget : public QWidget
217{
218 Q_OBJECT
219
220 public:
221
226 QgsTaskStatusWidget( QWidget *parent = nullptr, QgsTask::TaskStatus status = QgsTask::Queued, bool canCancel = true );
227
228
229 QSize sizeHint() const override;
230
231 //bool editorEvent( QEvent * event, QAbstractItemModel * model, const QStyleOptionViewItem & option, const QModelIndex & index ) override;
232
233 public slots:
234
238 void setStatus( int status );
239
240 signals:
241
245 void cancelClicked();
246
247 protected:
248 void paintEvent( QPaintEvent *e ) override;
249 void mousePressEvent( QMouseEvent *e ) override;
250 void mouseMoveEvent( QMouseEvent *e ) override;
251 void leaveEvent( QEvent *e ) override;
252
253 private:
254 bool mCanCancel;
255 QgsTask::TaskStatus mStatus;
256 bool mInside = false;
257};
258
261
262#endif
263
264#endif //QGSTASKMANAGERWIDGET_H
A QWidget subclass for creating widgets which float outside of the normal Qt layout system.
QgsTaskManagerWidget(QgsTaskManager *manager, QWidget *parent=nullptr)
Constructor for QgsTaskManagerWidget.
Task manager for managing a set of long-running QgsTask tasks.
Abstract base class for long running background tasks.
TaskStatus
Status of tasks.
@ Queued
Task is queued and has not begun.
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:53
#define SIP_MONKEYPATCH_SCOPEENUM_UNNEST(OUTSIDE_CLASS, FORMERNAME)
Definition qgis_sip.h:268
#define SIP_MONKEYPATCH_COMPAT_NAME(FORMERNAME)
Definition qgis_sip.h:270