16#include "moc_qgsrendererrasterpropertieswidget.cpp"
38void QgsRendererRasterPropertiesWidget::initRendererWidgetFunctions()
40 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 );
108 connect( mBlendModeComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &
QgsPanelWidget::widgetChanged );
109 connect( mZoomedInResamplingComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &
QgsPanelWidget::widgetChanged );
110 connect( mZoomedOutResamplingComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &
QgsPanelWidget::widgetChanged );
111 connect( mMaximumOversamplingSpinBox,
static_cast < void ( QDoubleSpinBox::* )(
double )
> ( &QDoubleSpinBox::valueChanged ),
this, &
QgsPanelWidget::widgetChanged );
128 const QString rendererName = cboRenderers->currentData().toString();
129 setRendererWidget( rendererName );
137 brightnessFilter->setBrightness( mSliderBrightness->value() );
138 brightnessFilter->setContrast( mSliderContrast->value() );
139 brightnessFilter->setGamma( mGammaSpinBox->value() );
144 rendererWidget->doComputations();
151 newRenderer->copyCommonProperties( oldRenderer,
false );
159 hueSaturationFilter->setSaturation( sliderSaturation->value() );
161 hueSaturationFilter->setColorizeOn( mColorizeCheck->checkState() );
162 hueSaturationFilter->setColorizeColor( btnColorizeColor->color() );
163 hueSaturationFilter->setColorizeStrength( sliderColorizeStrength->value() );
164 hueSaturationFilter->setInvertColors( mInvertColorsCheck->isChecked() );
167 mResamplingUtils.refreshLayerFromWidgets();
169 mRasterLayer->
setBlendMode( mBlendModeComboBox->blendMode() );
174 mRasterLayer = layer;
176 cboRenderers->blockSignals(
true );
177 cboRenderers->clear();
180 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 )
285 alphaBand = oldRenderer->alphaBand();
286 opacity = oldRenderer->opacity();
287 nodataColor = oldRenderer->nodataColor();
295 QgsDebugMsgLevel( QStringLiteral(
"renderer has widgetCreateFunction" ), 3 );
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();
323 stackedWidget->addWidget( mRendererWidget );
324 stackedWidget->setCurrentWidget( mRendererWidget );
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 );
357void QgsRendererRasterPropertiesWidget::refreshAfterStyleChanged()
359 if ( mRendererWidget )
395void QgsRendererRasterPropertiesWidget::updateGammaSpinBox(
int value )
397 mGammaSpinBox->setValue( value / 100.0 );
400void QgsRendererRasterPropertiesWidget::updateGammaSlider(
double value )
402 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.
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)
Sets the widget creation function for a renderer.
bool rendererData(const QString &rendererName, QgsRasterRendererRegistryEntry &data) const
Retrieves renderer data from the registry.
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.
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