16 #include <QTreeWidget>
17 #include <QVBoxLayout>
33 mTree =
new QTreeWidget(
this );
34 mTree->setHeaderHidden(
true );
36 connect( mTree, &QTreeWidget::itemChanged,
this, [&]( QTreeWidgetItem *,
int ) { emit this->
changed(); } );
39 QVBoxLayout *vbox =
new QVBoxLayout();
40 vbox->setContentsMargins( 0, 0, 0, 0 );
41 vbox->addWidget( mTree );
55 TreeFillVisitor( QTreeWidgetItem *layerItem,
const QgsVectorLayer *layer, QHash<QgsSymbolLayerId, QTreeWidgetItem *> &items ):
56 mLayerItem( layerItem ), mLayer( layer ), mItems( items )
70 void visitSymbol( QTreeWidgetItem *rootItem,
const QString &identifier,
const QgsSymbol *symbol, QVector<int> rootPath )
81 QVector<int> indexPath = rootPath;
82 indexPath.append( idx );
84 QTreeWidgetItem *slItem =
new QTreeWidgetItem();
86 slItem->setData( 0, Qt::UserRole, idx );
87 slItem->setIcon( 0, slIcon );
88 auto flags = slItem->flags();
91 flags.setFlag( Qt::ItemIsUserCheckable,
true );
92 slItem->setCheckState( 0, Qt::Unchecked );
96 flags.setFlag( Qt::ItemIsUserCheckable,
false );
98 slItem->setFlags( flags );
99 rootItem->addChild( slItem );
100 slItem->setExpanded(
true );
102 mItems[
QgsSymbolLayerId( mCurrentIdentifier + identifier, indexPath )] = slItem;
106 visitSymbol( slItem, identifier, subSymbol, indexPath );
117 const QgsSymbol *symbol = symbolEntity->symbol();
122 QTreeWidgetItem *symbolItem =
new QTreeWidgetItem( QStringList() << ( mCurrentDescription + leaf.
description ) );
124 symbolItem->setData( 0, Qt::UserRole, mCurrentIdentifier );
125 symbolItem->setIcon( 0, icon );
126 mLayerItem->addChild( symbolItem );
127 symbolItem->setExpanded(
true );
129 visitSymbol( symbolItem, leaf.
identifier, symbol, {} );
135 QString mCurrentDescription;
136 QString mCurrentIdentifier;
137 QTreeWidgetItem *mLayerItem;
139 QHash<QgsSymbolLayerId, QTreeWidgetItem *> &mItems;
148 TreeFillVisitor visitor( mTree->invisibleRootItem(), mLayer, mItems );
154 QSet<QgsSymbolLayerId> sel;
155 for (
auto it = mItems.begin(); it != mItems.end(); it++ )
157 if ( it.value()->checkState( 0 ) == Qt::Checked )
158 sel.insert( it.key() );
166 for (
auto it = mItems.begin(); it != mItems.end(); it++ )
168 if ( it.value()->flags() & Qt::ItemIsUserCheckable )
169 it.value()->setCheckState( 0, Qt::Unchecked );
175 const auto it = mItems.find( lid );
176 if ( it != mItems.end() )
177 ( *it )->setCheckState( 0, Qt::Checked );