QGIS API Documentation 3.99.0-Master (26c88405ac0)
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 <QTimer>
25
26#include "moc_qgslayertreeembeddedwidgetsimpl.cpp"
27
29
30QgsLayerTreeOpacityWidget::QgsLayerTreeOpacityWidget( QgsMapLayer *layer )
31 : mLayer( layer )
32{
33 setAutoFillBackground( true ); // override the content from model
34 QLabel *l = new QLabel( tr( "Opacity" ), this );
35 mSlider = new QSlider( Qt::Horizontal, this );
36 mSlider->setRange( 0, 1000 );
37 const int sliderW = static_cast<int>( QFontMetricsF( font() ).horizontalAdvance( 'X' ) * 16 * Qgis::UI_SCALE_FACTOR );
38 mSlider->setMinimumWidth( sliderW / 2 );
39 mSlider->setMaximumWidth( sliderW );
40 QHBoxLayout *lay = new QHBoxLayout();
41 QSpacerItem *spacerItem = new QSpacerItem( 1, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Minimum );
42 lay->addWidget( l );
43 lay->addWidget( mSlider );
44 lay->addItem( spacerItem );
45 setLayout( lay );
46
47 // timer for delayed transparency update - for more responsive GUI
48 mTimer = new QTimer( this );
49 mTimer->setSingleShot( true );
50 mTimer->setInterval( 100 );
51 connect( mTimer, &QTimer::timeout, this, &QgsLayerTreeOpacityWidget::updateOpacityFromSlider );
52
53 connect( mSlider, &QAbstractSlider::valueChanged, this, &QgsLayerTreeOpacityWidget::sliderValueChanged );
54
55 // init from layer
56 mSlider->setValue( mLayer->opacity() * 1000.0 );
57 connect( mLayer, &QgsMapLayer::opacityChanged, this, &QgsLayerTreeOpacityWidget::layerTrChanged );
58}
59
60QSize QgsLayerTreeOpacityWidget::sizeHint() const
61{
62 return QWidget::sizeHint();
63 //return QSize(200,200); // horizontal seems ignored, vertical is used for spacing
64}
65
66void QgsLayerTreeOpacityWidget::sliderValueChanged( int value )
67{
68 Q_UNUSED( value )
69
70 if ( mTimer->isActive() )
71 return;
72 mTimer->start();
73}
74
75void QgsLayerTreeOpacityWidget::updateOpacityFromSlider()
76{
77 if ( !mLayer )
78 return;
79 const int value = mSlider->value();
80 mLayer->setOpacity( value / 1000.0 );
81 mLayer->triggerRepaint();
82}
83
84void QgsLayerTreeOpacityWidget::layerTrChanged()
85{
86 if ( !mLayer )
87 return;
88 mSlider->blockSignals( true );
89 mSlider->setValue( mLayer->opacity() * 1000.0 );
90 mSlider->blockSignals( false );
91}
92
93//
94
95QString QgsLayerTreeOpacityWidget::Provider::id() const
96{
97 return QStringLiteral( "transparency" );
98}
99
100QString QgsLayerTreeOpacityWidget::Provider::name() const
101{
102 return tr( "Opacity slider" );
103}
104
105QgsLayerTreeOpacityWidget *QgsLayerTreeOpacityWidget::Provider::createWidget( QgsMapLayer *layer, int widgetIndex )
106{
107 Q_UNUSED( widgetIndex )
108 return new QgsLayerTreeOpacityWidget( layer );
109}
110
111bool QgsLayerTreeOpacityWidget::Provider::supportsLayer( QgsMapLayer * )
112{
113 return true;
114}
115
static const double UI_SCALE_FACTOR
UI scaling factor.
Definition qgis.h:6222
Base class for all map layer types.
Definition qgsmaplayer.h:80
void opacityChanged(double opacity)
Emitted when the layer's opacity is changed, where opacity is a value between 0 (transparent) and 1 (...