37#include "moc_qgsrendererrasterpropertieswidget.cpp"
39void QgsRendererRasterPropertiesWidget::initRendererWidgetFunctions()
41 static bool sInitialized =
false;
64 connect( mResetColorRenderingBtn, &QToolButton::clicked,
this, &QgsRendererRasterPropertiesWidget::mResetColorRenderingBtn_clicked );
66 initRendererWidgetFunctions();
68 mResamplingUtils.initWidgets( mRasterLayer, mZoomedInResamplingComboBox, mZoomedOutResamplingComboBox, mMaximumOversamplingSpinBox, mCbEarlyResampling );
72 connect( mSliderBrightness, &QAbstractSlider::valueChanged, mBrightnessSpinBox, &QSpinBox::setValue );
73 connect( mBrightnessSpinBox,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ), mSliderBrightness, &QAbstractSlider::setValue );
74 mBrightnessSpinBox->setClearValue( 0 );
76 connect( mSliderContrast, &QAbstractSlider::valueChanged, mContrastSpinBox, &QSpinBox::setValue );
77 connect( mContrastSpinBox,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ), mSliderContrast, &QAbstractSlider::setValue );
78 mContrastSpinBox->setClearValue( 0 );
80 connect( mSliderGamma, &QAbstractSlider::valueChanged,
this, &QgsRendererRasterPropertiesWidget::updateGammaSpinBox );
81 connect( mGammaSpinBox,
static_cast<void ( QDoubleSpinBox::* )(
double )
>( &QDoubleSpinBox::valueChanged ),
this, &QgsRendererRasterPropertiesWidget::updateGammaSlider );
82 mGammaSpinBox->setClearValue( 1.0 );
85 connect( sliderSaturation, &QAbstractSlider::valueChanged, spinBoxSaturation, &QSpinBox::setValue );
86 connect( spinBoxSaturation,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ), sliderSaturation, &QAbstractSlider::setValue );
87 spinBoxSaturation->setClearValue( 0 );
90 connect( sliderColorizeStrength, &QAbstractSlider::valueChanged, spinColorizeStrength, &QSpinBox::setValue );
91 connect( spinColorizeStrength,
static_cast<void ( QSpinBox::* )(
int )
>( &QSpinBox::valueChanged ), sliderColorizeStrength, &QAbstractSlider::setValue );
92 spinColorizeStrength->setClearValue( 100 );
95 connect( comboGrayscale,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsRendererRasterPropertiesWidget::toggleSaturationControls );
98 connect( mColorizeCheck, &QAbstractButton::toggled,
this, &QgsRendererRasterPropertiesWidget::toggleColorizeControls );
103 connect( mGammaSpinBox,
static_cast<void ( QDoubleSpinBox::* )(
double )
>( &QDoubleSpinBox::valueChanged ),
this, &
QgsPanelWidget::widgetChanged );
109 connect( mBlendModeComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &
QgsPanelWidget::widgetChanged );
110 connect( mZoomedInResamplingComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &
QgsPanelWidget::widgetChanged );
111 connect( mZoomedOutResamplingComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &
QgsPanelWidget::widgetChanged );
112 connect( mMaximumOversamplingSpinBox,
static_cast<void ( QDoubleSpinBox::* )(
double )
>( &QDoubleSpinBox::valueChanged ),
this, &
QgsPanelWidget::widgetChanged );
129 const QString rendererName = cboRenderers->currentData().toString();
130 setRendererWidget( rendererName );
138 brightnessFilter->setBrightness( mSliderBrightness->value() );
139 brightnessFilter->setContrast( mSliderContrast->value() );
140 brightnessFilter->setGamma( mGammaSpinBox->value() );
145 rendererWidget->doComputations();
152 newRenderer->copyCommonProperties( oldRenderer,
false );
153 mRasterLayer->setRenderer( newRenderer );
160 hueSaturationFilter->setSaturation( sliderSaturation->value() );
162 hueSaturationFilter->setColorizeOn( mColorizeCheck->checkState() );
163 hueSaturationFilter->setColorizeColor( btnColorizeColor->color() );
164 hueSaturationFilter->setColorizeStrength( sliderColorizeStrength->value() );
165 hueSaturationFilter->setInvertColors( mInvertColorsCheck->isChecked() );
168 mResamplingUtils.refreshLayerFromWidgets();
170 mRasterLayer->setBlendMode( mBlendModeComboBox->blendMode() );
175 mRasterLayer = layer;
177 cboRenderers->blockSignals(
true );
178 cboRenderers->clear();
181 for (
const QString &name : constRenderersList )
191 cboRenderers->setCurrentIndex( -1 );
192 cboRenderers->blockSignals(
false );
196 setRendererWidget( renderer->type() );
201 mSliderBrightness->setValue( brightnessFilter->brightness() );
202 mSliderContrast->setValue( brightnessFilter->contrast() );
203 mGammaSpinBox->setValue( brightnessFilter->gamma() );
206 btnColorizeColor->setColorDialogTitle( tr(
"Select Color" ) );
207 btnColorizeColor->setContext( QStringLiteral(
"symbology" ) );
213 sliderSaturation->setValue( hueSaturationFilter->saturation() );
214 comboGrayscale->setCurrentIndex( (
int ) hueSaturationFilter->grayscaleMode() );
217 toggleSaturationControls(
static_cast<int>( hueSaturationFilter->grayscaleMode() ) );
220 mColorizeCheck->setChecked( hueSaturationFilter->colorizeOn() );
221 btnColorizeColor->setColor( hueSaturationFilter->colorizeColor() );
222 toggleColorizeControls( hueSaturationFilter->colorizeOn() );
223 sliderColorizeStrength->setValue( hueSaturationFilter->colorizeStrength() );
225 mInvertColorsCheck->setChecked( hueSaturationFilter->invertColors() );
230 mBlendModeComboBox->setBlendMode( mRasterLayer->blendMode() );
233 mResamplingUtils.refreshWidgetsFromLayer();
236void QgsRendererRasterPropertiesWidget::mResetColorRenderingBtn_clicked()
238 mBlendModeComboBox->setBlendMode( QPainter::CompositionMode_SourceOver );
239 mSliderBrightness->setValue( 0 );
240 mSliderContrast->setValue( 0 );
241 mGammaSpinBox->setValue( 1.0 );
242 sliderSaturation->setValue( 0 );
244 mColorizeCheck->setChecked(
false );
245 sliderColorizeStrength->setValue( 100 );
246 mInvertColorsCheck->setChecked(
false );
249void QgsRendererRasterPropertiesWidget::toggleSaturationControls(
int grayscaleMode )
252 if ( grayscaleMode == 0 )
254 sliderSaturation->setEnabled(
true );
255 spinBoxSaturation->setEnabled(
true );
259 sliderSaturation->setEnabled(
false );
260 spinBoxSaturation->setEnabled(
false );
265void QgsRendererRasterPropertiesWidget::toggleColorizeControls(
bool colorizeEnabled )
268 btnColorizeColor->setEnabled( colorizeEnabled );
269 sliderColorizeStrength->setEnabled( colorizeEnabled );
270 spinColorizeStrength->setEnabled( colorizeEnabled );
274void QgsRendererRasterPropertiesWidget::setRendererWidget(
const QString &rendererName )
277 QgsRasterRendererWidget *oldWidget = mRendererWidget;
282 if ( QgsRasterRenderer *oldRenderer = mRasterLayer->renderer() )
285 alphaBand = oldRenderer->alphaBand();
286 opacity = oldRenderer->opacity();
287 nodataColor = oldRenderer->nodataColor();
290 QgsRasterRendererRegistryEntry rendererEntry;
295 QgsDebugMsgLevel( QStringLiteral(
"renderer has widgetCreateFunction" ), 3 );
299 : mRasterLayer->extent();
302 std::unique_ptr<QgsRasterRenderer> oldRenderer( oldWidget->
renderer() );
303 if ( !oldRenderer || oldRenderer->type() != rendererName )
305 if ( rendererName == QLatin1String(
"singlebandgray" ) )
308 whileBlocking( mRasterLayer )->setDefaultContrastEnhancement();
310 else if ( rendererName == QLatin1String(
"multibandcolor" ) )
313 whileBlocking( mRasterLayer )->setDefaultContrastEnhancement();
317 mRasterLayer->renderer()->setAlphaBand( alphaBand );
318 mRasterLayer->renderer()->setOpacity( opacity );
319 mRasterLayer->renderer()->setNodataColor( nodataColor );
323 stackedWidget->addWidget( mRendererWidget );
324 stackedWidget->setCurrentWidget( mRendererWidget );
328 QgsRasterRenderer *oldRenderer = oldWidget->
renderer();
329 QgsRasterRenderer *newRenderer = mRendererWidget->renderer();
331 QList<int> oldBands = oldRenderer->
usesBands();
332 QList<int> newBands = newRenderer->
usesBands();
334 if ( oldBands != newBands )
336 populateTransparencyTable( newRenderer );
346 if ( mRendererWidget != oldWidget )
349 const int widgetIndex = cboRenderers->findData( rendererName );
350 if ( widgetIndex != -1 )
352 whileBlocking( cboRenderers )->setCurrentIndex( widgetIndex );
356void QgsRendererRasterPropertiesWidget::refreshAfterStyleChanged()
358 if ( mRendererWidget )
360 QgsRasterRenderer *renderer = mRasterLayer->renderer();
361 if ( QgsMultiBandColorRenderer *mbcr =
dynamic_cast<QgsMultiBandColorRenderer *
>( renderer ) )
363 const QgsContrastEnhancement *redCe = mbcr->redContrastEnhancement();
366 mRendererWidget->setMin( QLocale().toString( redCe->
minimumValue() ), 0 );
367 mRendererWidget->setMax( QLocale().toString( redCe->
maximumValue() ), 0 );
369 const QgsContrastEnhancement *greenCe = mbcr->greenContrastEnhancement();
372 mRendererWidget->setMin( QLocale().toString( greenCe->
minimumValue() ), 1 );
373 mRendererWidget->setMax( QLocale().toString( greenCe->
maximumValue() ), 1 );
375 const QgsContrastEnhancement *blueCe = mbcr->blueContrastEnhancement();
378 mRendererWidget->setMin( QLocale().toString( blueCe->
minimumValue() ), 2 );
379 mRendererWidget->setMax( QLocale().toString( blueCe->
maximumValue() ), 2 );
382 else if ( QgsSingleBandGrayRenderer *sbgr =
dynamic_cast<QgsSingleBandGrayRenderer *
>( renderer ) )
384 const QgsContrastEnhancement *ce = sbgr->contrastEnhancement();
387 mRendererWidget->setMin( QLocale().toString( ce->
minimumValue() ) );
388 mRendererWidget->setMax( QLocale().toString( ce->
maximumValue() ) );
394void QgsRendererRasterPropertiesWidget::updateGammaSpinBox(
int value )
396 mGammaSpinBox->setValue( value / 100.0 );
399void QgsRendererRasterPropertiesWidget::updateGammaSlider(
double value )
401 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