@@ -44,6 +44,63 @@ bool QgsLayerTreeUtils::readOldLegend( QgsLayerTreeGroup* root, const QDomElemen
44
44
return true ;
45
45
}
46
46
47
+
48
+
49
+ static bool _readOldLegendLayerOrderGroup ( const QDomElement& groupElem, QMap<int , QString>& layerIndexes )
50
+ {
51
+ QDomNodeList legendChildren = groupElem.childNodes ();
52
+
53
+ for ( int i = 0 ; i < legendChildren.size (); ++i )
54
+ {
55
+ QDomElement currentChildElem = legendChildren.at ( i ).toElement ();
56
+ if ( currentChildElem.tagName () == " legendlayer" )
57
+ {
58
+ QDomElement layerFileElem = currentChildElem.firstChildElement ( " filegroup" ).firstChildElement ( " legendlayerfile" );
59
+
60
+ int layerIndex = currentChildElem.attribute ( " drawingOrder" ).toInt ();
61
+ if ( layerIndex == -1 )
62
+ return false ; // order undefined
63
+ layerIndexes.insert ( layerIndex, layerFileElem.attribute ( " layerid" ) );
64
+ }
65
+ else if ( currentChildElem.tagName () == " legendgroup" )
66
+ {
67
+ if ( !_readOldLegendLayerOrderGroup ( currentChildElem, layerIndexes ) )
68
+ return false ;
69
+ }
70
+ }
71
+
72
+ return true ;
73
+ }
74
+
75
+
76
+ bool QgsLayerTreeUtils::readOldLegendLayerOrder ( const QDomElement& legendElem, bool & hasCustomOrder, QStringList& order )
77
+ {
78
+ if ( legendElem.isNull () )
79
+ return false ;
80
+
81
+ hasCustomOrder = legendElem.attribute ( " updateDrawingOrder" ) == " false" ;
82
+ order.clear ();
83
+
84
+ QMap<int , QString> layerIndexes;
85
+
86
+ // try to read the order. may be undefined (order = -1) for some or all items
87
+ bool res = _readOldLegendLayerOrderGroup ( legendElem, layerIndexes );
88
+
89
+ if ( !res && hasCustomOrder )
90
+ return false ; // invalid state
91
+
92
+ foreach ( QString layerId, layerIndexes )
93
+ {
94
+ QgsDebugMsg ( layerId );
95
+ order.append ( layerId );
96
+ }
97
+
98
+ return true ;
99
+ }
100
+
101
+
102
+
103
+
47
104
QString QgsLayerTreeUtils::checkStateToXml ( Qt::CheckState state )
48
105
{
49
106
switch ( state )
@@ -74,6 +131,7 @@ void QgsLayerTreeUtils::addLegendGroupToTreeWidget( const QDomElement& groupElem
74
131
parent->addChildNode ( groupNode );
75
132
76
133
groupNode->setVisible ( checkStateFromXml ( groupElem.attribute ( " checked" ) ) );
134
+ groupNode->setExpanded ( groupElem.attribute ( " open" ) == " true" );
77
135
78
136
if ( groupElem.attribute ( " embedded" ) == " 1" )
79
137
{
@@ -97,15 +155,23 @@ void QgsLayerTreeUtils::addLegendGroupToTreeWidget( const QDomElement& groupElem
97
155
98
156
void QgsLayerTreeUtils::addLegendLayerToTreeWidget ( const QDomElement& layerElem, QgsLayerTreeGroup* parent )
99
157
{
100
- QString layerId = layerElem.firstChildElement ( " filegroup" ).firstChildElement ( " legendlayerfile" ).attribute ( " layerid" );
158
+ QDomElement layerFileElem = layerElem.firstChildElement ( " filegroup" ).firstChildElement ( " legendlayerfile" );
159
+ QString layerId = layerFileElem.attribute ( " layerid" );
101
160
QgsLayerTreeLayer* layerNode = new QgsLayerTreeLayer ( layerId, layerElem.attribute ( " name" ) );
102
161
103
162
layerNode->setVisible ( checkStateFromXml ( layerElem.attribute ( " checked" ) ) );
163
+ layerNode->setExpanded ( layerElem.attribute ( " open" ) == " true" );
164
+
165
+ if ( layerFileElem.attribute ( " isInOverview" ) == " 1" )
166
+ layerNode->setCustomProperty ( " overview" , 1 );
104
167
105
168
if ( layerElem.attribute ( " embedded" ) == " 1" )
106
169
layerNode->setCustomProperty ( " embedded" , 1 );
107
170
108
- // TODO: is in overview, drawing order, show feature count
171
+ if ( layerElem.attribute ( " showFeatureCount" ) == " 1" )
172
+ layerNode->setCustomProperty ( " showFeatureCount" , 1 );
173
+
174
+ // drawing order is handled by readOldLegendLayerOrder()
109
175
110
176
parent->addChildNode ( layerNode );
111
177
}
0 commit comments