18 #include <QFontMetrics>
19 #include <QHBoxLayout>
31 QgsLayerTreeOpacityWidget::QgsLayerTreeOpacityWidget(
QgsMapLayer *layer )
34 setAutoFillBackground(
true );
35 QLabel *l =
new QLabel( tr(
"Opacity" ),
this );
36 mSlider =
new QSlider( Qt::Horizontal,
this );
37 mSlider->setRange( 0, 1000 );
38 #if QT_VERSION < QT_VERSION_CHECK(5, 11, 0)
39 int sliderW =
static_cast< int >( QFontMetricsF( font() ).width(
'X' ) * 16 *
Qgis::UI_SCALE_FACTOR );
41 int sliderW =
static_cast< int >( QFontMetricsF( font() ).horizontalAdvance(
'X' ) * 16 *
Qgis::UI_SCALE_FACTOR );
43 mSlider->setMinimumWidth( sliderW / 2 );
44 mSlider->setMaximumWidth( sliderW );
45 QHBoxLayout *lay =
new QHBoxLayout();
46 QSpacerItem *spacerItem =
new QSpacerItem( 1, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Minimum );
48 lay->addWidget( mSlider );
49 lay->addItem( spacerItem );
53 mTimer =
new QTimer(
this );
54 mTimer->setSingleShot(
true );
55 mTimer->setInterval( 100 );
56 connect( mTimer, &QTimer::timeout,
this, &QgsLayerTreeOpacityWidget::updateOpacityFromSlider );
58 connect( mSlider, &QAbstractSlider::valueChanged,
this, &QgsLayerTreeOpacityWidget::sliderValueChanged );
61 switch ( mLayer->type() )
66 mSlider->setValue( vl->
opacity() * 1000.0 );
73 mSlider->setValue( qobject_cast<QgsRasterLayer *>( mLayer )->renderer()->opacity() * 1000 );
87 QSize QgsLayerTreeOpacityWidget::sizeHint()
const
89 return QWidget::sizeHint();
93 void QgsLayerTreeOpacityWidget::sliderValueChanged(
int value )
97 if ( mTimer->isActive() )
102 void QgsLayerTreeOpacityWidget::updateOpacityFromSlider()
104 int value = mSlider->value();
106 switch ( mLayer->type() )
110 qobject_cast<QgsVectorLayer *>( mLayer )->setOpacity( value / 1000.0 );
115 qobject_cast<QgsRasterLayer *>( mLayer )->renderer()->setOpacity( value / 1000.0 );
126 mLayer->triggerRepaint();
129 void QgsLayerTreeOpacityWidget::layerTrChanged()
131 mSlider->blockSignals(
true );
132 mSlider->setValue( qobject_cast<QgsVectorLayer *>( mLayer )->opacity() * 1000.0 );
133 mSlider->blockSignals(
false );
138 QString QgsLayerTreeOpacityWidget::Provider::id()
const
140 return QStringLiteral(
"transparency" );
143 QString QgsLayerTreeOpacityWidget::Provider::name()
const
145 return tr(
"Opacity slider" );
148 QgsLayerTreeOpacityWidget *QgsLayerTreeOpacityWidget::Provider::createWidget(
QgsMapLayer *layer,
int widgetIndex )
150 Q_UNUSED( widgetIndex )
151 return new QgsLayerTreeOpacityWidget( layer );
154 bool QgsLayerTreeOpacityWidget::Provider::supportsLayer(
QgsMapLayer *layer )
156 switch ( layer->
type() )