36static void _initRendererWidgetFunctions()
38 static bool sInitialized =
false;
62 connect( mResetColorRenderingBtn, &QToolButton::clicked,
this, &QgsRendererRasterPropertiesWidget::mResetColorRenderingBtn_clicked );
64 _initRendererWidgetFunctions();
66 mResamplingUtils.initWidgets( mRasterLayer, mZoomedInResamplingComboBox, mZoomedOutResamplingComboBox, mMaximumOversamplingSpinBox, mCbEarlyResampling );
70 connect( mSliderBrightness, &QAbstractSlider::valueChanged, mBrightnessSpinBox, &QSpinBox::setValue );
71 connect( mBrightnessSpinBox,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ), mSliderBrightness, &QAbstractSlider::setValue );
72 mBrightnessSpinBox->setClearValue( 0 );
74 connect( mSliderContrast, &QAbstractSlider::valueChanged, mContrastSpinBox, &QSpinBox::setValue );
75 connect( mContrastSpinBox,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ), mSliderContrast, &QAbstractSlider::setValue );
76 mContrastSpinBox->setClearValue( 0 );
78 connect( mSliderGamma, &QAbstractSlider::valueChanged,
this, &QgsRendererRasterPropertiesWidget::updateGammaSpinBox );
79 connect( mGammaSpinBox,
static_cast < void ( QDoubleSpinBox::* )(
double )
> ( &QDoubleSpinBox::valueChanged ),
this, &QgsRendererRasterPropertiesWidget::updateGammaSlider );
80 mGammaSpinBox->setClearValue( 1.0 );
83 connect( sliderSaturation, &QAbstractSlider::valueChanged, spinBoxSaturation, &QSpinBox::setValue );
84 connect( spinBoxSaturation,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ), sliderSaturation, &QAbstractSlider::setValue );
85 spinBoxSaturation->setClearValue( 0 );
88 connect( sliderColorizeStrength, &QAbstractSlider::valueChanged, spinColorizeStrength, &QSpinBox::setValue );
89 connect( spinColorizeStrength,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ), sliderColorizeStrength, &QAbstractSlider::setValue );
90 spinColorizeStrength->setClearValue( 100 );
93 connect( comboGrayscale,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsRendererRasterPropertiesWidget::toggleSaturationControls );
96 connect( mColorizeCheck, &QAbstractButton::toggled,
this, &QgsRendererRasterPropertiesWidget::toggleColorizeControls );
101 connect( mGammaSpinBox,
static_cast < void ( QDoubleSpinBox::* )(
double )
> ( &QDoubleSpinBox::valueChanged ),
this, &
QgsPanelWidget::widgetChanged );
103 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 const 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() );
163 hueSaturationFilter->setInvertColors( mInvertColorsCheck->isChecked() );
166 mResamplingUtils.refreshLayerFromWidgets();
168 mRasterLayer->
setBlendMode( mBlendModeComboBox->blendMode() );
173 mRasterLayer = layer;
175 cboRenderers->blockSignals(
true );
176 cboRenderers->clear();
179 for (
const QString &name : constRenderersList )
183 if ( ( mRasterLayer->
rasterType() != Qgis::RasterLayerType::SingleBandColorData && entry.
name != QLatin1String(
"singlebandcolordata" ) ) ||
184 ( mRasterLayer->
rasterType() == Qgis::RasterLayerType::SingleBandColorData && entry.
name == QLatin1String(
"singlebandcolordata" ) ) )
190 cboRenderers->setCurrentIndex( -1 );
191 cboRenderers->blockSignals(
false );
195 setRendererWidget( renderer->type() );
200 mSliderBrightness->setValue( brightnessFilter->brightness() );
201 mSliderContrast->setValue( brightnessFilter->contrast() );
202 mGammaSpinBox->setValue( brightnessFilter->gamma() );
205 btnColorizeColor->setColorDialogTitle( tr(
"Select Color" ) );
206 btnColorizeColor->setContext( QStringLiteral(
"symbology" ) );
212 sliderSaturation->setValue( hueSaturationFilter->saturation() );
213 comboGrayscale->setCurrentIndex( (
int ) hueSaturationFilter->grayscaleMode() );
216 toggleSaturationControls(
static_cast<int>( hueSaturationFilter->grayscaleMode() ) );
219 mColorizeCheck->setChecked( hueSaturationFilter->colorizeOn() );
220 btnColorizeColor->setColor( hueSaturationFilter->colorizeColor() );
221 toggleColorizeControls( hueSaturationFilter->colorizeOn() );
222 sliderColorizeStrength->setValue( hueSaturationFilter->colorizeStrength() );
224 mInvertColorsCheck->setChecked( hueSaturationFilter->invertColors() );
229 mBlendModeComboBox->setBlendMode( mRasterLayer->
blendMode() );
232 mResamplingUtils.refreshWidgetsFromLayer();
235void QgsRendererRasterPropertiesWidget::mResetColorRenderingBtn_clicked()
237 mBlendModeComboBox->setBlendMode( QPainter::CompositionMode_SourceOver );
238 mSliderBrightness->setValue( 0 );
239 mSliderContrast->setValue( 0 );
240 mGammaSpinBox->setValue( 1.0 );
241 sliderSaturation->setValue( 0 );
243 mColorizeCheck->setChecked(
false );
244 sliderColorizeStrength->setValue( 100 );
245 mInvertColorsCheck->setChecked(
false );
248void QgsRendererRasterPropertiesWidget::toggleSaturationControls(
int grayscaleMode )
251 if ( grayscaleMode == 0 )
253 sliderSaturation->setEnabled(
true );
254 spinBoxSaturation->setEnabled(
true );
258 sliderSaturation->setEnabled(
false );
259 spinBoxSaturation->setEnabled(
false );
264void QgsRendererRasterPropertiesWidget::toggleColorizeControls(
bool colorizeEnabled )
267 btnColorizeColor->setEnabled( colorizeEnabled );
268 sliderColorizeStrength->setEnabled( colorizeEnabled );
269 spinColorizeStrength->setEnabled( colorizeEnabled );
273void QgsRendererRasterPropertiesWidget::setRendererWidget(
const QString &rendererName )
284 alphaBand = oldRenderer->alphaBand();
285 opacity = oldRenderer->opacity();
286 nodataColor = oldRenderer->nodataColor();
294 QgsDebugMsgLevel( QStringLiteral(
"renderer has widgetCreateFunction" ), 3 );
301 std::unique_ptr< QgsRasterRenderer > oldRenderer( oldWidget->
renderer() );
302 if ( !oldRenderer || oldRenderer->type() != rendererName )
304 if ( rendererName == QLatin1String(
"singlebandgray" ) )
307 whileBlocking( mRasterLayer )->setDefaultContrastEnhancement();
309 else if ( rendererName == QLatin1String(
"multibandcolor" ) )
312 whileBlocking( mRasterLayer )->setDefaultContrastEnhancement();
322 stackedWidget->addWidget( mRendererWidget );
323 stackedWidget->setCurrentWidget( mRendererWidget );
330 QList<int> oldBands = oldRenderer->
usesBands();
331 QList<int> newBands = newRenderer->
usesBands();
333 if ( oldBands != newBands )
335 populateTransparencyTable( newRenderer );
345 if ( mRendererWidget != oldWidget )
348 const int widgetIndex = cboRenderers->findData( rendererName );
349 if ( widgetIndex != -1 )
351 whileBlocking( cboRenderers )->setCurrentIndex( widgetIndex );
356void QgsRendererRasterPropertiesWidget::refreshAfterStyleChanged()
358 if ( mRendererWidget )
394void QgsRendererRasterPropertiesWidget::updateGammaSpinBox(
int value )
396 mGammaSpinBox->setValue( value / 100.0 );
399void QgsRendererRasterPropertiesWidget::updateGammaSlider(
double value )
401 mSliderGamma->setValue( value * 100 );
@ SingleBandGray
A single band image drawn as a range of gray colors.
@ MultiBandColor
A layer containing 2 or more bands, mapped to RGB color space. In the case of a multiband with only t...
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.
virtual QgsRectangle extent() const
Returns the extent of the layer.
void setBlendMode(QPainter::CompositionMode blendMode)
Set the blending mode used for rendering a layer.
QgsCoordinateReferenceSystem crs
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
QgsCoordinateReferenceSystem destinationCrs() const
Returns the destination coordinate reference system for the map render.
Renderer for multiband images with the color components.
static bool layerIsContainedInGroupLayer(QgsProject *project, QgsMapLayer *layer)
Returns true if the specified layer is a child layer from any QgsGroupLayer in the given project.
static QgsProject * instance()
Returns the QgsProject singleton instance.
Represents a raster layer.
Qgis::RasterLayerType rasterType() const
Returns the raster layer type (which is a read only property).
QgsBrightnessContrastFilter * brightnessFilter() const
Returns the raster's brightness/contrast filter.
QgsRasterRenderer * renderer() const
Returns the raster's renderer.
QgsRasterDataProvider * dataProvider() override
Returns the source data provider.
void setRenderer(QgsRasterRenderer *renderer)
Sets the raster's renderer.
QgsHueSaturationFilter * hueSaturationFilter() const
Returns the raster's hue/saturation filter.
void insertWidgetFunction(const QString &rendererName, QgsRasterRendererWidgetCreateFunc func)
QStringList renderersList() const
Raster renderer pipe that applies colors to a raster.
virtual QList< int > usesBands() const
Returns a list of band numbers used by the renderer.
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....
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