@@ -254,13 +254,13 @@ void QgsProjectParser::describeFeatureType( const QString& aTypeName, QDomElemen
254
254
if ( aTypeName != " " )
255
255
{
256
256
QStringList typeNameSplit = aTypeName.split ( " ," );
257
- foreach (const QString &str, typeNameSplit)
257
+ foreach ( const QString &str, typeNameSplit )
258
258
{
259
259
if ( str.contains ( " :" ) )
260
- typeNameList << str.section (" :" , 1 , 1 );
260
+ typeNameList << str.section ( " :" , 1 , 1 );
261
261
else
262
262
typeNameList << str;
263
- }
263
+ }
264
264
}
265
265
266
266
foreach ( const QDomElement &elem, mProjectLayerElements )
@@ -2289,81 +2289,45 @@ QgsRectangle QgsProjectParser::layerBoundingBoxInProjectCRS( const QDomElement&
2289
2289
return BBox;
2290
2290
}
2291
2291
2292
- void QgsProjectParser::addDrawingOrder ( QDomElement elem, bool useDrawingOrder, QMap<int , QString>& orderedLayerList, int & nEmbeddedGroupLayers,
2293
- bool embedded, int embeddedOrder ) const
2292
+ void QgsProjectParser::addDrawingOrder ( QDomElement elem, bool useDrawingOrder, QMap<int , QString>& orderedLayerList ) const
2294
2293
{
2295
2294
if ( elem.isNull () )
2296
2295
{
2297
2296
return ;
2298
2297
}
2299
2298
2300
- if ( elem.tagName () == " legendlayer " )
2299
+ if ( elem.tagName () == " legendgroup " )
2301
2300
{
2302
- if ( useDrawingOrder || embeddedOrder != - 1 )
2301
+ if ( elem. attribute ( " embedded " ) == " 1 " )
2303
2302
{
2304
- int order = -1 ;
2305
- if ( embedded )
2306
- {
2307
- order = embeddedOrder;
2308
- }
2309
- else
2310
- {
2311
- order = drawingOrder ( elem );
2312
- }
2313
- orderedLayerList.insertMulti ( order + nEmbeddedGroupLayers, elem.attribute ( " name" ) );
2303
+ addDrawingOrderEmbeddedGroup ( elem, orderedLayerList, useDrawingOrder );
2314
2304
}
2315
2305
else
2316
2306
{
2317
- orderedLayerList.insertMulti ( orderedLayerList.size (), elem.attribute ( " name" ) );
2318
- }
2319
-
2320
- if ( embedded )
2321
- {
2322
- ++nEmbeddedGroupLayers;
2307
+ QDomNodeList groupChildren = elem.childNodes ();
2308
+ for ( int i = 0 ; i < groupChildren.size (); ++i )
2309
+ {
2310
+ addDrawingOrder ( groupChildren.at ( i ).toElement (), useDrawingOrder, orderedLayerList );
2311
+ }
2323
2312
}
2324
2313
}
2325
- else if ( elem.tagName () == " legendgroup " )
2314
+ else if ( elem.tagName () == " legendlayer " )
2326
2315
{
2327
- // embedded vs. not embedded
2328
- if ( elem. attribute ( " embedded " ) == " 1 " && !embedded )
2316
+ QString layerName = elem. attribute ( " name " );
2317
+ if ( useDrawingOrder )
2329
2318
{
2330
- // load layers / elements from project file
2331
- QString project = convertToAbsolutePath ( elem.attribute ( " project" ) );
2332
- QString embeddedGroupName = elem.attribute ( " name" );
2333
- int embedDrawingOrder = elem.attribute ( " drawingOrder" , " -1" ).toInt ();
2334
- QgsProjectParser* p = dynamic_cast <QgsProjectParser*>( QgsConfigCache::instance ()->searchConfiguration ( project ) );
2335
- if ( p )
2336
- {
2337
- QList<QDomElement> embeddedGroupElements = p->mLegendGroupElements ;
2338
- foreach ( const QDomElement &groupElem, embeddedGroupElements )
2339
- {
2340
- if ( groupElem.attribute ( " name" ) == embeddedGroupName )
2341
- {
2342
- addDrawingOrder ( groupElem, false , orderedLayerList, nEmbeddedGroupLayers, true , embedDrawingOrder );
2343
- break ;
2344
- }
2345
- }
2346
- }
2319
+ int drawingOrder = elem.attribute ( " drawingOrder" , " -1" ).toInt ();
2320
+ orderedLayerList.insert ( drawingOrder, layerName );
2347
2321
}
2348
2322
else
2349
2323
{
2350
- QDomNodeList childList = elem.childNodes ();
2351
- QDomElement childElem;
2352
- for ( int i = 0 ; i < childList.size (); ++i )
2353
- {
2354
- addDrawingOrder ( childList.at ( i ).toElement (), useDrawingOrder, orderedLayerList, nEmbeddedGroupLayers,
2355
- embedded, embeddedOrder );
2356
- }
2324
+ orderedLayerList.insert ( orderedLayerList.size (), layerName );
2357
2325
}
2358
2326
}
2359
2327
}
2360
2328
2361
2329
void QgsProjectParser::addDrawingOrder ( QDomElement& parentElem, QDomDocument& doc ) const
2362
2330
{
2363
-
2364
- return ; // soon...
2365
-
2366
- #if 0
2367
2331
if ( !mXMLDoc )
2368
2332
{
2369
2333
return ;
@@ -2377,14 +2341,13 @@ void QgsProjectParser::addDrawingOrder( QDomElement& parentElem, QDomDocument& d
2377
2341
}
2378
2342
2379
2343
bool useDrawingOrder = ( legendElement.attribute ( " updateDrawingOrder" ) == " false" );
2380
- int nEmbeddedGroupLayers = 0;
2381
2344
QMap<int , QString> orderedLayerNames;
2382
2345
2383
2346
QDomNodeList legendChildren = legendElement.childNodes ();
2384
2347
QDomElement childElem;
2385
2348
for ( int i = 0 ; i < legendChildren.size (); ++i )
2386
2349
{
2387
- addDrawingOrder( legendChildren.at( i ).toElement(), useDrawingOrder, orderedLayerNames, nEmbeddedGroupLayers, false );
2350
+ addDrawingOrder ( legendChildren.at ( i ).toElement (), useDrawingOrder, orderedLayerNames );
2388
2351
}
2389
2352
2390
2353
QStringList layerList;
@@ -2398,7 +2361,6 @@ void QgsProjectParser::addDrawingOrder( QDomElement& parentElem, QDomDocument& d
2398
2361
QDomText drawingOrderText = doc.createTextNode ( layerList.join ( " ," ) );
2399
2362
layerDrawingOrderElem.appendChild ( drawingOrderText );
2400
2363
parentElem.appendChild ( layerDrawingOrderElem );
2401
- #endif // 0
2402
2364
}
2403
2365
2404
2366
void QgsProjectParser::projectLayerMap ( QMap<QString, QgsMapLayer*>& layerMap ) const
@@ -2748,15 +2710,58 @@ void QgsProjectParser::drawAnnotationRectangle( QPainter* p, const QDomElement&
2748
2710
p->drawRect ( QRectF ( xPos, yPos, itemWidth, itemHeight ) );
2749
2711
}
2750
2712
2751
- int QgsProjectParser::drawingOrder ( const QDomElement& elem )
2713
+ void QgsProjectParser::addDrawingOrderEmbeddedGroup ( const QDomElement& groupElem, QMap< int , QString>& orderedLayerList, bool useDrawingOrder ) const
2752
2714
{
2753
- QDomElement e = elem;
2754
- while ( !e.isNull () )
2715
+ if ( groupElem.isNull () )
2716
+ {
2717
+ return ;
2718
+ }
2719
+
2720
+ QString project = convertToAbsolutePath ( groupElem.attribute ( " project" ) );
2721
+ if ( project.isEmpty () )
2722
+ {
2723
+ return ;
2724
+ }
2725
+
2726
+ int embedDrawingOrder = groupElem.attribute ( " drawingOrder" , " -1" ).toInt ();
2727
+ QgsProjectParser* p = dynamic_cast <QgsProjectParser*>( QgsConfigCache::instance ()->searchConfiguration ( project ) );
2728
+ if ( !p )
2729
+ {
2730
+ return ;
2731
+ }
2732
+
2733
+ QDomDocument* doc = p->mXMLDoc ;
2734
+ if ( !doc )
2735
+ {
2736
+ return ;
2737
+ }
2738
+
2739
+ QDomNodeList layerNodeList = doc->elementsByTagName ( " legendlayer" );
2740
+ QDomElement layerElem;
2741
+ QStringList layerNames;
2742
+ QString layerName;
2743
+ for ( int i = 0 ; i < layerNodeList.size (); ++i )
2755
2744
{
2756
- if ( e.hasAttribute ( " drawingOrder" ) )
2745
+ layerElem = layerNodeList.at ( i ).toElement ();
2746
+ layerName = layerElem.attribute ( " name" );
2747
+ if ( useDrawingOrder )
2757
2748
{
2758
- return e.attribute ( " drawingOrder" ).toInt ();
2749
+ layerNames.push_back ( layerName );
2750
+ }
2751
+ else
2752
+ {
2753
+ orderedLayerList.insert ( orderedLayerList.size (), layerName );
2754
+ }
2755
+ }
2756
+
2757
+ if ( useDrawingOrder )
2758
+ {
2759
+ for ( int i = layerNames.size () - 1 ; i >= 0 ; --i )
2760
+ {
2761
+ if ( useDrawingOrder )
2762
+ {
2763
+ orderedLayerList.insertMulti ( embedDrawingOrder, layerNames.at ( i ) );
2764
+ }
2759
2765
}
2760
- e = e.parentNode ().toElement ();
2761
2766
}
2762
2767
}
0 commit comments