37 static void _initRendererWidgetFunctions()
39 static bool sInitialized =
false;
63 connect( mResetColorRenderingBtn, &QToolButton::clicked,
this, &QgsRendererRasterPropertiesWidget::mResetColorRenderingBtn_clicked );
65 _initRendererWidgetFunctions();
67 mResamplingUtils.initWidgets( mRasterLayer, mZoomedInResamplingComboBox, mZoomedOutResamplingComboBox, mMaximumOversamplingSpinBox, mCbEarlyResampling );
71 connect( mSliderBrightness, &QAbstractSlider::valueChanged, mBrightnessSpinBox, &QSpinBox::setValue );
72 connect( mBrightnessSpinBox,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ), mSliderBrightness, &QAbstractSlider::setValue );
73 mBrightnessSpinBox->setClearValue( 0 );
75 connect( mSliderContrast, &QAbstractSlider::valueChanged, mContrastSpinBox, &QSpinBox::setValue );
76 connect( mContrastSpinBox,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ), mSliderContrast, &QAbstractSlider::setValue );
77 mContrastSpinBox->setClearValue( 0 );
79 connect( mSliderGamma, &QAbstractSlider::valueChanged,
this, &QgsRendererRasterPropertiesWidget::updateGammaSpinBox );
80 connect( mGammaSpinBox,
static_cast < void ( QDoubleSpinBox::* )(
double )
> ( &QDoubleSpinBox::valueChanged ),
this, &QgsRendererRasterPropertiesWidget::updateGammaSlider );
81 mGammaSpinBox->setClearValue( 1.0 );
84 connect( sliderSaturation, &QAbstractSlider::valueChanged, spinBoxSaturation, &QSpinBox::setValue );
85 connect( spinBoxSaturation,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ), sliderSaturation, &QAbstractSlider::setValue );
86 spinBoxSaturation->setClearValue( 0 );
89 connect( sliderColorizeStrength, &QAbstractSlider::valueChanged, spinColorizeStrength, &QSpinBox::setValue );
90 connect( spinColorizeStrength,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ), sliderColorizeStrength, &QAbstractSlider::setValue );
91 spinColorizeStrength->setClearValue( 100 );
94 connect( comboGrayscale,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsRendererRasterPropertiesWidget::toggleSaturationControls );
97 connect( mColorizeCheck, &QAbstractButton::toggled,
this, &QgsRendererRasterPropertiesWidget::toggleColorizeControls );
100 connect( mBrightnessSpinBox,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ),
this, &
QgsPanelWidget::widgetChanged );
102 connect( mGammaSpinBox,
static_cast < void ( QDoubleSpinBox::* )(
double )
> ( &QDoubleSpinBox::valueChanged ),
this, &
QgsPanelWidget::widgetChanged );
104 connect( spinColorizeStrength,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ),
this, &
QgsPanelWidget::widgetChanged );
107 connect( mBlendModeComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &
QgsPanelWidget::widgetChanged );
108 connect( mZoomedInResamplingComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &
QgsPanelWidget::widgetChanged );
109 connect( mZoomedOutResamplingComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &
QgsPanelWidget::widgetChanged );
110 connect( mMaximumOversamplingSpinBox,
static_cast < void ( QDoubleSpinBox::* )(
double )
> ( &QDoubleSpinBox::valueChanged ),
this, &
QgsPanelWidget::widgetChanged );
127 QString rendererName = cboRenderers->currentData().toString();
128 setRendererWidget( rendererName );
136 brightnessFilter->setBrightness( mSliderBrightness->value() );
137 brightnessFilter->setContrast( mSliderContrast->value() );
138 brightnessFilter->setGamma( mGammaSpinBox->value() );
143 rendererWidget->doComputations();
150 newRenderer->copyCommonProperties( oldRenderer,
false );
158 hueSaturationFilter->setSaturation( sliderSaturation->value() );
160 hueSaturationFilter->setColorizeOn( mColorizeCheck->checkState() );
161 hueSaturationFilter->setColorizeColor( btnColorizeColor->color() );
162 hueSaturationFilter->setColorizeStrength( sliderColorizeStrength->value() );
165 mResamplingUtils.refreshLayerFromWidgets();
167 mRasterLayer->
setBlendMode( mBlendModeComboBox->blendMode() );
172 mRasterLayer = layer;
174 cboRenderers->blockSignals(
true );
175 cboRenderers->clear();
178 for (
const QString &name : constRenderersList )
189 cboRenderers->setCurrentIndex( -1 );
190 cboRenderers->blockSignals(
false );
194 setRendererWidget( renderer->type() );
199 mSliderBrightness->setValue( brightnessFilter->brightness() );
200 mSliderContrast->setValue( brightnessFilter->contrast() );
201 mGammaSpinBox->setValue( brightnessFilter->gamma() );
204 btnColorizeColor->setColorDialogTitle( tr(
"Select Color" ) );
205 btnColorizeColor->setContext( QStringLiteral(
"symbology" ) );
211 sliderSaturation->setValue( hueSaturationFilter->saturation() );
212 comboGrayscale->setCurrentIndex( (
int ) hueSaturationFilter->grayscaleMode() );
215 toggleSaturationControls(
static_cast<int>( hueSaturationFilter->grayscaleMode() ) );
218 mColorizeCheck->setChecked( hueSaturationFilter->colorizeOn() );
219 btnColorizeColor->setColor( hueSaturationFilter->colorizeColor() );
220 toggleColorizeControls( hueSaturationFilter->colorizeOn() );
221 sliderColorizeStrength->setValue( hueSaturationFilter->colorizeStrength() );
225 mBlendModeComboBox->setBlendMode( mRasterLayer->
blendMode() );
228 mResamplingUtils.refreshWidgetsFromLayer();
231 void QgsRendererRasterPropertiesWidget::mResetColorRenderingBtn_clicked()
233 mBlendModeComboBox->setBlendMode( QPainter::CompositionMode_SourceOver );
234 mSliderBrightness->setValue( 0 );
235 mSliderContrast->setValue( 0 );
236 mGammaSpinBox->setValue( 1.0 );
237 sliderSaturation->setValue( 0 );
239 mColorizeCheck->setChecked(
false );
240 sliderColorizeStrength->setValue( 100 );
243 void QgsRendererRasterPropertiesWidget::toggleSaturationControls(
int grayscaleMode )
246 if ( grayscaleMode == 0 )
248 sliderSaturation->setEnabled(
true );
249 spinBoxSaturation->setEnabled(
true );
253 sliderSaturation->setEnabled(
false );
254 spinBoxSaturation->setEnabled(
false );
259 void QgsRendererRasterPropertiesWidget::toggleColorizeControls(
bool colorizeEnabled )
262 btnColorizeColor->setEnabled( colorizeEnabled );
263 sliderColorizeStrength->setEnabled( colorizeEnabled );
264 spinColorizeStrength->setEnabled( colorizeEnabled );
268 void QgsRendererRasterPropertiesWidget::setRendererWidget(
const QString &rendererName )
279 alphaBand = oldRenderer->alphaBand();
280 opacity = oldRenderer->opacity();
281 nodataColor = oldRenderer->nodataColor();
289 QgsDebugMsgLevel( QStringLiteral(
"renderer has widgetCreateFunction" ), 3 );
294 if ( rendererName == QLatin1String(
"singlebandgray" ) )
297 whileBlocking( mRasterLayer )->setDefaultContrastEnhancement();
299 else if ( rendererName == QLatin1String(
"multibandcolor" ) )
302 whileBlocking( mRasterLayer )->setDefaultContrastEnhancement();
311 stackedWidget->addWidget( mRendererWidget );
312 stackedWidget->setCurrentWidget( mRendererWidget );
319 QList<int> oldBands = oldRenderer->
usesBands();
320 QList<int> newBands = newRenderer->
usesBands();
322 if ( oldBands != newBands )
324 populateTransparencyTable( newRenderer );
334 if ( mRendererWidget != oldWidget )
337 int widgetIndex = cboRenderers->findData( rendererName );
338 if ( widgetIndex != -1 )
340 whileBlocking( cboRenderers )->setCurrentIndex( widgetIndex );
345 void QgsRendererRasterPropertiesWidget::refreshAfterStyleChanged()
347 if ( mRendererWidget )
383 void QgsRendererRasterPropertiesWidget::updateGammaSpinBox(
int value )
385 mGammaSpinBox->setValue( value / 100.0 );
388 void QgsRendererRasterPropertiesWidget::updateGammaSlider(
double value )
390 mSliderGamma->setValue( value * 100 );
static QgsRasterRendererRegistry * rasterRendererRegistry()
Returns the application's raster renderer registry, used for managing raster layer renderers.
Brightness/contrast and gamma correction filter pipe for rasters.
Manipulates raster or point cloud pixel values so that they enhanceContrast or clip into a specified ...
double minimumValue() const
Returns the minimum value for the contrast enhancement range.
double maximumValue() const
Returns the maximum value for the contrast enhancement range.
Color and saturation filter pipe for rasters.
Map canvas is a class for displaying all GIS data types on a canvas.
const QgsMapSettings & mapSettings() const
Gets access to properties used for map rendering.
QgsRectangle extent() const
Returns the current zoom extent of the map canvas.
Base class for all map layer types.
void setBlendMode(QPainter::CompositionMode blendMode)
Set the blending mode used for rendering a layer.
QPainter::CompositionMode blendMode() const
Returns the current blending mode for a layer.
void styleChanged()
Signal emitted whenever a change affects the layer's style.
QgsRectangle outputExtentToLayerExtent(const QgsMapLayer *layer, QgsRectangle extent) const
transform bounding box from output CRS to layer's CRS
Renderer for multiband images with the color components.
Represents a raster layer.
QgsHueSaturationFilter * hueSaturationFilter() const
Returns the raster's hue/saturation filter.
LayerType rasterType()
Returns the raster layer type (which is a read only property).
QgsRasterDataProvider * dataProvider() override
Returns the source data provider.
QgsBrightnessContrastFilter * brightnessFilter() const
Returns the raster's brightness/contrast filter.
QgsRasterRenderer * renderer() const
Returns the raster's renderer.
void setRenderer(QgsRasterRenderer *renderer)
Sets the raster's renderer.
void insertWidgetFunction(const QString &rendererName, QgsRasterRendererWidgetCreateFunc func)
QStringList renderersList() const
Raster renderer pipe that applies colors to a raster.
void setAlphaBand(int band)
void setOpacity(double opacity)
Sets the opacity for the renderer, where opacity is a value between 0 (totally transparent) and 1....
virtual QList< int > usesBands() const
Returns a list of band numbers used by the renderer.
void setNodataColor(const QColor &color)
Sets the color to use for shading nodata pixels.
A rectangle specified with double values.
Raster renderer pipe for single band gray.
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.
#define QgsDebugMsgLevel(str, level)
Registry for raster renderer entries.
QgsRasterRendererWidgetCreateFunc widgetCreateFunction