@@ -115,6 +115,43 @@ void DataDefinedRestorer::restore()
115115 save ();
116116}
117117
118+ EyelidLayerDelegate::EyelidLayerDelegate ( QTreeView *parent )
119+ : QStyledItemDelegate( parent )
120+ , mLayersTree( parent )
121+ {}
122+
123+ void EyelidLayerDelegate::paint ( QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index ) const
124+ {
125+ QStyledItemDelegate::paint ( painter, option, index );
126+
127+
128+ QgsSymbolLayerModel *symbolLayerModel = static_cast <QgsSymbolLayerModel *>( mLayersTree ->model () );
129+
130+ QgsSymbolLayerModelNode *node = symbolLayerModel->index2node ( index );
131+
132+ if ( !node || !node->isLayer () )
133+ return ;
134+
135+ QgsSymbolLayer *symbolLayer = node->layer ();
136+
137+ QIcon icon;
138+ if ( symbolLayer->dataDefinedProperties ().isActive ( QgsSymbolLayer::Property::LayerEnabled ) )
139+ {
140+ icon = QgsApplication::getThemeIcon ( " /mIconDataDefineExpressionOn.svg" );
141+ }
142+ else if ( symbolLayer->enabled () )
143+ {
144+ icon = QgsApplication::getThemeIcon ( " /mActionShowAllLayers.svg" );
145+ }
146+ else
147+ {
148+ icon = QgsApplication::getThemeIcon ( " /mActionHideAllLayers.svg" );
149+ }
150+
151+ const QRect iconRect ( option.rect .left () + ( option.rect .width () - 16 ) / 2 , option.rect .top () + ( option.rect .height () - 16 ) / 2 , 16 , 16 );
152+ icon.paint ( painter, iconRect );
153+ }
154+
118155// /@endcond
119156
120157// ////////
@@ -183,6 +220,15 @@ QgsSymbolSelectorWidget::QgsSymbolSelectorWidget( QgsSymbol *symbol, QgsStyle *s
183220 layersTree->setModel ( mSymbolLayersModel );
184221 layersTree->setHeaderHidden ( true );
185222
223+ layersTree->header ()->setSectionResizeMode ( QgsSymbolLayerModel::NameColumn, QHeaderView::Stretch );
224+ layersTree->header ()->setMinimumSectionSize ( 10 );
225+ layersTree->header ()->setStretchLastSection ( false );
226+ layersTree->header ()->resizeSection ( QgsSymbolLayerModel::EyelidColumn, 20 );
227+
228+ EyelidLayerDelegate *eyeDelegate = new EyelidLayerDelegate ( layersTree );
229+ layersTree->setItemDelegateForColumn ( QgsSymbolLayerModel::EyelidColumn, eyeDelegate );
230+ connect ( layersTree, &QTreeView::clicked, this , &QgsSymbolSelectorWidget::eyelidClicked );
231+
186232 // get first feature from layer for previews
187233 if ( mVectorLayer )
188234 {
@@ -476,6 +522,35 @@ void QgsSymbolSelectorWidget::symbolChanged()
476522 connect ( layersTree->selectionModel (), &QItemSelectionModel::currentChanged, this , &QgsSymbolSelectorWidget::layerChanged );
477523}
478524
525+ void QgsSymbolSelectorWidget::eyelidClicked ( const QModelIndex &index )
526+ {
527+ if ( index.column () == QgsSymbolLayerModel::EyelidColumn )
528+ {
529+ QgsSymbolLayerModel *symbolLayerModel = static_cast <QgsSymbolLayerModel *>( layersTree->model () );
530+ QgsSymbolLayerModelNode *node = symbolLayerModel->index2node ( index );
531+
532+ if ( !node )
533+ return ;
534+
535+ if ( !node->isLayer () )
536+ return ;
537+
538+ QgsSymbolLayer *symbolLayer = node->layer ();
539+ if ( symbolLayer->dataDefinedProperties ().isActive ( QgsSymbolLayer::Property::LayerEnabled ) )
540+ {
541+ return ;
542+ }
543+
544+ symbolLayer->setEnabled ( !symbolLayer->enabled () );
545+
546+ updatePreview ();
547+ updateUi ();
548+ updateLayerPreview ();
549+ layerChanged ();
550+ emit symbolModified ();
551+ }
552+ }
553+
479554void QgsSymbolSelectorWidget::setWidget ( QWidget *widget )
480555{
481556 const int index = stackedWidget->addWidget ( widget );
0 commit comments