39#include "moc_qgsrendererrasterpropertieswidget.cpp"
41using namespace Qt::StringLiterals;
43void QgsRendererRasterPropertiesWidget::initRendererWidgetFunctions()
45 static bool sInitialized =
false;
68 connect( mResetColorRenderingBtn, &QToolButton::clicked,
this, &QgsRendererRasterPropertiesWidget::mResetColorRenderingBtn_clicked );
70 initRendererWidgetFunctions();
72 mResamplingUtils.initWidgets( mRasterLayer, mZoomedInResamplingComboBox, mZoomedOutResamplingComboBox, mMaximumOversamplingSpinBox, mCbEarlyResampling );
76 connect( mSliderBrightness, &QAbstractSlider::valueChanged, mBrightnessSpinBox, &QSpinBox::setValue );
77 connect( mBrightnessSpinBox,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ), mSliderBrightness, &QAbstractSlider::setValue );
78 mBrightnessSpinBox->setClearValue( 0 );
80 connect( mSliderContrast, &QAbstractSlider::valueChanged, mContrastSpinBox, &QSpinBox::setValue );
81 connect( mContrastSpinBox,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ), mSliderContrast, &QAbstractSlider::setValue );
82 mContrastSpinBox->setClearValue( 0 );
84 connect( mSliderGamma, &QAbstractSlider::valueChanged,
this, &QgsRendererRasterPropertiesWidget::updateGammaSpinBox );
85 connect( mGammaSpinBox,
static_cast<void ( QDoubleSpinBox::* )(
double )
>( &QDoubleSpinBox::valueChanged ),
this, &QgsRendererRasterPropertiesWidget::updateGammaSlider );
86 mGammaSpinBox->setClearValue( 1.0 );
89 connect( sliderSaturation, &QAbstractSlider::valueChanged, spinBoxSaturation, &QSpinBox::setValue );
90 connect( spinBoxSaturation,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ), sliderSaturation, &QAbstractSlider::setValue );
91 spinBoxSaturation->setClearValue( 0 );
94 connect( sliderColorizeStrength, &QAbstractSlider::valueChanged, spinColorizeStrength, &QSpinBox::setValue );
95 connect( spinColorizeStrength,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ), sliderColorizeStrength, &QAbstractSlider::setValue );
96 spinColorizeStrength->setClearValue( 100 );
99 connect( comboGrayscale,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsRendererRasterPropertiesWidget::toggleSaturationControls );
102 connect( mColorizeCheck, &QAbstractButton::toggled,
this, &QgsRendererRasterPropertiesWidget::toggleColorizeControls );
107 connect( mGammaSpinBox,
static_cast<void ( QDoubleSpinBox::* )(
double )
>( &QDoubleSpinBox::valueChanged ),
this, &
QgsPanelWidget::widgetChanged );
113 connect( mBlendModeComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &
QgsPanelWidget::widgetChanged );
114 connect( mZoomedInResamplingComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &
QgsPanelWidget::widgetChanged );
115 connect( mZoomedOutResamplingComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &
QgsPanelWidget::widgetChanged );
116 connect( mMaximumOversamplingSpinBox,
static_cast<void ( QDoubleSpinBox::* )(
double )
>( &QDoubleSpinBox::valueChanged ),
this, &
QgsPanelWidget::widgetChanged );
133 const QString rendererName = cboRenderers->currentData().toString();
134 setRendererWidget( rendererName );
142 brightnessFilter->setBrightness( mSliderBrightness->value() );
143 brightnessFilter->setContrast( mSliderContrast->value() );
144 brightnessFilter->setGamma( mGammaSpinBox->value() );
149 rendererWidget->doComputations();
156 newRenderer->copyCommonProperties( oldRenderer,
false );
157 mRasterLayer->setRenderer( newRenderer );
164 hueSaturationFilter->setSaturation( sliderSaturation->value() );
166 hueSaturationFilter->setColorizeOn( mColorizeCheck->checkState() );
167 hueSaturationFilter->setColorizeColor( btnColorizeColor->color() );
168 hueSaturationFilter->setColorizeStrength( sliderColorizeStrength->value() );
169 hueSaturationFilter->setInvertColors( mInvertColorsCheck->isChecked() );
172 mResamplingUtils.refreshLayerFromWidgets();
174 mRasterLayer->setBlendMode( mBlendModeComboBox->blendMode() );
179 mRasterLayer = layer;
181 cboRenderers->blockSignals(
true );
182 cboRenderers->clear();
185 for (
const QString &name : constRenderersList )
196 cboRenderers->setCurrentIndex( -1 );
197 cboRenderers->blockSignals(
false );
201 setRendererWidget( renderer->type() );
206 mSliderBrightness->setValue( brightnessFilter->brightness() );
207 mSliderContrast->setValue( brightnessFilter->contrast() );
208 mGammaSpinBox->setValue( brightnessFilter->gamma() );
211 btnColorizeColor->setColorDialogTitle( tr(
"Select Color" ) );
212 btnColorizeColor->setContext( u
"symbology"_s );
218 sliderSaturation->setValue( hueSaturationFilter->saturation() );
219 comboGrayscale->setCurrentIndex( (
int ) hueSaturationFilter->grayscaleMode() );
222 toggleSaturationControls(
static_cast<int>( hueSaturationFilter->grayscaleMode() ) );
225 mColorizeCheck->setChecked( hueSaturationFilter->colorizeOn() );
226 btnColorizeColor->setColor( hueSaturationFilter->colorizeColor() );
227 toggleColorizeControls( hueSaturationFilter->colorizeOn() );
228 sliderColorizeStrength->setValue( hueSaturationFilter->colorizeStrength() );
230 mInvertColorsCheck->setChecked( hueSaturationFilter->invertColors() );
235 mBlendModeComboBox->setBlendMode( mRasterLayer->blendMode() );
238 mResamplingUtils.refreshWidgetsFromLayer();
241void QgsRendererRasterPropertiesWidget::mResetColorRenderingBtn_clicked()
243 mBlendModeComboBox->setBlendMode( QPainter::CompositionMode_SourceOver );
244 mSliderBrightness->setValue( 0 );
245 mSliderContrast->setValue( 0 );
246 mGammaSpinBox->setValue( 1.0 );
247 sliderSaturation->setValue( 0 );
249 mColorizeCheck->setChecked(
false );
250 sliderColorizeStrength->setValue( 100 );
251 mInvertColorsCheck->setChecked(
false );
254void QgsRendererRasterPropertiesWidget::toggleSaturationControls(
int grayscaleMode )
257 if ( grayscaleMode == 0 )
259 sliderSaturation->setEnabled(
true );
260 spinBoxSaturation->setEnabled(
true );
264 sliderSaturation->setEnabled(
false );
265 spinBoxSaturation->setEnabled(
false );
270void QgsRendererRasterPropertiesWidget::toggleColorizeControls(
bool colorizeEnabled )
273 btnColorizeColor->setEnabled( colorizeEnabled );
274 sliderColorizeStrength->setEnabled( colorizeEnabled );
275 spinColorizeStrength->setEnabled( colorizeEnabled );
279void QgsRendererRasterPropertiesWidget::setRendererWidget(
const QString &rendererName )
282 QgsRasterRendererWidget *oldWidget = mRendererWidget;
287 if ( QgsRasterRenderer *oldRenderer = mRasterLayer->renderer() )
290 alphaBand = oldRenderer->alphaBand();
291 opacity = oldRenderer->opacity();
292 nodataColor = oldRenderer->nodataColor();
295 QgsRasterRendererRegistryEntry rendererEntry;
304 : mRasterLayer->extent();
307 std::unique_ptr<QgsRasterRenderer> oldRenderer( oldWidget->
renderer() );
308 if ( !oldRenderer || oldRenderer->type() != rendererName )
310 if ( rendererName ==
"singlebandgray"_L1 )
314 whileBlocking( mRasterLayer )->setDefaultContrastEnhancement();
316 else if ( rendererName ==
"multibandcolor"_L1 )
320 whileBlocking( mRasterLayer )->setDefaultContrastEnhancement();
324 mRasterLayer->renderer()->setAlphaBand( alphaBand );
325 mRasterLayer->renderer()->setOpacity( opacity );
326 mRasterLayer->renderer()->setNodataColor( nodataColor );
330 stackedWidget->addWidget( mRendererWidget );
331 stackedWidget->setCurrentWidget( mRendererWidget );
335 QgsRasterRenderer *oldRenderer = oldWidget->
renderer();
336 QgsRasterRenderer *newRenderer = mRendererWidget->renderer();
338 QList<int> oldBands = oldRenderer->
usesBands();
339 QList<int> newBands = newRenderer->
usesBands();
341 if ( oldBands != newBands )
343 populateTransparencyTable( newRenderer );
353 if ( mRendererWidget != oldWidget )
356 const int widgetIndex = cboRenderers->findData( rendererName );
357 if ( widgetIndex != -1 )
359 whileBlocking( cboRenderers )->setCurrentIndex( widgetIndex );
363void QgsRendererRasterPropertiesWidget::refreshAfterStyleChanged()
365 if ( mRendererWidget )
367 QgsRasterRenderer *renderer = mRasterLayer->renderer();
368 if ( QgsMultiBandColorRenderer *mbcr =
dynamic_cast<QgsMultiBandColorRenderer *
>( renderer ) )
370 const QgsContrastEnhancement *redCe = mbcr->redContrastEnhancement();
373 mRendererWidget->setMin( QLocale().toString( redCe->
minimumValue() ), 0 );
374 mRendererWidget->setMax( QLocale().toString( redCe->
maximumValue() ), 0 );
376 const QgsContrastEnhancement *greenCe = mbcr->greenContrastEnhancement();
379 mRendererWidget->setMin( QLocale().toString( greenCe->
minimumValue() ), 1 );
380 mRendererWidget->setMax( QLocale().toString( greenCe->
maximumValue() ), 1 );
382 const QgsContrastEnhancement *blueCe = mbcr->blueContrastEnhancement();
385 mRendererWidget->setMin( QLocale().toString( blueCe->
minimumValue() ), 2 );
386 mRendererWidget->setMax( QLocale().toString( blueCe->
maximumValue() ), 2 );
389 else if ( QgsSingleBandGrayRenderer *sbgr =
dynamic_cast<QgsSingleBandGrayRenderer *
>( renderer ) )
391 const QgsContrastEnhancement *ce = sbgr->contrastEnhancement();
394 mRendererWidget->setMin( QLocale().toString( ce->
minimumValue() ) );
395 mRendererWidget->setMax( QLocale().toString( ce->
maximumValue() ) );
401void QgsRendererRasterPropertiesWidget::updateGammaSpinBox(
int value )
403 mGammaSpinBox->setValue( value / 100.0 );
406void QgsRendererRasterPropertiesWidget::updateGammaSlider(
double value )
408 mSliderGamma->setValue( value * 100 );
@ SingleBandColorData
Single band containing color data.
@ 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.
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.
Base class for all map layer types.
void styleChanged()
Signal emitted whenever a change affects the layer's style.
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.
void insertWidgetFunction(const QString &rendererName, QgsRasterRendererWidgetCreateFunc func)
Sets the widget creation function for a renderer.
QStringList renderersList() const
Returns a list of the names of registered renderers.
Raster renderer pipe that applies colors to a raster.
virtual QList< int > usesBands() const
Returns a list of band numbers used by the renderer.
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