static bool _readOldLegendLayerOrderGroup( const QDomElement& groupElem, QMap<int, QString>& layerIndexes ) { QDomNodeList legendChildren = groupElem.childNodes(); for ( int i = 0; i < legendChildren.size(); ++i ) { QDomElement currentChildElem = legendChildren.at( i ).toElement(); if ( currentChildElem.tagName() == "legendlayer" ) { QDomElement layerFileElem = currentChildElem.firstChildElement( "filegroup" ).firstChildElement( "legendlayerfile" ); int layerIndex = currentChildElem.attribute( "drawingOrder" ).toInt(); if ( layerIndex == -1 ) return false; // order undefined layerIndexes.insert( layerIndex, layerFileElem.attribute( "layerid" ) ); } else if ( currentChildElem.tagName() == "legendgroup" ) { if ( !_readOldLegendLayerOrderGroup( currentChildElem, layerIndexes ) ) return false; } } return true; }
bool QgsLayerTreeUtils::readOldLegendLayerOrder( const QDomElement &legendElem, bool &hasCustomOrder, QStringList &order ) { if ( legendElem.isNull() ) return false; hasCustomOrder = legendElem.attribute( QStringLiteral( "updateDrawingOrder" ) ) == QLatin1String( "false" ); order.clear(); QMap<int, QString> layerIndexes; // try to read the order. may be undefined (order = -1) for some or all items bool res = _readOldLegendLayerOrderGroup( legendElem, layerIndexes ); if ( !res && hasCustomOrder ) return false; // invalid state const auto constLayerIndexes = layerIndexes; for ( const QString &layerId : constLayerIndexes ) { QgsDebugMsg( layerId ); order.append( layerId ); } return true; }