71 SymbolLayerFillVisitor( QTreeWidgetItem *layerItem,
const QgsVectorLayer *layer, QHash<QgsSymbolLayerReference, QTreeWidgetItem *> &items, QScreen *screen )
72 : mLayerItem( layerItem )
91 : sl( _sl ), symbol( _symbol ) {};
95 QList<TreeNode> children;
99 bool visitSymbol( TreeNode &parent,
const QString &identifier,
const QgsSymbol *symbol, QVector<int> rootPath )
107 QVector<int> indexPath = rootPath;
108 indexPath.append( idx );
110 TreeNode node( symbol, sl );
111 if ( ( sl->
layerType() ==
"MaskMarker" ) || ( subSymbol && visitSymbol( node, identifier, subSymbol, indexPath ) ) )
114 parent.children << node;
126 const QgsSymbol *symbol = symbolEntity->symbol();
130 TreeNode node( symbol );
131 if ( visitSymbol( node, leaf.
identifier, symbol, {} ) )
137 void createItems(
const QString &leafDescription, QTreeWidgetItem *rootItem,
const TreeNode &node )
139 QTreeWidgetItem *item =
nullptr;
143 item =
new QTreeWidgetItem( rootItem, QStringList() << ( mCurrentDescription + leafDescription ) );
145 item->setIcon( 0, icon );
150 item =
new QTreeWidgetItem( rootItem );
152 item->setIcon( 0, slIcon );
153 if ( node.sl->layerType() ==
"MaskMarker" )
155 item->setText( 0, QObject::tr(
"Mask symbol layer" ) );
156 item->setFlags( item->flags() | Qt::ItemIsUserCheckable );
157 item->setCheckState( 0, Qt::Unchecked );
164 rootItem->addChild( item );
166 for ( TreeNode child : node.children )
167 createItems( leafDescription, item, child );
171 QString mCurrentDescription;
172 QTreeWidgetItem *mLayerItem;
174 QHash<QgsSymbolLayerReference, QTreeWidgetItem *> &mItems;
175 QPointer<QScreen> mScreen;
181 LabelMasksVisitor( QTreeWidgetItem *layerItem,
const QgsVectorLayer *layer, QHash<QgsSymbolLayerReference, QTreeWidgetItem *> &items )
182 : mLayerItem( layerItem ), mLayer( layer ), mItems( items )
199 if ( labelSettingsEntity->settings().format().mask().enabled() )
201 const QString maskTitle = currentRule.isEmpty()
202 ? QObject::tr(
"Label mask" )
203 : QObject::tr(
"Label mask for '%1' rule" ).arg( currentDescription );
204 QTreeWidgetItem *slItem =
new QTreeWidgetItem( mLayerItem, QStringList() << maskTitle );
205 slItem->setFlags( slItem->flags() | Qt::ItemIsUserCheckable );
206 slItem->setCheckState( 0, Qt::Unchecked );
207 mLayerItem->addChild( slItem );
214 QHash<QString, QHash<QString, QSet<QgsSymbolLayerId>>> masks;
217 QString currentDescription;
218 QTreeWidgetItem *mLayerItem;
220 QHash<QgsSymbolLayerReference, QTreeWidgetItem *> &mItems;
234 auto layerItem = std::make_unique<QTreeWidgetItem>( mTree, QStringList() << layer->
name() );
235 layerItem->setData( 0, Qt::UserRole, QVariant::fromValue( vl ) );
239 LabelMasksVisitor lblVisitor( layerItem.get(), vl, mItems );
243 SymbolLayerFillVisitor slVisitor( layerItem.get(), vl, mItems, screen() );
246 if ( layerItem->childCount() > 0 )
247 mTree->addTopLevelItem( layerItem.release() );
250 expandAll( mTree->invisibleRootItem() );