QGIS API Documentation 3.99.0-Master (21b3aa880ba)
Loading...
Searching...
No Matches
qgsmeshstaticdatasetwidget.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsmeshstaticdatasetwidget.cpp
3 -------------------------------------
4 begin : March 2020
5 copyright : (C) 2020 by Vincent Cloarec
6 email : vcloarec 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
17
18#include "qgsmeshlayer.h"
19
20#include "moc_qgsmeshstaticdatasetwidget.cpp"
21
23 : QWidget( parent )
24{
25 setupUi( this );
26
27 this->layout()->setContentsMargins( 0, 0, 0, 0 );
28 mDatasetScalarModel = new QgsMeshDatasetListModel( this );
29 mScalarDatasetComboBox->setModel( mDatasetScalarModel );
30 mDatasetVectorModel = new QgsMeshDatasetListModel( this );
31 mVectorDatasetComboBox->setModel( mDatasetVectorModel );
32}
33
35{
36 mLayer = layer;
37}
38
40{
41 if ( !mLayer )
42 return;
43
44 mDatasetScalarModel->setMeshLayer( mLayer );
45 mDatasetVectorModel->setMeshLayer( mLayer );
46 setScalarDatasetGroup( mLayer->rendererSettings().activeScalarDatasetGroup() );
47 setVectorDatasetGroup( mLayer->rendererSettings().activeVectorDatasetGroup() );
48}
49
51{
52 if ( !mLayer )
53 return;
54
55 int scalarIndex;
56 // if only one item, there is no active dataset group.
57 // Set to 0 instead of -1 to avoid none dataset (item 0) when the group is reactivate
58 if ( mScalarDatasetComboBox->count() == 1 )
59 scalarIndex = 0;
60 else
61 scalarIndex = mScalarDatasetComboBox->currentIndex() - 1;
62 int vectorIndex;
63 // Same as scalar
64 if ( mVectorDatasetComboBox->count() == 1 )
65 vectorIndex = 0;
66 else
67 vectorIndex = mVectorDatasetComboBox->currentIndex() - 1;
68
69 mLayer->setStaticScalarDatasetIndex( QgsMeshDatasetIndex( mScalarDatasetGroup, scalarIndex ) );
70 mLayer->setStaticVectorDatasetIndex( QgsMeshDatasetIndex( mVectorDatasetGroup, vectorIndex ) );
71}
72
74{
75 mScalarDatasetGroup = index;
76 mDatasetScalarModel->setDatasetGroup( index );
77 mScalarDatasetComboBox->setEnabled( mScalarDatasetGroup >= 0 );
78 if ( mLayer )
79 {
80 mScalarName->setText( mLayer->datasetGroupMetadata( index ).name() );
81 setScalarDatasetIndex( mLayer->staticScalarDatasetIndex().dataset() );
82 }
83}
84
86{
87 mVectorDatasetGroup = index;
88 mDatasetVectorModel->setDatasetGroup( index );
89 mVectorDatasetComboBox->setEnabled( mVectorDatasetGroup >= 0 );
90 if ( mLayer )
91 {
92 mVectorName->setText( mLayer->datasetGroupMetadata( index ).name() );
93 setVectorDatasetIndex( mLayer->staticVectorDatasetIndex().dataset() );
94 }
95}
96
97void QgsMeshStaticDatasetWidget::setScalarDatasetIndex( int index )
98{
99 if ( index < mLayer->datasetCount( mScalarDatasetGroup ) )
100 mScalarDatasetComboBox->setCurrentIndex( index + 1 );
101 else
102 mScalarDatasetComboBox->setCurrentIndex( 0 );
103}
104
105void QgsMeshStaticDatasetWidget::setVectorDatasetIndex( int index )
106{
107 if ( index < mLayer->datasetCount( mVectorDatasetGroup ) )
108 mVectorDatasetComboBox->setCurrentIndex( index + 1 );
109 else
110 mVectorDatasetComboBox->setCurrentIndex( 0 );
111}
112
114 : QAbstractListModel( parent )
115{}
116
118{
119 beginResetModel();
120 mLayer = layer;
121 endResetModel();
122}
123
125{
126 beginResetModel();
127 mDatasetGroup = group;
128 endResetModel();
129}
130
131int QgsMeshDatasetListModel::rowCount( const QModelIndex &parent ) const
132{
133 Q_UNUSED( parent )
134
135 if ( mLayer )
136 return mLayer->datasetCount( mDatasetGroup ) + 1;
137 else
138 return 0;
139}
140
141QVariant QgsMeshDatasetListModel::data( const QModelIndex &index, int role ) const
142{
143 if ( !index.isValid() )
144 return QVariant();
145
146 if ( role == Qt::DisplayRole )
147 {
148 if ( !mLayer || mDatasetGroup < 0 || index.row() == 0 )
149 return tr( "none" );
150
151 else if ( index.row() == 1 && mLayer->datasetCount( mDatasetGroup ) == 1 )
152 {
153 return tr( "Display dataset" );
154 }
155 else
156 {
157 const QgsInterval time = mLayer->datasetRelativeTime( QgsMeshDatasetIndex( mDatasetGroup, index.row() - 1 ) );
158 return mLayer->formatTime( time.hours() );
159 }
160 }
161
162 return QVariant();
163}
A representation of the interval between two datetime values.
Definition qgsinterval.h:47
double hours() const
Returns the interval duration in hours.
An index that identifies the dataset group (e.g.
List model for dataset contained in dataset group, used to display by time dataset in widget.
void setDatasetGroup(int group)
Sets the dataset group.
void setMeshLayer(QgsMeshLayer *layer)
Sets the layer.
int rowCount(const QModelIndex &parent) const override
QVariant data(const QModelIndex &index, int role) const override
QgsMeshDatasetListModel(QObject *parent)
Constructor.
Represents a mesh layer supporting display of data on structured or unstructured meshes.
QgsMeshStaticDatasetWidget(QWidget *parent=nullptr)
Constructor.
void apply()
Applies the settings made in the widget.
void syncToLayer()
Synchronizes widgets state with associated mesh layer.
void setScalarDatasetGroup(int index)
Sets the scalar dataset group.
void setLayer(QgsMeshLayer *layer)
Sets the layer.
void setVectorDatasetGroup(int index)
Sets the vector dataset group.