16
16
***************************************************************************/
17
17
18
18
#include " qgsdxfexportdialog.h"
19
+
19
20
#include " qgsmaplayer.h"
20
- #include " qgsmaplayerregistry.h"
21
21
#include " qgslayertree.h"
22
22
#include " qgslayertreegroup.h"
23
23
#include " qgsvectorlayer.h"
24
24
#include " qgsproject.h"
25
25
#include " qgis.h"
26
26
#include " qgsfieldcombobox.h"
27
+ #include " qgisapp.h"
28
+ #include " qgsmapcanvas.h"
27
29
28
30
#include < QFileDialog>
29
31
#include < QPushButton>
@@ -181,6 +183,7 @@ bool QgsVectorLayerAndAttributeModel::setData( const QModelIndex &index, const Q
181
183
QList< QPair<QgsVectorLayer *, int > > QgsVectorLayerAndAttributeModel::layers ( const QModelIndexList &selectedIndexes ) const
182
184
{
183
185
QList< QPair<QgsVectorLayer *, int > > layers;
186
+ QHash< QgsMapLayer *, int > layerIdx;
184
187
185
188
foreach ( const QModelIndex &idx, selectedIndexes )
186
189
{
@@ -191,18 +194,40 @@ QList< QPair<QgsVectorLayer *, int> > QgsVectorLayerAndAttributeModel::layers( c
191
194
{
192
195
QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( treeLayer->layer () );
193
196
Q_ASSERT ( vl );
194
- layers << qMakePair<QgsVectorLayer *, int >( vl, mAttributeIdx .value ( vl, -1 ) );
197
+ if ( !layerIdx.contains ( vl ) )
198
+ {
199
+ layerIdx.insert ( vl, layers.size () );
200
+ layers << qMakePair<QgsVectorLayer *, int >( vl, mAttributeIdx .value ( vl, -1 ) );
201
+ }
195
202
}
196
203
}
197
204
else if ( QgsLayerTree::isLayer ( node ) )
198
205
{
199
206
QgsVectorLayer *vl = qobject_cast< QgsVectorLayer *>( QgsLayerTree::toLayer ( node )->layer () );
200
207
Q_ASSERT ( vl );
201
- layers << qMakePair<QgsVectorLayer *, int >( vl, mAttributeIdx .value ( vl, -1 ) );
208
+ if ( !layerIdx.contains ( vl ) )
209
+ {
210
+ layerIdx.insert ( vl, layers.size () );
211
+ layers << qMakePair<QgsVectorLayer *, int >( vl, mAttributeIdx .value ( vl, -1 ) );
212
+ }
202
213
}
203
214
}
204
215
205
- return layers;
216
+ QList<QgsMapLayer*> inDrawingOrder = QgisApp::instance ()->mapCanvas ()->layers ();
217
+ QList< QPair<QgsVectorLayer *, int > > layersInOrder;
218
+
219
+ for ( int i = 0 ; i < inDrawingOrder.size (); i++ )
220
+ {
221
+ int idx = layerIdx.value ( inDrawingOrder[i], -1 );
222
+ if ( idx < 0 )
223
+ continue ;
224
+
225
+ layersInOrder << layers[idx];
226
+ }
227
+
228
+ Q_ASSERT ( layersInOrder.size () == layers.size () );
229
+
230
+ return layersInOrder;
206
231
}
207
232
208
233
0 commit comments