QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsmeshdatasetgrouptreeview.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsmeshdatasetgrouptreeview.h
3 -----------------------------
4 begin : June 2018
5 copyright : (C) 2018 by Peter Petrik
6 email : zilolv 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 QGSMESHDATASETGROUPTREE_H
17#define QGSMESHDATASETGROUPTREE_H
18
19#include "qgis_gui.h"
20
21#include <QObject>
22#include <QTreeView>
23#include <QMap>
24#include <QMenu>
25#include <QVector>
26#include <QItemSelection>
27#include <QStandardItemModel>
28#include <QStyledItemDelegate>
29#include <QList>
30#include <QSortFilterProxyModel>
31#include <memory>
32#include "qgsmeshdataset.h"
33
35
36class QgsMeshLayer;
37
42class QgsMeshDatasetGroupSaveMenu: public QObject
43{
44 Q_OBJECT
45 public:
46 QgsMeshDatasetGroupSaveMenu( QObject *parent = nullptr ): QObject( parent ) {}
47 QMenu *createSaveMenu( int groupIndex, QMenu *parentMenu = nullptr );
48
49 void setMeshLayer( QgsMeshLayer *meshLayer );
50
51 signals:
52 void datasetGroupSaved( const QString &uri );
53
54 private:
55 QgsMeshLayer *mMeshLayer = nullptr;
56
57 void saveDatasetGroup( int datasetGroup, const QString &driver, const QString &fileSuffix );
58};
59
66class QgsMeshDatasetGroupTreeModel : public QAbstractItemModel
67{
68 Q_OBJECT
69 public:
70 enum Roles
71 {
72 Name = Qt::UserRole,
77 };
78
79 explicit QgsMeshDatasetGroupTreeModel( QObject *parent = nullptr );
80
81 QVariant data( const QModelIndex &index, int role ) const override;
82 Qt::ItemFlags flags( const QModelIndex &index ) const override;
83 QVariant headerData( int section, Qt::Orientation orientation,
84 int role = Qt::DisplayRole ) const override;
85 QModelIndex index( int row, int column,
86 const QModelIndex &parent = QModelIndex() ) const override;
87 QModelIndex parent( const QModelIndex &index ) const override;
88 int rowCount( const QModelIndex &parent = QModelIndex() ) const override;
89 int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
90
92 void syncToLayer( QgsMeshLayer *layer );
93
96
99
102
104 bool isEnabled( const QModelIndex &index ) const;
105
107 void resetDefault( QgsMeshLayer *meshLayer );
108
110 void setAllGroupsAsEnabled( bool isEnabled );
111
113 void removeItem( const QModelIndex &index );
114
116 void setPersistentDatasetGroup( const QModelIndex &index, const QString &uri );
117
118 private:
119 std::unique_ptr<QgsMeshDatasetGroupTreeItem> mRootItem;
120
121};
122
128{
129 Q_OBJECT
130 public:
131 QgsMeshAvailableDatasetGroupTreeModel( QObject *parent = nullptr );
132
133 QVariant data( const QModelIndex &index, int role ) const override;
134 bool setData( const QModelIndex &index, const QVariant &value, int role ) override;
135 Qt::ItemFlags flags( const QModelIndex &index ) const override;
136 QVariant headerData( int section, Qt::Orientation orientation, int role ) const override;
137 int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
138
139 private:
140 QString textDisplayed( const QModelIndex &index ) const;
141 QColor backGroundColor( const QModelIndex &index ) const;
142};
143
148class QgsMeshDatasetGroupProxyModel: public QSortFilterProxyModel
149{
150 Q_OBJECT
151 public:
152 QgsMeshDatasetGroupProxyModel( QAbstractItemModel *sourceModel );
153
154 Qt::ItemFlags flags( const QModelIndex &index ) const override;
155 QVariant data( const QModelIndex &index, int role ) const override;
156
158 int activeScalarGroup() const;
159
161 void setActiveScalarGroup( int group );
162
164 int activeVectorGroup() const;
165
167 void setActiveVectorGroup( int group );
168
170 void syncToLayer( QgsMeshLayer *layer );
171
172 protected:
173 bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const override;
174
175 private:
176 int mActiveScalarGroupIndex = -1;
177 int mActiveVectorGroupIndex = -1;
178};
179
186class QgsMeshDatasetGroupTreeItemDelegate: public QStyledItemDelegate
187{
188 Q_OBJECT
189 public:
190 QgsMeshDatasetGroupTreeItemDelegate( QObject *parent = nullptr );
191
192 void paint( QPainter *painter,
193 const QStyleOptionViewItem &option,
194 const QModelIndex &index ) const override;
195
197 QRect iconRect( const QRect &rect, bool isVector ) const;
198
199 QSize sizeHint( const QStyleOptionViewItem &option,
200 const QModelIndex &index ) const override;
201 private:
202 const QPixmap mScalarSelectedPixmap;
203 const QPixmap mScalarDeselectedPixmap;
204 const QPixmap mVectorSelectedPixmap;
205 const QPixmap mVectorDeselectedPixmap;
206
207 QRect iconRect( const QRect &rect, int pos ) const;
208};
209
216class GUI_EXPORT QgsMeshDatasetGroupTreeView: public QTreeView
217{
218 Q_OBJECT
219 public:
220 QgsMeshDatasetGroupTreeView( QWidget *parent = nullptr );
221
222 void syncToLayer( QgsMeshLayer *layer );
223 void resetDefault( QgsMeshLayer *meshLayer );
224
225 QgsMeshDatasetGroupTreeItem *datasetGroupTreeRootItem();
226
227 signals:
228 void apply();
229
230 public slots:
231 void selectAllGroups();
232 void deselectAllGroups();
233
234 protected:
235 void contextMenuEvent( QContextMenuEvent *event ) override;
236
237 private slots:
238 void removeCurrentItem();
239 void onDatasetGroupSaved( const QString &uri );
240
241 private:
244
245 void selectAllItem( bool isChecked );
246 QMenu *createContextMenu();
247};
248
257class GUI_EXPORT QgsMeshActiveDatasetGroupTreeView : public QTreeView
258{
259 Q_OBJECT
260
261 public:
262 QgsMeshActiveDatasetGroupTreeView( QWidget *parent = nullptr );
263
265 void setLayer( QgsMeshLayer *layer );
266
268 int activeScalarGroup() const;
269
271 int activeVectorGroup() const;
272
274 void syncToLayer();
275
276 void mousePressEvent( QMouseEvent *event ) override;
277
278 public slots:
280 void setActiveScalarGroup( int group );
281
283 void setActiveVectorGroup( int group );
284
285 signals:
287 void activeScalarGroupChanged( int groupIndex );
288
290 void activeVectorGroupChanged( int groupIndex );
291
292 private:
293 void setActiveGroup();
294
297 QgsMeshLayer *mMeshLayer = nullptr; // not owned
298};
299
304class GUI_EXPORT QgsMeshDatasetGroupListModel: public QAbstractListModel
305{
306 Q_OBJECT
307 public:
308 explicit QgsMeshDatasetGroupListModel( QObject *parent );
309
311 void syncToLayer( QgsMeshLayer *layer );
312
313 int rowCount( const QModelIndex &parent ) const override;
314 QVariant data( const QModelIndex &index, int role ) const override;
315
316 void setDisplayProviderName( bool displayProviderName );
317
318 QStringList variableNames() const;
319
320 private:
321 QgsMeshDatasetGroupTreeItem *mRootItem = nullptr;
322 bool mDisplayProviderName = false;
323};
324
325#endif // QGSMESHDATASETGROUPTREE_H
Tree widget for display of the mesh dataset groups.
void activeVectorGroupChanged(int groupIndex)
Selected dataset group for vectors changed. -1 for invalid group.
void activeScalarGroupChanged(int groupIndex)
Selected dataset group for contours changed. -1 for invalid group.
Qt::ItemFlags flags(const QModelIndex &index) const override
bool setData(const QModelIndex &index, const QVariant &value, int role) override
QgsMeshAvailableDatasetGroupTreeModel(QObject *parent=nullptr)
int columnCount(const QModelIndex &parent=QModelIndex()) const override
QVariant data(const QModelIndex &index, int role) const override
QVariant headerData(int section, Qt::Orientation orientation, int role) const override
void setActiveVectorGroup(int group)
Sets active vector group.
int activeScalarGroup() const
Returns index of active group for contours.
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override
void setActiveScalarGroup(int group)
Sets active group for contours.
Qt::ItemFlags flags(const QModelIndex &index) const override
void syncToLayer(QgsMeshLayer *layer)
Add groups to the model from mesh layer.
int activeVectorGroup() const
Returns index of active group for vectors.
QgsMeshDatasetGroupProxyModel(QAbstractItemModel *sourceModel)
QVariant data(const QModelIndex &index, int role) const override
QMenu * createSaveMenu(int groupIndex, QMenu *parentMenu=nullptr)
void datasetGroupSaved(const QString &uri)
void setMeshLayer(QgsMeshLayer *meshLayer)
QgsMeshDatasetGroupSaveMenu(QObject *parent=nullptr)
Delegate to display tree item with a contours and vector selector.
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override
QgsMeshDatasetGroupTreeItemDelegate(QObject *parent=nullptr)
QRect iconRect(const QRect &rect, bool isVector) const
Icon rectangle for given item rectangle.
Tree item for display of the mesh dataset groups.
Item Model for QgsMeshDatasetGroupTreeItem.
QgsMeshDatasetGroupTreeItem * datasetGroupTreeItem(int groupIndex)
Returns the dataset group tree item with index, keeps ownership.
QVariant data(const QModelIndex &index, int role) const override
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
void syncToLayer(QgsMeshLayer *layer)
Synchronizes groups to the model from mesh layer.
bool isEnabled(const QModelIndex &index) const
Returns whether the dataset groups related to the QModelIndex is set as enabled.
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
void resetDefault(QgsMeshLayer *meshLayer)
Resets all groups with default state from the mesh layer.
QgsMeshDatasetGroupTreeItem * datasetGroupTreeRootItem()
Returns the dataset group root tree item, keeps ownership.
int columnCount(const QModelIndex &parent=QModelIndex()) const override
QgsMeshDatasetGroupTreeModel(QObject *parent=nullptr)
void removeItem(const QModelIndex &index)
Removes an item from the tree.
QModelIndex parent(const QModelIndex &index) const override
void setAllGroupsAsEnabled(bool isEnabled)
Sets all groups as enabled.
int rowCount(const QModelIndex &parent=QModelIndex()) const override
void setPersistentDatasetGroup(const QModelIndex &index, const QString &uri)
Sets the dataset group as persistent with specified uri and for specified index.
Qt::ItemFlags flags(const QModelIndex &index) const override
Tree widget for display of the mesh dataset groups.
Represents a mesh layer supporting display of data on structured or unstructured meshes.
Definition: qgsmeshlayer.h:101
#define SIP_NO_FILE