@@ -129,7 +129,20 @@ void QgsLayerTreeView::modelRowsInserted( QModelIndex index, int start, int end
129
129
return ;
130
130
131
131
if ( QgsLayerTree::isLayer ( parentNode ) )
132
- return ; // layers have only symbology nodes (no expanded/collapsed handling)
132
+ {
133
+ // if ShowLegendAsTree flag is enabled in model, we may need to expand some legend nodes
134
+ QStringList expandedNodeKeys = parentNode->customProperty ( " expandedLegendNodes" ).toStringList ();
135
+ if ( expandedNodeKeys.isEmpty () )
136
+ return ;
137
+
138
+ foreach ( QgsLayerTreeModelLegendNode* legendNode, layerTreeModel ()->layerLegendNodes ( QgsLayerTree::toLayer ( parentNode ) ) )
139
+ {
140
+ QString ruleKey = legendNode->data ( QgsLayerTreeModelLegendNode::RuleKeyRole ).toString ();
141
+ if ( expandedNodeKeys.contains ( ruleKey ) )
142
+ setExpanded ( layerTreeModel ()->legendNode2index ( legendNode ), true );
143
+ }
144
+ return ;
145
+ }
133
146
134
147
QList<QgsLayerTreeNode*> children = parentNode->children ();
135
148
for ( int i = start; i <= end; ++i )
@@ -149,11 +162,27 @@ void QgsLayerTreeView::modelRowsRemoved()
149
162
150
163
void QgsLayerTreeView::updateExpandedStateToNode ( QModelIndex index )
151
164
{
152
- QgsLayerTreeNode* node = layerTreeModel ()->index2node ( index );
153
- if ( !node )
154
- return ;
155
-
156
- node->setExpanded ( isExpanded ( index ) );
165
+ if ( QgsLayerTreeNode* node = layerTreeModel ()->index2node ( index ) )
166
+ {
167
+ node->setExpanded ( isExpanded ( index ) );
168
+ }
169
+ else if ( QgsLayerTreeModelLegendNode* node = layerTreeModel ()->index2legendNode ( index ) )
170
+ {
171
+ QString ruleKey = node->data ( QgsLayerTreeModelLegendNode::RuleKeyRole ).toString ();
172
+ QStringList lst = node->layerNode ()->customProperty ( " expandedLegendNodes" ).toStringList ();
173
+ bool expanded = isExpanded ( index );
174
+ bool isInList = lst.contains ( ruleKey );
175
+ if ( expanded && !isInList )
176
+ {
177
+ lst.append ( ruleKey );
178
+ node->layerNode ()->setCustomProperty ( " expandedLegendNodes" , lst );
179
+ }
180
+ else if ( !expanded && isInList )
181
+ {
182
+ lst.removeAll ( ruleKey );
183
+ node->layerNode ()->setCustomProperty ( " expandedLegendNodes" , lst );
184
+ }
185
+ }
157
186
}
158
187
159
188
void QgsLayerTreeView::onCurrentChanged ()
0 commit comments