QGIS API Documentation 3.99.0-Master (2fe06baccd8)
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:
50 QgsTaskManagerWidget( QgsTaskManager *manager, QWidget *parent SIP_TRANSFERTHIS = nullptr );
51
52 ~QgsTaskManagerWidget() override;
53
54 private slots:
55
56 void modelRowsInserted( const QModelIndex &index, int start, int end );
57 void clicked( const QModelIndex &index );
58
59 private:
60 QgsTaskManager *mManager = nullptr;
61 QTreeView *mTreeView = nullptr;
62 QgsTaskManagerModel *mModel = nullptr;
63};
64
65#ifndef SIP_RUN
66
68
75class GUI_EXPORT QgsTaskManagerFloatingWidget : public QgsFloatingWidget
76{
77 Q_OBJECT
78
79 public:
85 QgsTaskManagerFloatingWidget( QgsTaskManager *manager, QWidget *parent = nullptr );
86};
87
95class GUI_EXPORT QgsTaskManagerStatusBarWidget : public QToolButton
96{
97 Q_OBJECT
98
99 public:
105 QgsTaskManagerStatusBarWidget( QgsTaskManager *manager, QWidget *parent = nullptr );
106
107 QSize sizeHint() const override;
108
109 protected:
110 void changeEvent( QEvent *event ) override;
111
112 private slots:
113
114 void toggleDisplay();
115 void overallProgressChanged( double progress );
116 void countActiveTasksChanged( int count );
117 void allFinished();
118 void showButton();
119
120 private:
121 QgsTaskManagerFloatingWidget *mFloatingWidget = nullptr;
122 QProgressBar *mProgressBar = nullptr;
123 QgsTaskManager *mManager = nullptr;
124};
125
132class GUI_EXPORT QgsTaskManagerModel : public QAbstractItemModel
133{
134 Q_OBJECT
135
136 public:
137 enum Columns
138 {
139 Description = 0,
140 Progress = 1,
141 Status = 2,
142 };
143
144 // *INDENT-OFF*
145
152 enum class CustomRole SIP_MONKEYPATCH_SCOPEENUM_UNNEST( QgsTaskManagerModel, Roles ) : int
153 {
154 Status SIP_MONKEYPATCH_COMPAT_NAME( StatusRole ) = Qt::UserRole,
155 };
156 Q_ENUM( CustomRole )
157 // *INDENT-ON*
158
159
164 explicit QgsTaskManagerModel( QgsTaskManager *manager, QObject *parent = nullptr );
165
166 //reimplemented QAbstractItemModel methods
167 QModelIndex index( int row, int column, const QModelIndex &parent = QModelIndex() ) const override;
168 QModelIndex parent( const QModelIndex &index ) const override;
169 int rowCount( const QModelIndex &parent = QModelIndex() ) const override;
170 int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
171 QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const override;
172 Qt::ItemFlags flags( const QModelIndex &index ) const override;
173 bool setData( const QModelIndex &index, const QVariant &value, int role = Qt::EditRole ) override;
174
179 QgsTask *indexToTask( const QModelIndex &index ) const;
180
181 private slots:
182
183 void taskAdded( long id );
184 void taskDeleted( long id );
185 void progressChanged( long id, double progress );
186 void statusChanged( long id, int status );
187
188 private:
189 enum ToolTipType
190 {
191 ToolTipDescription,
192 ToolTipStatus,
193 ToolTipProgress,
194 };
195
196 QgsTaskManager *mManager = nullptr;
197
198 QList<long> mRowToTaskIdList;
199
200
201 int idToRow( long id ) const;
202 QModelIndex idToIndex( long id, int column ) const;
203 static QString createTooltip( QgsTask *task, ToolTipType type );
204
205 friend class QgsTaskManagerStatusBarWidget;
206};
207
213class GUI_EXPORT QgsTaskStatusWidget : public QWidget
214{
215 Q_OBJECT
216
217 public:
222 QgsTaskStatusWidget( QWidget *parent = nullptr, QgsTask::TaskStatus status = QgsTask::Queued, bool canCancel = true );
223
224
225 QSize sizeHint() const override;
226
227 //bool editorEvent( QEvent * event, QAbstractItemModel * model, const QStyleOptionViewItem & option, const QModelIndex & index ) override;
228
229 public slots:
230
234 void setStatus( int status );
235
236 signals:
237
241 void cancelClicked();
242
243 protected:
244 void paintEvent( QPaintEvent *e ) override;
245 void mousePressEvent( QMouseEvent *e ) override;
246 void mouseMoveEvent( QMouseEvent *e ) override;
247 void leaveEvent( QEvent *e ) override;
248
249 private:
250 bool mCanCancel;
251 QgsTask::TaskStatus mStatus;
252 bool mInside = false;
253};
254
257
258#endif
259
260#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