@@ -99,6 +99,79 @@ bool QgsLayerTreeUtils::readOldLegendLayerOrder( const QDomElement& legendElem,
99
99
}
100
100
101
101
102
+ static QDomElement _writeOldLegendLayer ( QDomDocument& doc, QgsLayerTreeLayer* nodeLayer, bool hasCustomOrder, const QStringList& order )
103
+ {
104
+ int drawingOrder = -1 ;
105
+ if ( hasCustomOrder )
106
+ drawingOrder = order.indexOf ( nodeLayer->layerId () );
107
+
108
+ QDomElement layerElem = doc.createElement ( " legendlayer" );
109
+ layerElem.setAttribute ( " drawingOrder" , drawingOrder );
110
+ layerElem.setAttribute ( " open" , nodeLayer->isExpanded () ? " true" : " false" );
111
+ layerElem.setAttribute ( " checked" , QgsLayerTreeUtils::checkStateToXml ( nodeLayer->isVisible () ) );
112
+ layerElem.setAttribute ( " name" , nodeLayer->layerName () );
113
+ layerElem.setAttribute ( " showFeatureCount" , nodeLayer->customProperty ( " showFeatureCount" ).toInt () );
114
+
115
+ QDomElement fileGroupElem = doc.createElement ( " filegroup" );
116
+ fileGroupElem.setAttribute ( " open" , nodeLayer->isExpanded () ? " true" : " false" );
117
+ fileGroupElem.setAttribute ( " hidden" , " false" );
118
+
119
+ QDomElement layerFileElem = doc.createElement ( " legendlayerfile" );
120
+ layerFileElem.setAttribute ( " isInOverview" , nodeLayer->customProperty ( " overview" ).toInt () );
121
+ layerFileElem.setAttribute ( " layerid" , nodeLayer->layerId () );
122
+ layerFileElem.setAttribute ( " visible" , nodeLayer->isVisible () == Qt::Checked ? 1 : 0 );
123
+
124
+ layerElem.appendChild ( fileGroupElem );
125
+ fileGroupElem.appendChild ( layerFileElem );
126
+ return layerElem;
127
+ }
128
+
129
+ // need forward declaration as write[..]Group and write[..]GroupChildren call each other
130
+ static void _writeOldLegendGroupChildren ( QDomDocument& doc, QDomElement& groupElem, QgsLayerTreeGroup* nodeGroup, bool hasCustomOrder, const QStringList& order );
131
+
132
+ static QDomElement _writeOldLegendGroup ( QDomDocument& doc, QgsLayerTreeGroup* nodeGroup, bool hasCustomOrder, const QStringList& order )
133
+ {
134
+ QDomElement groupElem = doc.createElement ( " legendgroup" );
135
+ groupElem.setAttribute ( " open" , nodeGroup->isExpanded () ? " true" : " false" );
136
+ groupElem.setAttribute ( " name" , nodeGroup->name () );
137
+ groupElem.setAttribute ( " checked" , QgsLayerTreeUtils::checkStateToXml ( nodeGroup->isVisible () ) );
138
+
139
+ if ( nodeGroup->customProperty ( " embedded" ).toInt () )
140
+ {
141
+ groupElem.setAttribute ( " embedded" , 1 );
142
+ groupElem.setAttribute ( " project" , nodeGroup->customProperty ( " embedded_project" ).toString () );
143
+ }
144
+
145
+ _writeOldLegendGroupChildren ( doc, groupElem, nodeGroup, hasCustomOrder, order );
146
+ return groupElem;
147
+ }
148
+
149
+
150
+ static void _writeOldLegendGroupChildren ( QDomDocument& doc, QDomElement& groupElem, QgsLayerTreeGroup* nodeGroup, bool hasCustomOrder, const QStringList& order )
151
+ {
152
+ foreach ( QgsLayerTreeNode* node, nodeGroup->children () )
153
+ {
154
+ if ( QgsLayerTree::isGroup ( node ) )
155
+ {
156
+ groupElem.appendChild ( _writeOldLegendGroup ( doc, QgsLayerTree::toGroup ( node ), hasCustomOrder, order ) );
157
+ }
158
+ else if ( QgsLayerTree::isLayer ( node ) )
159
+ {
160
+ groupElem.appendChild ( _writeOldLegendLayer ( doc, QgsLayerTree::toLayer ( node ), hasCustomOrder, order ) );
161
+ }
162
+ }
163
+ }
164
+
165
+
166
+ QDomElement QgsLayerTreeUtils::writeOldLegend ( QDomDocument& doc, QgsLayerTreeGroup* root, bool hasCustomOrder, const QStringList& order )
167
+ {
168
+ QDomElement legendElem = doc.createElement ( " legend" );
169
+ legendElem.setAttribute ( " updateDrawingOrder" , hasCustomOrder ? " false" : " true" );
170
+
171
+ _writeOldLegendGroupChildren ( doc, legendElem, root, hasCustomOrder, order );
172
+
173
+ return legendElem;
174
+ }
102
175
103
176
104
177
QString QgsLayerTreeUtils::checkStateToXml ( Qt::CheckState state )
@@ -223,3 +296,17 @@ void QgsLayerTreeUtils::removeInvalidLayers( QgsLayerTreeGroup* group )
223
296
foreach ( QgsLayerTreeNode* node, nodesToRemove )
224
297
group->removeChildNode ( node );
225
298
}
299
+
300
+ void QgsLayerTreeUtils::removeChildrenOfEmbeddedGroups ( QgsLayerTreeGroup* group )
301
+ {
302
+ foreach ( QgsLayerTreeNode* child, group->children () )
303
+ {
304
+ if ( QgsLayerTree::isGroup ( child ) )
305
+ {
306
+ if ( child->customProperty ( " embedded" ).toInt () )
307
+ QgsLayerTree::toGroup ( child )->removeAllChildren ();
308
+ else
309
+ removeChildrenOfEmbeddedGroups ( QgsLayerTree::toGroup ( child ) );
310
+ }
311
+ }
312
+ }
0 commit comments