QGIS API Documentation 3.99.0-Master (d270888f95f)
Loading...
Searching...
No Matches
qgslayertreeembeddedwidgetsimpl.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgslayertreeembeddedwidgetsimpl.h
3 --------------------------------------
4 Date : May 2016
5 Copyright : (C) 2016 by Martin Dobias
6 Email : wonder dot sk at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
17
18#include "qgsmaplayer.h"
19
20#include <QFontMetrics>
21#include <QHBoxLayout>
22#include <QLabel>
23#include <QSlider>
24#include <QString>
25#include <QTimer>
26
27#include "moc_qgslayertreeembeddedwidgetsimpl.cpp"
28
29using namespace Qt::StringLiterals;
30
32
33QgsLayerTreeOpacityWidget::QgsLayerTreeOpacityWidget( QgsMapLayer *layer )
34 : mLayer( layer )
35{
36 setAutoFillBackground( true ); // override the content from model
37 QLabel *l = new QLabel( tr( "Opacity" ), this );
38 mSlider = new QSlider( Qt::Horizontal, this );
39 mSlider->setRange( 0, 1000 );
40 const int sliderW = static_cast<int>( QFontMetricsF( font() ).horizontalAdvance( 'X' ) * 16 * Qgis::UI_SCALE_FACTOR );
41 mSlider->setMinimumWidth( sliderW / 2 );
42 mSlider->setMaximumWidth( sliderW );
43 QHBoxLayout *lay = new QHBoxLayout();
44 QSpacerItem *spacerItem = new QSpacerItem( 1, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Minimum );
45 lay->addWidget( l );
46 lay->addWidget( mSlider );
47 lay->addItem( spacerItem );
48 setLayout( lay );
49
50 // timer for delayed transparency update - for more responsive GUI
51 mTimer = new QTimer( this );
52 mTimer->setSingleShot( true );
53 mTimer->setInterval( 100 );
54 connect( mTimer, &QTimer::timeout, this, &QgsLayerTreeOpacityWidget::updateOpacityFromSlider );
55
56 connect( mSlider, &QAbstractSlider::valueChanged, this, &QgsLayerTreeOpacityWidget::sliderValueChanged );
57
58 // init from layer
59 mSlider->setValue( mLayer->opacity() * 1000.0 );
60 connect( mLayer, &QgsMapLayer::opacityChanged, this, &QgsLayerTreeOpacityWidget::layerTrChanged );
61}
62
63QSize QgsLayerTreeOpacityWidget::sizeHint() const
64{
65 return QWidget::sizeHint();
66 //return QSize(200,200); // horizontal seems ignored, vertical is used for spacing
67}
68
69void QgsLayerTreeOpacityWidget::sliderValueChanged( int value )
70{
71 Q_UNUSED( value )
72
73 if ( mTimer->isActive() )
74 return;
75 mTimer->start();
76}
77
78void QgsLayerTreeOpacityWidget::updateOpacityFromSlider()
79{
80 if ( !mLayer )
81 return;
82 const int value = mSlider->value();
83 mLayer->setOpacity( value / 1000.0 );
84 mLayer->triggerRepaint();
85}
86
87void QgsLayerTreeOpacityWidget::layerTrChanged()
88{
89 if ( !mLayer )
90 return;
91 mSlider->blockSignals( true );
92 mSlider->setValue( mLayer->opacity() * 1000.0 );
93 mSlider->blockSignals( false );
94}
95
96//
97
98QString QgsLayerTreeOpacityWidget::Provider::id() const
99{
100 return u"transparency"_s;
101}
102
103QString QgsLayerTreeOpacityWidget::Provider::name() const
104{
105 return tr( "Opacity slider" );
106}
107
108QgsLayerTreeOpacityWidget *QgsLayerTreeOpacityWidget::Provider::createWidget( QgsMapLayer *layer, int widgetIndex )
109{
110 Q_UNUSED( widgetIndex )
111 return new QgsLayerTreeOpacityWidget( layer );
112}
113
114bool QgsLayerTreeOpacityWidget::Provider::supportsLayer( QgsMapLayer * )
115{
116 return true;
117}
118
static const double UI_SCALE_FACTOR
UI scaling factor.
Definition qgis.h:6499
Base class for all map layer types.
Definition qgsmaplayer.h:83
void opacityChanged(double opacity)
Emitted when the layer's opacity is changed, where opacity is a value between 0 (transparent) and 1 (...