@@ -24,7 +24,10 @@ QgsMeshRendererActiveDatasetWidget::QgsMeshRendererActiveDatasetWidget( QWidget
24
24
: QWidget( parent )
25
25
{
26
26
setupUi ( this );
27
- connect ( mDatasetGroupTreeView , &QgsMeshDatasetGroupTreeView::activeGroupChanged, this , &QgsMeshRendererActiveDatasetWidget::onActiveGroupChanged );
27
+ connect ( mDatasetGroupTreeView , &QgsMeshDatasetGroupTreeView::activeScalarGroupChanged,
28
+ this , &QgsMeshRendererActiveDatasetWidget::onActiveScalarGroupChanged );
29
+ connect ( mDatasetGroupTreeView , &QgsMeshDatasetGroupTreeView::activeVectorGroupChanged,
30
+ this , &QgsMeshRendererActiveDatasetWidget::onActiveVectorGroupChanged );
28
31
connect ( mDatasetSlider , &QSlider::valueChanged, this , &QgsMeshRendererActiveDatasetWidget::onActiveDatasetChanged );
29
32
}
30
33
@@ -34,6 +37,16 @@ void QgsMeshRendererActiveDatasetWidget::setLayer( QgsMeshLayer *layer )
34
37
mDatasetGroupTreeView ->setLayer ( layer );
35
38
}
36
39
40
+ int QgsMeshRendererActiveDatasetWidget::activeScalarDatasetGroup () const
41
+ {
42
+ return mActiveScalarDatasetGroup ;
43
+ }
44
+
45
+ int QgsMeshRendererActiveDatasetWidget::activeVectorDatasetGroup () const
46
+ {
47
+ return mActiveVectorDatasetGroup ;
48
+ }
49
+
37
50
QgsMeshDatasetIndex QgsMeshRendererActiveDatasetWidget::activeScalarDataset () const
38
51
{
39
52
return mActiveScalarDataset ;
@@ -47,112 +60,162 @@ QgsMeshDatasetIndex QgsMeshRendererActiveDatasetWidget::activeVectorDataset() co
47
60
void QgsMeshRendererActiveDatasetWidget::setSliderRange ()
48
61
{
49
62
int datasetCount = 1 ;
50
- if ( mMeshLayer &&
51
- mMeshLayer ->dataProvider () &&
52
- mDatasetGroupTreeView ->activeGroup () != -1 )
53
- datasetCount = mMeshLayer ->dataProvider ()->datasetCount ( mDatasetGroupTreeView ->activeGroup () );
54
-
63
+ if ( mMeshLayer && mMeshLayer ->dataProvider () )
64
+ {
65
+ for ( int i = 0 ; i < mMeshLayer ->dataProvider ()->datasetGroupCount (); ++i )
66
+ {
67
+ datasetCount = std::max ( mMeshLayer ->dataProvider ()->datasetCount ( i ), datasetCount );
68
+ }
69
+ }
55
70
mDatasetSlider ->setMinimum ( 0 );
56
71
mDatasetSlider ->setMaximum ( datasetCount - 1 );
57
72
}
58
73
59
- void QgsMeshRendererActiveDatasetWidget::onActiveGroupChanged ( )
74
+ void QgsMeshRendererActiveDatasetWidget::onActiveScalarGroupChanged ( int groupIndex )
60
75
{
61
- setSliderRange ();
76
+ if ( groupIndex == mActiveScalarDatasetGroup )
77
+ return ;
78
+
79
+ mActiveScalarDatasetGroup = groupIndex;
62
80
63
81
// keep the same timestep if possible
64
82
int val = mDatasetSlider ->value ();
65
- if ( ( val < 0 ) || ( val > mDatasetSlider ->maximum () ) )
66
- val = 0 ;
83
+ onActiveDatasetChanged ( val );
84
+ emit activeScalarGroupChanged ( mActiveScalarDatasetGroup );
85
+ }
86
+
87
+ void QgsMeshRendererActiveDatasetWidget::onActiveVectorGroupChanged ( int groupIndex )
88
+ {
89
+ if ( groupIndex == mActiveVectorDatasetGroup )
90
+ return ;
91
+
92
+ mActiveVectorDatasetGroup = groupIndex;
67
93
94
+ // keep the same timestep if possible
95
+ int val = mDatasetSlider ->value ();
68
96
mDatasetSlider ->setValue ( val );
69
97
onActiveDatasetChanged ( val );
70
- mActiveDatasetGroup = mDatasetGroupTreeView ->activeGroup ();
71
- emit activeDatasetGroupChanged ( mActiveDatasetGroup );
98
+ emit activeVectorGroupChanged ( mActiveVectorDatasetGroup );
72
99
}
73
100
74
101
void QgsMeshRendererActiveDatasetWidget::onActiveDatasetChanged ( int value )
75
102
{
76
- int groupIndex = mDatasetGroupTreeView ->activeGroup ();
103
+ if ( !mMeshLayer || !mMeshLayer ->dataProvider () )
104
+ return ;
77
105
78
- mActiveScalarDataset = QgsMeshDatasetIndex ();
79
- mActiveVectorDataset = QgsMeshDatasetIndex ();
80
- QgsMeshDatasetIndex datasetIndex ( groupIndex, value );
106
+ bool changed = false ;
81
107
82
- if ( mMeshLayer &&
83
- mMeshLayer ->dataProvider () &&
84
- datasetIndex.isValid () &&
85
- mMeshLayer ->dataProvider ()->datasetCount ( groupIndex ) > value )
108
+ QgsMeshDatasetIndex activeScalarDataset (
109
+ mActiveScalarDatasetGroup ,
110
+ std::min ( value, mMeshLayer ->dataProvider ()->datasetCount ( mActiveScalarDatasetGroup ) - 1 )
111
+ );
112
+ if ( activeScalarDataset != mActiveScalarDataset )
86
113
{
87
- const QgsMeshDatasetGroupMetadata meta = mMeshLayer ->dataProvider ()->datasetGroupMetadata ( datasetIndex );
88
- mActiveScalarDataset = datasetIndex;
89
- if ( meta.isVector () )
90
- mActiveVectorDataset = datasetIndex;
114
+ mActiveScalarDataset = activeScalarDataset;
115
+ changed = true ;
116
+ emit activeScalarDatasetChanged ( mActiveScalarDataset );
91
117
}
92
118
93
- updateMetadata ( datasetIndex );
94
-
95
- emit activeScalarDatasetChanged ( activeScalarDataset () );
96
- emit activeVectorDatasetChanged ( activeVectorDataset () );
119
+ QgsMeshDatasetIndex activeVectorDataset (
120
+ mActiveVectorDatasetGroup ,
121
+ std::min ( value, mMeshLayer ->dataProvider ()->datasetCount ( mActiveVectorDatasetGroup ) - 1 )
122
+ );
123
+ if ( activeVectorDataset != mActiveVectorDataset )
124
+ {
125
+ mActiveVectorDataset = activeVectorDataset;
126
+ changed = true ;
127
+ emit activeVectorDatasetChanged ( mActiveVectorDataset );
128
+ }
97
129
98
- emit widgetChanged ();
130
+ if ( changed )
131
+ {
132
+ updateMetadata ();
133
+ emit widgetChanged ();
134
+ }
99
135
}
100
136
101
- void QgsMeshRendererActiveDatasetWidget::updateMetadata ( QgsMeshDatasetIndex datasetIndex )
137
+ void QgsMeshRendererActiveDatasetWidget::updateMetadata ()
102
138
{
139
+ QString msg;
140
+
103
141
if ( !mMeshLayer ||
104
- !mMeshLayer ->dataProvider () ||
105
- !datasetIndex.isValid () )
142
+ !mMeshLayer ->dataProvider () )
106
143
{
107
- mActiveDatasetMetadata -> setText ( tr ( " No dataset selected" ) );
144
+ msg += tr ( " Invalid mesh layer selected" );
108
145
}
109
146
else
110
147
{
111
- QString msg;
112
- msg += QStringLiteral ( " <table>" );
148
+ if ( mActiveScalarDataset .isValid () )
149
+ {
150
+ if ( mActiveVectorDataset .isValid () )
151
+ {
152
+ if ( mActiveScalarDataset == mActiveVectorDataset )
153
+ {
154
+ msg += metadata ( mActiveScalarDataset );
155
+ }
156
+ else
157
+ {
158
+ msg += QStringLiteral ( " <p> <h3> %1 </h3> " ).arg ( tr ( " Scalar dataset" ) );
159
+ msg += metadata ( mActiveScalarDataset );
160
+ msg += QStringLiteral ( " </p> <p> <h3> %1 </h3>" ).arg ( tr ( " Vector dataset" ) );
161
+ msg += metadata ( mActiveVectorDataset );
162
+ msg += QStringLiteral ( " </p>" );
163
+ }
164
+ }
165
+ else
166
+ {
167
+ msg += metadata ( mActiveScalarDataset );
168
+ }
169
+ }
170
+ else
171
+ {
172
+ if ( mActiveVectorDataset .isValid () )
173
+ {
174
+ msg += metadata ( mActiveVectorDataset );
175
+ }
176
+ else
177
+ {
178
+ msg += tr ( " No mesh dataset selected" );
179
+ }
180
+ }
181
+ }
113
182
114
- const QgsMeshDatasetMetadata meta = mMeshLayer ->dataProvider ()->datasetMetadata ( datasetIndex );
115
- msg += QStringLiteral ( " <tr><td>%1</td><td>%2</td></tr>" )
116
- .arg ( tr ( " Is valid" ) )
117
- .arg ( meta.isValid () ? tr ( " Yes" ) : tr ( " No" ) );
183
+ mActiveDatasetMetadata ->setText ( msg );
184
+ }
118
185
119
- msg += QStringLiteral ( " <tr><td>%1</td><td>%2</td></tr>" )
120
- .arg ( tr ( " Time" ) )
121
- .arg ( meta.time () );
122
186
123
- const QgsMeshDatasetGroupMetadata gmeta = mMeshLayer ->dataProvider ()->datasetGroupMetadata ( datasetIndex );
124
- msg += QStringLiteral ( " <tr><td>%1</td><td>%2</td></tr>" )
125
- .arg ( tr ( " Data Type" ) )
126
- .arg ( gmeta.dataType () == QgsMeshDatasetGroupMetadata::DataOnVertices ? tr ( " Defined on vertices" ) : tr ( " Defined on faces" ) );
187
+ QString QgsMeshRendererActiveDatasetWidget::metadata ( QgsMeshDatasetIndex datasetIndex )
188
+ {
127
189
128
- msg += QStringLiteral ( " <tr><td>%1</td><td>%2</td></tr>" )
129
- .arg ( tr ( " Is vector" ) )
130
- .arg ( gmeta.isVector () ? tr ( " Yes" ) : tr ( " No" ) );
190
+ QString msg;
191
+ msg += QStringLiteral ( " <table>" );
131
192
132
- for ( auto it = gmeta. extraOptions (). constBegin (); it != gmeta. extraOptions (). constEnd (); ++it )
133
- {
134
- msg += QStringLiteral ( " <tr><td>%1</td><td>%2</td></tr> " ) .arg ( it. key () ). arg ( it. value ( ) );
135
- }
193
+ const QgsMeshDatasetMetadata meta = mMeshLayer -> dataProvider ()-> datasetMetadata ( datasetIndex );
194
+ msg += QStringLiteral ( " <tr><td>%1</td><td>%2</td></tr> " )
195
+ .arg ( tr ( " Is valid " ) )
196
+ . arg ( meta. isValid () ? tr ( " Yes " ) : tr ( " No " ) );
136
197
137
- msg += QStringLiteral ( " </table>" );
138
- mActiveDatasetMetadata ->setText ( msg );
198
+ msg += QStringLiteral ( " <tr><td>%1</td><td>%2</td></tr>" )
199
+ .arg ( tr ( " Time" ) )
200
+ .arg ( meta.time () );
201
+
202
+ const QgsMeshDatasetGroupMetadata gmeta = mMeshLayer ->dataProvider ()->datasetGroupMetadata ( datasetIndex );
203
+ msg += QStringLiteral ( " <tr><td>%1</td><td>%2</td></tr>" )
204
+ .arg ( tr ( " Data Type" ) )
205
+ .arg ( gmeta.dataType () == QgsMeshDatasetGroupMetadata::DataOnVertices ? tr ( " Defined on vertices" ) : tr ( " Defined on faces" ) );
206
+
207
+ msg += QStringLiteral ( " <tr><td>%1</td><td>%2</td></tr>" )
208
+ .arg ( tr ( " Is vector" ) )
209
+ .arg ( gmeta.isVector () ? tr ( " Yes" ) : tr ( " No" ) );
210
+
211
+ for ( auto it = gmeta.extraOptions ().constBegin (); it != gmeta.extraOptions ().constEnd (); ++it )
212
+ {
213
+ msg += QStringLiteral ( " <tr><td>%1</td><td>%2</td></tr>" ).arg ( it.key () ).arg ( it.value () );
139
214
}
140
215
141
- }
216
+ msg += QStringLiteral ( " </table> " );
142
217
143
- QgsMeshDatasetIndex QgsMeshRendererActiveDatasetWidget::datasetIndex () const
144
- {
145
- int value = mDatasetSlider ->value ();
146
- int groupIndex = mDatasetGroupTreeView ->activeGroup ();
147
-
148
- if ( mMeshLayer &&
149
- mMeshLayer ->dataProvider () &&
150
- groupIndex != -1 &&
151
- mMeshLayer ->dataProvider ()->datasetCount ( groupIndex ) > value
152
- )
153
- return QgsMeshDatasetIndex ( groupIndex, value );
154
- else
155
- return QgsMeshDatasetIndex ();
218
+ return msg;
156
219
}
157
220
158
221
void QgsMeshRendererActiveDatasetWidget::syncToLayer ()
@@ -164,22 +227,26 @@ void QgsMeshRendererActiveDatasetWidget::syncToLayer()
164
227
if ( mMeshLayer )
165
228
{
166
229
const QgsMeshRendererSettings rendererSettings = mMeshLayer ->rendererSettings ();
167
- mActiveDatasetGroup = mDatasetGroupTreeView ->activeGroup ();
230
+ mActiveScalarDatasetGroup = mDatasetGroupTreeView ->activeScalarGroup ();
231
+ mActiveVectorDatasetGroup = mDatasetGroupTreeView ->activeVectorGroup ();
168
232
mActiveScalarDataset = rendererSettings.activeScalarDataset ();
169
233
mActiveVectorDataset = rendererSettings.activeVectorDataset ();
170
234
}
171
235
else
172
236
{
173
- mActiveDatasetGroup = -1 ;
237
+ mActiveScalarDatasetGroup = -1 ;
238
+ mActiveVectorDatasetGroup = -1 ;
174
239
mActiveScalarDataset = QgsMeshDatasetIndex ();
175
240
mActiveVectorDataset = QgsMeshDatasetIndex ();
176
241
}
177
242
243
+ setSliderRange ();
244
+
178
245
int val = 0 ;
179
246
if ( mActiveScalarDataset .isValid () )
180
247
val = mActiveScalarDataset .dataset ();
248
+ else if ( mActiveVectorDataset .isValid () )
249
+ val = mActiveVectorDataset .dataset ();
181
250
mDatasetSlider ->setValue ( val );
182
-
183
- setSliderRange ();
184
251
onActiveDatasetChanged ( val );
185
252
}
0 commit comments