QGIS API Documentation  3.27.0-Master (0e23467727)
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 
36 class QgsMeshLayer;
37 
42 class 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 
66 class 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  public:
130  QgsMeshAvailableDatasetGroupTreeModel( QObject *parent = nullptr );
131 
132  QVariant data( const QModelIndex &index, int role ) const override;
133  bool setData( const QModelIndex &index, const QVariant &value, int role ) override;
134  Qt::ItemFlags flags( const QModelIndex &index ) const override;
135  QVariant headerData( int section, Qt::Orientation orientation, int role ) const override;
136  int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
137 
138  private:
139  QString textDisplayed( const QModelIndex &index ) const;
140  QColor backGroundColor( const QModelIndex &index ) const;
141 };
142 
147 class QgsMeshDatasetGroupProxyModel: public QSortFilterProxyModel
148 {
149  public:
150  QgsMeshDatasetGroupProxyModel( QAbstractItemModel *sourceModel );
151 
152  Qt::ItemFlags flags( const QModelIndex &index ) const override;
153  QVariant data( const QModelIndex &index, int role ) const override;
154 
156  int activeScalarGroup() const;
157 
159  void setActiveScalarGroup( int group );
160 
162  int activeVectorGroup() const;
163 
165  void setActiveVectorGroup( int group );
166 
168  void syncToLayer( QgsMeshLayer *layer );
169 
170  protected:
171  bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const override;
172 
173  private:
174  int mActiveScalarGroupIndex = -1;
175  int mActiveVectorGroupIndex = -1;
176 };
177 
184 class QgsMeshDatasetGroupTreeItemDelagate: public QStyledItemDelegate
185 {
186  Q_OBJECT
187  public:
188  QgsMeshDatasetGroupTreeItemDelagate( QObject *parent = nullptr );
189 
190  void paint( QPainter *painter,
191  const QStyleOptionViewItem &option,
192  const QModelIndex &index ) const override;
193 
195  QRect iconRect( const QRect &rect, bool isVector ) const;
196 
197  QSize sizeHint( const QStyleOptionViewItem &option,
198  const QModelIndex &index ) const override;
199  private:
200  const QPixmap mScalarSelectedPixmap;
201  const QPixmap mScalarDeselectedPixmap;
202  const QPixmap mVectorSelectedPixmap;
203  const QPixmap mVectorDeselectedPixmap;
204 
205  QRect iconRect( const QRect &rect, int pos ) const;
206 };
207 
214 class GUI_EXPORT QgsMeshDatasetGroupTreeView: public QTreeView
215 {
216  Q_OBJECT
217  public:
218  QgsMeshDatasetGroupTreeView( QWidget *parent = nullptr );
219 
220  void syncToLayer( QgsMeshLayer *layer );
221  void resetDefault( QgsMeshLayer *meshLayer );
222 
223  QgsMeshDatasetGroupTreeItem *datasetGroupTreeRootItem();
224 
225  signals:
226  void apply();
227 
228  public slots:
229  void selectAllGroups();
230  void deselectAllGroups();
231 
232  protected:
233  void contextMenuEvent( QContextMenuEvent *event ) override;
234 
235  private slots:
236  void removeCurrentItem();
237  void onDatasetGroupSaved( const QString &uri );
238 
239  private:
241  QgsMeshDatasetGroupSaveMenu *mSaveMenu;
242 
243  void selectAllItem( bool isChecked );
244  QMenu *createContextMenu();
245 };
246 
255 class GUI_EXPORT QgsMeshActiveDatasetGroupTreeView : public QTreeView
256 {
257  Q_OBJECT
258 
259  public:
260  QgsMeshActiveDatasetGroupTreeView( QWidget *parent = nullptr );
261 
263  void setLayer( QgsMeshLayer *layer );
264 
266  int activeScalarGroup() const;
267 
269  int activeVectorGroup() const;
270 
272  void syncToLayer();
273 
274  void mousePressEvent( QMouseEvent *event ) override;
275 
276  public slots:
278  void setActiveScalarGroup( int group );
279 
281  void setActiveVectorGroup( int group );
282 
283  signals:
285  void activeScalarGroupChanged( int groupIndex );
286 
288  void activeVectorGroupChanged( int groupIndex );
289 
290  private:
291  void setActiveGroup();
292 
293  QgsMeshDatasetGroupProxyModel *mProxyModel;
295  QgsMeshLayer *mMeshLayer = nullptr; // not owned
296 };
297 
302 class GUI_EXPORT QgsMeshDatasetGroupListModel: public QAbstractListModel
303 {
304  public:
305  explicit QgsMeshDatasetGroupListModel( QObject *parent );
306 
308  void syncToLayer( QgsMeshLayer *layer );
309 
310  int rowCount( const QModelIndex &parent ) const override;
311  QVariant data( const QModelIndex &index, int role ) const override;
312 
313  void setDisplayProviderName( bool displayProviderName );
314 
315  QStringList variableNames() const;
316 
317  private:
318  QgsMeshDatasetGroupTreeItem *mRootItem = nullptr;
319  bool mDisplayProviderName = false;
320 };
321 
322 #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.
QRect iconRect(const QRect &rect, bool isVector) const
Icon rectangle for given item rectangle.
QgsMeshDatasetGroupTreeItemDelagate(QObject *parent=nullptr)
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override
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:99
#define SIP_NO_FILE