@@ -76,138 +76,29 @@ void QgsExpressionSelectionDialog::setGeomCalculator( const QgsDistanceArea & da
76
76
77
77
void QgsExpressionSelectionDialog::on_mActionSelect_triggered ()
78
78
{
79
- QgsFeatureIds newSelection;
80
- QgsExpression* expression = new QgsExpression ( mExpressionBuilder ->expressionText () );
81
-
82
- QgsExpressionContext context;
83
- context << QgsExpressionContextUtils::globalScope ()
84
- << QgsExpressionContextUtils::projectScope ()
85
- << QgsExpressionContextUtils::layerScope ( mLayer );
86
-
87
- QgsFeatureRequest request = QgsFeatureRequest ().setFilterExpression ( mExpressionBuilder ->expressionText () ).setExpressionContext ( context );
88
- QgsFeatureIterator features = mLayer ->getFeatures ( request );
89
-
90
- QgsFeature feat;
91
- while ( features.nextFeature ( feat ) )
92
- {
93
- newSelection << feat.id ();
94
- }
95
-
96
- features.close ();
97
-
98
- mLayer ->setSelectedFeatures ( newSelection );
99
-
100
- delete expression;
79
+ mLayer ->selectByExpression ( mExpressionBuilder ->expressionText (),
80
+ QgsVectorLayer::SetSelection );
101
81
saveRecent ();
102
82
}
103
83
104
84
void QgsExpressionSelectionDialog::on_mActionAddToSelection_triggered ()
105
85
{
106
- QgsFeatureIds newSelection = mLayer ->selectedFeaturesIds ();
107
- QgsExpression* expression = new QgsExpression ( mExpressionBuilder ->expressionText () );
108
-
109
- QgsExpressionContext context;
110
- context << QgsExpressionContextUtils::globalScope ()
111
- << QgsExpressionContextUtils::projectScope ()
112
- << QgsExpressionContextUtils::layerScope ( mLayer );
113
-
114
- QgsFeatureRequest request = QgsFeatureRequest ().setFilterExpression ( mExpressionBuilder ->expressionText () ).setExpressionContext ( context );
115
- QgsFeatureIterator features = mLayer ->getFeatures ( request );
116
-
117
- QgsFeature feat;
118
- while ( features.nextFeature ( feat ) )
119
- {
120
- newSelection << feat.id ();
121
- }
122
-
123
- features.close ();
124
-
125
- mLayer ->setSelectedFeatures ( newSelection );
126
-
127
- delete expression;
86
+ mLayer ->selectByExpression ( mExpressionBuilder ->expressionText (),
87
+ QgsVectorLayer::AddToSelection );
128
88
saveRecent ();
129
89
}
130
90
131
91
void QgsExpressionSelectionDialog::on_mActionSelectIntersect_triggered ()
132
92
{
133
- const QgsFeatureIds &oldSelection = mLayer ->selectedFeaturesIds ();
134
- QgsFeatureIds newSelection;
135
-
136
- QgsExpression* expression = new QgsExpression ( mExpressionBuilder ->expressionText () );
137
-
138
- QgsExpressionContext context;
139
- context << QgsExpressionContextUtils::globalScope ()
140
- << QgsExpressionContextUtils::projectScope ()
141
- << QgsExpressionContextUtils::layerScope ( mLayer );
142
-
143
- expression->prepare ( &context );
144
-
145
- QgsFeature feat;
146
- Q_FOREACH ( const QgsFeatureId fid, oldSelection )
147
- {
148
- QgsFeatureIterator features = mLayer ->getFeatures ( QgsFeatureRequest ().setFilterFid ( fid ) );
149
-
150
- if ( features.nextFeature ( feat ) )
151
- {
152
- context.setFeature ( feat );
153
- if ( expression->evaluate ( &context ).toBool () )
154
- {
155
- newSelection << feat.id ();
156
- }
157
- }
158
- else
159
- {
160
- Q_ASSERT ( false );
161
- }
162
-
163
- features.close ();
164
- }
165
-
166
- mLayer ->setSelectedFeatures ( newSelection );
167
-
168
- delete expression;
93
+ mLayer ->selectByExpression ( mExpressionBuilder ->expressionText (),
94
+ QgsVectorLayer::IntersectSelection );
169
95
saveRecent ();
170
96
}
171
97
172
98
void QgsExpressionSelectionDialog::on_mActionRemoveFromSelection_triggered ()
173
99
{
174
- const QgsFeatureIds &oldSelection = mLayer ->selectedFeaturesIds ();
175
- QgsFeatureIds newSelection = mLayer ->selectedFeaturesIds ();
176
-
177
- QgsExpression* expression = new QgsExpression ( mExpressionBuilder ->expressionText () );
178
-
179
- QgsExpressionContext context;
180
- context << QgsExpressionContextUtils::globalScope ()
181
- << QgsExpressionContextUtils::projectScope ()
182
- << QgsExpressionContextUtils::layerScope ( mLayer );
183
-
184
- expression->prepare ( &context );
185
-
186
- QgsFeature feat;
187
- Q_FOREACH ( const QgsFeatureId fid, oldSelection )
188
- {
189
- QgsFeatureIterator features = mLayer ->getFeatures ( QgsFeatureRequest ().setFilterFid ( fid ) );
190
-
191
- if ( features.nextFeature ( feat ) )
192
- {
193
- context.setFeature ( feat );
194
- if ( expression->evaluate ( &context ).toBool () )
195
- {
196
- newSelection.remove ( feat.id () );
197
- }
198
- }
199
- else
200
- {
201
- Q_ASSERT ( false );
202
- }
203
-
204
- features.close ();
205
- }
206
-
207
- mLayer ->setSelectedFeatures ( newSelection );
208
-
209
- delete expression;
210
-
100
+ mLayer ->selectByExpression ( mExpressionBuilder ->expressionText (),
101
+ QgsVectorLayer::RemoveFromSelection );
211
102
saveRecent ();
212
103
}
213
104
0 commit comments