75#include <QDesktopServices>
76#include <QTableWidgetItem>
83#include <QLinearGradient>
84#include <QPainterPath>
86#include <QColorDialog>
93#include <QRegularExpressionValidator>
94#include <QRegularExpression>
99 , TRSTRING_NOT_SET( tr(
"Not Set" ) )
100 , mDefaultStandardDeviation( 0 )
101 , mDefaultRedBand( 0 )
102 , mDefaultGreenBand( 0 )
103 , mDefaultBlueBand( 0 )
105 , mGradientHeight( 0.0 )
106 , mGradientWidth( 0.0 )
107 , mMetadataFilled( false )
109 mGrayMinimumMaximumEstimated =
true;
110 mRGBMinimumMaximumEstimated =
true;
115 mOptsPage_Information->layout()->addWidget( mMetadataViewer );
119 transparencyScrollArea->setWidget( mRasterTransparencyWidget );
121 connect( buttonBuildPyramids, &QPushButton::clicked,
this, &QgsRasterLayerProperties::buttonBuildPyramids_clicked );
123 connect( mRenderTypeComboBox,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsRasterLayerProperties::mRenderTypeComboBox_currentIndexChanged );
124 connect( mResetColorRenderingBtn, &QToolButton::clicked,
this, &QgsRasterLayerProperties::mResetColorRenderingBtn_clicked );
125 connect( buttonRemoveMetadataUrl, &QPushButton::clicked,
this, &QgsRasterLayerProperties::removeSelectedMetadataUrl );
126 connect( buttonAddMetadataUrl, &QPushButton::clicked,
this, &QgsRasterLayerProperties::addMetadataUrl );
131 connect( buttonBox, &QDialogButtonBox::helpRequested,
this, &QgsRasterLayerProperties::showHelp );
133 mSourceGroupBox->hide();
135 mBtnStyle =
new QPushButton( tr(
"Style" ) );
136 buttonBox->addButton(
mBtnStyle, QDialogButtonBox::ResetRole );
150 connect( mSliderBrightness, &QAbstractSlider::valueChanged, mBrightnessSpinBox, &QSpinBox::setValue );
151 connect( mBrightnessSpinBox,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ), mSliderBrightness, &QAbstractSlider::setValue );
152 mBrightnessSpinBox->setClearValue( 0 );
154 connect( mSliderContrast, &QAbstractSlider::valueChanged, mContrastSpinBox, &QSpinBox::setValue );
155 connect( mContrastSpinBox,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ), mSliderContrast, &QAbstractSlider::setValue );
156 mContrastSpinBox->setClearValue( 0 );
159 connect( mSliderGamma, &QAbstractSlider::valueChanged,
this, &QgsRasterLayerProperties::updateGammaSpinBox );
160 connect( mGammaSpinBox,
static_cast < void ( QDoubleSpinBox::* )(
double )
> ( &QDoubleSpinBox::valueChanged ),
this, &QgsRasterLayerProperties::updateGammaSlider );
161 mGammaSpinBox->setClearValue( 1.0 );
164 connect( sliderSaturation, &QAbstractSlider::valueChanged, spinBoxSaturation, &QSpinBox::setValue );
165 connect( spinBoxSaturation,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ), sliderSaturation, &QAbstractSlider::setValue );
166 spinBoxSaturation->setClearValue( 0 );
169 connect( sliderColorizeStrength, &QAbstractSlider::valueChanged, spinColorizeStrength, &QSpinBox::setValue );
170 connect( spinColorizeStrength,
static_cast < void ( QSpinBox::* )(
int )
> ( &QSpinBox::valueChanged ), sliderColorizeStrength, &QAbstractSlider::setValue );
171 spinColorizeStrength->setClearValue( 100 );
174 connect( comboGrayscale,
static_cast<void ( QComboBox::* )(
int )
>( &QComboBox::currentIndexChanged ),
this, &QgsRasterLayerProperties::toggleSaturationControls );
177 connect( mColorizeCheck, &QAbstractButton::toggled,
this, &QgsRasterLayerProperties::toggleColorizeControls );
180 connect( lbxPyramidResolutions, &QListWidget::itemSelectionChanged,
this, &QgsRasterLayerProperties::toggleBuildPyramidsButton );
182 mRefreshSettingsWidget->setLayer( mRasterLayer );
185 mScaleRangeWidget->setMapCanvas(
mCanvas );
190 tableViewMetadataUrl->setSelectionMode( QAbstractItemView::SingleSelection );
191 tableViewMetadataUrl->setSelectionBehavior( QAbstractItemView::SelectRows );
192 tableViewMetadataUrl->horizontalHeader()->setStretchLastSection(
true );
193 tableViewMetadataUrl->horizontalHeader()->setSectionResizeMode( QHeaderView::Stretch );
195 mMetadataUrlModel =
new QStandardItemModel( tableViewMetadataUrl );
196 mMetadataUrlModel->clear();
197 mMetadataUrlModel->setColumnCount( 3 );
198 QStringList metadataUrlHeaders;
199 metadataUrlHeaders << tr(
"URL" ) << tr(
"Type" ) << tr(
"Format" );
200 mMetadataUrlModel->setHorizontalHeaderLabels( metadataUrlHeaders );
201 tableViewMetadataUrl->setModel( mMetadataUrlModel );
202 tableViewMetadataUrl->setItemDelegate(
new MetadataUrlItemDelegate(
this ) );
209 mRasterTransparencyWidget->pbnAddValuesFromDisplay->setIcon(
QgsApplication::getThemeIcon( QStringLiteral(
"/mActionContextHelp.png" ) ) );
212 mRasterTransparencyWidget->pbnImportTransparentPixelValues->setIcon(
QgsApplication::getThemeIcon( QStringLiteral(
"/mActionFileOpen.svg" ) ) );
213 mRasterTransparencyWidget->pbnExportTransparentPixelValues->setIcon(
QgsApplication::getThemeIcon( QStringLiteral(
"/mActionFileSave.svg" ) ) );
221 connect( mEnableMapTips, &QAbstractButton::toggled, mHtmlMapTipGroupBox, &QWidget::setEnabled );
224 updateRasterAttributeTableOptionsPage();
228 connect( mCreateRasterAttributeTableButton, &QPushButton::clicked,
this, [ = ]
233 QgsCreateRasterAttributeTableDialog dlg { mRasterLayer };
234 dlg.setOpenWhenDoneVisible(
false );
235 if ( dlg.exec() == QDialog::Accepted )
237 updateRasterAttributeTableOptionsPage();
242 connect( mLoadRasterAttributeTableFromFileButton, &QPushButton::clicked,
this, [ = ]
247 if ( dlg.exec() == QDialog::Accepted )
249 updateRasterAttributeTableOptionsPage();
253 mBackupCrs = mRasterLayer->crs();
256 if ( mCanvas && mRasterTransparencyWidget->pixelSelectorTool() )
268 connect( mRasterTransparencyWidget->pbnAddValuesFromDisplay, &QPushButton::clicked,
this, [ = ]
274 mCanvas->window()->raise();
275 mCanvas->window()->activateWindow();
276 mCanvas->window()->setFocus();
293 connect( mInsertExpressionButton, &QAbstractButton::clicked,
this, [ = ]
296 int selectionStart = mMapTipWidget->selectionStart();
297 int selectionEnd = mMapTipWidget->selectionEnd();
301 exprDlg.setWindowTitle( tr(
"Insert Expression" ) );
302 if ( exprDlg.exec() == QDialog::Accepted && !exprDlg.expressionText().trimmed().isEmpty() )
303 mMapTipWidget->insertText(
"[%" + exprDlg.expressionText().trimmed() +
"%]" );
305 mMapTipWidget->setLinearSelection( selectionStart, selectionEnd );
314 cboResamplingMethod->clear();
317 for (
const QPair<QString, QString> &method : std::as_const( constProviderType ) )
319 cboResamplingMethod->addItem( method.second, method.first );
323 QString prefix = provider->name() +
"/driverOptions/_pyramids/";
325 QString defaultMethod = mySettings.
value( prefix +
"resampling",
"AVERAGE" ).toString();
326 int idx = cboResamplingMethod->findData( defaultMethod );
328 cboResamplingMethod->setCurrentIndex( idx );
332 const QList< QgsRasterPyramid > myPyramidList = provider->buildPyramidList();
336 if ( pyramid.getExists() )
338 lbxPyramidResolutions->addItem(
new QListWidgetItem( myPyramidPixmap,
339 QString::number( pyramid.getXDim() ) + QStringLiteral(
" x " ) +
340 QString::number( pyramid.getYDim() ) ) );
344 lbxPyramidResolutions->addItem(
new QListWidgetItem( myNoPyramidPixmap,
345 QString::number( pyramid.getXDim() ) + QStringLiteral(
" x " ) +
346 QString::number( pyramid.getYDim() ) ) );
353 mOptsPage_Pyramids->setEnabled(
false );
362 mOptsPage_Histogram->setEnabled(
false );
365 QVBoxLayout *layout =
new QVBoxLayout( metadataFrame );
366 layout->setContentsMargins( 0, 0, 0, 0 );
368 mMetadataWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
369 mMetadataWidget->setMapCanvas( mCanvas );
370 layout->addWidget( mMetadataWidget );
371 metadataFrame->setLayout( layout );
373 QVBoxLayout *temporalLayout =
new QVBoxLayout( temporalFrame );
374 temporalLayout->setContentsMargins( 0, 0, 0, 0 );
376 temporalLayout->addWidget( mTemporalWidget );
379 QgsDebugMsgLevel(
"Setting crs to " + mRasterLayer->crs().userFriendlyIdentifier(), 2 );
380 mCrsSelector->setCrs( mRasterLayer->crs() );
383 QString pyramidFormat( QStringLiteral(
"<h2>%1</h2><p>%2 %3 %4</p><b><font color='red'><p>%5</p><p>%6</p>" ) );
384 QString pyramidHeader = tr(
"Description" );
385 QString pyramidSentence1 = tr(
"Large resolution raster layers can slow navigation in QGIS." );
386 QString pyramidSentence2 = tr(
"By creating lower resolution copies of the data (pyramids) performance can be considerably improved as QGIS selects the most suitable resolution to use depending on the level of zoom." );
387 QString pyramidSentence3 = tr(
"You must have write access in the directory where the original data is stored to build pyramids." );
388 QString pyramidSentence4 = tr(
"Please note that building internal pyramids may alter the original data file and once created they cannot be removed!" );
389 QString pyramidSentence5 = tr(
"Please note that building internal pyramids could corrupt your image - always make a backup of your data first!" );
391 tePyramidDescription->setHtml( pyramidFormat.arg( pyramidHeader,
396 pyramidSentence5 ) );
399 mResamplingGroupBox->setSaveCheckedState(
true );
400 mResamplingUtils.initWidgets( mRasterLayer, mZoomedInResamplingComboBox, mZoomedOutResamplingComboBox, mMaximumOversamplingSpinBox, mCbEarlyResampling );
401 mResamplingUtils.refreshWidgetsFromLayer();
405 btnColorizeColor->setColorDialogTitle( tr(
"Select Color" ) );
406 btnColorizeColor->setContext( QStringLiteral(
"symbology" ) );
411 if ( hueSaturationFilter )
413 sliderSaturation->setValue( hueSaturationFilter->
saturation() );
414 comboGrayscale->setCurrentIndex( (
int ) hueSaturationFilter->
grayscaleMode() );
417 toggleSaturationControls(
static_cast<int>( hueSaturationFilter->
grayscaleMode() ) );
420 mColorizeCheck->setChecked( hueSaturationFilter->
colorizeOn() );
421 btnColorizeColor->setColor( hueSaturationFilter->
colorizeColor() );
422 toggleColorizeControls( hueSaturationFilter->
colorizeOn() );
423 sliderColorizeStrength->setValue( hueSaturationFilter->
colorizeStrength() );
424 mInvertColorsCheck->setChecked( hueSaturationFilter->
invertColors() );
429 mBlendModeComboBox->setBlendMode( mRasterLayer->blendMode() );
434 mRasterTransparencyWidget->cboxTransparencyBand->setShowNotSetOption(
true, tr(
"None" ) );
435 mRasterTransparencyWidget->cboxTransparencyBand->setLayer( mRasterLayer );
444 cboxTransparencyBand->setCurrentIndex( cboxTransparencyBand->findData( renderer->
alphaBand() ) );
451 mHistogramWidget =
nullptr;
452 if ( mOptsPage_Histogram->isEnabled() )
455 mHistogramStackedWidget->addWidget( mHistogramWidget );
468 mDisableRenderTypeComboBoxCurrentIndexChanged =
true;
470 for (
const QString &name : constRenderersList )
481 mDisableRenderTypeComboBoxCurrentIndexChanged =
false;
486 QString rendererType = renderer->
type();
487 widgetIndex = mRenderTypeComboBox->findData( rendererType );
488 if ( widgetIndex != -1 )
490 mDisableRenderTypeComboBoxCurrentIndexChanged =
true;
491 mRenderTypeComboBox->setCurrentIndex( widgetIndex );
492 mDisableRenderTypeComboBoxCurrentIndexChanged =
false;
495 if ( rendererType == QLatin1String(
"singlebandcolordata" ) && mRenderTypeComboBox->count() == 1 )
498 QSizePolicy sizep = mBandRenderingGrpBx->sizePolicy();
499 sizep.setVerticalStretch( 0 );
500 sizep.setVerticalPolicy( QSizePolicy::Maximum );
501 mBandRenderingGrpBx->setSizePolicy( sizep );
502 mBandRenderingGrpBx->updateGeometry();
505 if ( mRasterLayer->providerType() != QLatin1String(
"wms" ) )
507 mWMSPrintGroupBox->hide();
508 mPublishDataSourceUrlCheckBox->hide();
509 mBackgroundLayerCheckBox->hide();
516 const int horizontalDpi = logicalDpiX();
519 if ( horizontalDpi > 96 )
521 mMetadataViewer->setZoomFactor( mMetadataViewer->zoomFactor() * 0.9 );
523 mMetadataViewer->page()->setLinkDelegationPolicy( QWebPage::LinkDelegationPolicy::DelegateAllLinks );
525 mMetadataViewer->page()->settings()->setAttribute( QWebSettings::DeveloperExtrasEnabled,
true );
526 mMetadataViewer->page()->settings()->setAttribute( QWebSettings::JavascriptEnabled,
true );
532 mRenderTypeComboBox_currentIndexChanged( widgetIndex );
534 setMetadataWidget( mMetadataWidget, mOptsPage_Metadata );
536 QMenu *menuStyle =
new QMenu(
this );
539 menuStyle->addSeparator();
542 mBtnStyle->setMenu( menuStyle );
543 connect( menuStyle, &QMenu::aboutToShow,
this, &QgsRasterLayerProperties::aboutToShowStyleMenu );
545 mBtnMetadata =
new QPushButton( tr(
"Metadata" ),
this );
546 QMenu *menuMetadata =
new QMenu(
this );
549 menuMetadata->addSeparator();
552 mBtnMetadata->setMenu( menuMetadata );
553 buttonBox->addButton( mBtnMetadata, QDialogButtonBox::ResetRole );
561 if ( !settings.
contains( QStringLiteral(
"/Windows/RasterLayerProperties/tab" ) ) )
563 settings.
setValue( QStringLiteral(
"Windows/RasterLayerProperties/tab" ),
564 mOptStackedWidget->indexOf( mOptsPage_Style ) );
569 optionsStackedWidget_CurrentChanged( mOptionsStackedWidget->currentIndex() );
572 mOptsPage_Information->setProperty(
"helpPage", QStringLiteral(
"working_with_raster/raster_properties.html#information-properties" ) );
573 mOptsPage_Source->setProperty(
"helpPage", QStringLiteral(
"working_with_raster/raster_properties.html#source-properties" ) );
574 mOptsPage_Style->setProperty(
"helpPage", QStringLiteral(
"working_with_raster/raster_properties.html#symbology-properties" ) );
575 mOptsPage_Transparency->setProperty(
"helpPage", QStringLiteral(
"working_with_raster/raster_properties.html#transparency-properties" ) );
577 if ( mOptsPage_Histogram )
578 mOptsPage_Histogram->setProperty(
"helpPage", QStringLiteral(
"working_with_raster/raster_properties.html#histogram-properties" ) );
580 mOptsPage_Rendering->setProperty(
"helpPage", QStringLiteral(
"working_with_raster/raster_properties.html#rendering-properties" ) );
581 mOptsPage_Temporal->setProperty(
"helpPage", QStringLiteral(
"working_with_raster/raster_properties.html#temporal-properties" ) );
583 if ( mOptsPage_Pyramids )
584 mOptsPage_Pyramids->setProperty(
"helpPage", QStringLiteral(
"working_with_raster/raster_properties.html#pyramids-properties" ) );
586 if ( mOptsPage_Display )
587 mOptsPage_Display->setProperty(
"helpPage", QStringLiteral(
"working_with_raster/raster_properties.html#display-properties" ) );
589 mOptsPage_Metadata->setProperty(
"helpPage", QStringLiteral(
"working_with_raster/raster_properties.html#metadata-properties" ) );
590 mOptsPage_Legend->setProperty(
"helpPage", QStringLiteral(
"working_with_raster/raster_properties.html#legend-properties" ) );
591 mOptsPage_Server->setProperty(
"helpPage", QStringLiteral(
"working_with_raster/raster_properties.html#server-properties" ) );
611 if ( beforePage.isEmpty() )
629void QgsRasterLayerProperties::updateRasterAttributeTableOptionsPage( )
631 if ( mRasterAttributeTableWidget )
633 mOptsPage_RasterAttributeTable->layout()->removeWidget( mRasterAttributeTableWidget );
634 mRasterAttributeTableWidget =
nullptr;
640 mRasterAttributeTableWidget =
new QgsRasterAttributeTableWidget(
this, mRasterLayer );
641 mOptsPage_RasterAttributeTable->layout()->addWidget( mRasterAttributeTableWidget );
643 connect( mRasterAttributeTableWidget, &QgsRasterAttributeTableWidget::rendererChanged,
this, &QgsRasterLayerProperties::syncToLayer );
644 mNoRasterAttributeTableWidget->hide();
648 mNoRasterAttributeTableWidget->show();
653void QgsRasterLayerProperties::setRendererWidget(
const QString &rendererName )
662 const QList<int> oldBands = oldRenderer ? oldRenderer->
usesBands() : QList<int>();
667 opacity = oldRenderer->
opacity();
676 QgsDebugMsgLevel( QStringLiteral(
"renderer has widgetCreateFunction" ), 3 );
679 if ( oldWidget && ( !oldRenderer || rendererName != oldRenderer->
type() ) )
681 if ( rendererName == QLatin1String(
"singlebandgray" ) )
684 whileBlocking( mRasterLayer )->setDefaultContrastEnhancement();
686 else if ( rendererName == QLatin1String(
"multibandcolor" ) )
689 whileBlocking( mRasterLayer )->setDefaultContrastEnhancement();
697 mRendererStackedWidget->addWidget( mRendererWidget );
701 std::unique_ptr<QgsRasterRenderer> newRenderer;
702 newRenderer.reset( mRendererWidget->
renderer() );
703 const QList<int> newBands = newRenderer->usesBands();
704 if ( oldBands != newBands )
712 const int widgetIndex = mRenderTypeComboBox->findData( rendererName );
713 if ( widgetIndex != -1 )
715 mDisableRenderTypeComboBoxCurrentIndexChanged =
true;
716 mRenderTypeComboBox->setCurrentIndex( widgetIndex );
717 mDisableRenderTypeComboBoxCurrentIndexChanged =
false;
720 if ( mRendererWidget != oldWidget )
723 if ( mHistogramWidget )
729void QgsRasterLayerProperties::sync()
733 if ( !mSourceWidget )
738 QHBoxLayout *layout =
new QHBoxLayout();
739 layout->addWidget( mSourceWidget );
740 mSourceGroupBox->setLayout( layout );
742 mSourceGroupBox->setTitle( mSourceWidget->
groupTitle() );
743 mSourceGroupBox->show();
747 buttonBox->button( QDialogButtonBox::Apply )->setEnabled( isValid );
748 buttonBox->button( QDialogButtonBox::Ok )->setEnabled( isValid );
768 mRasterTransparencyWidget->gboxNoDataValue->setEnabled(
false );
769 mRasterTransparencyWidget->gboxCustomTransparency->setEnabled(
false );
770 mOptionsStackedWidget->setCurrentWidget( mOptsPage_Server );
776 if ( mOptsPage_Pyramids )
778 delete mOptsPage_Pyramids;
779 mOptsPage_Pyramids =
nullptr;
785 if ( mOptsPage_Histogram )
787 delete mOptsPage_Histogram;
788 mOptsPage_Histogram =
nullptr;
789 delete mHistogramWidget;
790 mHistogramWidget =
nullptr;
802 if ( brightnessFilter )
804 mSliderBrightness->setValue( brightnessFilter->
brightness() );
805 mSliderContrast->setValue( brightnessFilter->
contrast() );
806 mGammaSpinBox->setValue( brightnessFilter->
gamma() );
812 if ( hueSaturationFilter )
814 sliderSaturation->setValue( hueSaturationFilter->
saturation() );
815 comboGrayscale->setCurrentIndex( (
int ) hueSaturationFilter->
grayscaleMode() );
818 toggleSaturationControls(
static_cast<int>( hueSaturationFilter->
grayscaleMode() ) );
821 mColorizeCheck->setChecked( hueSaturationFilter->
colorizeOn() );
822 btnColorizeColor->setColor( hueSaturationFilter->
colorizeColor() );
823 toggleColorizeControls( hueSaturationFilter->
colorizeOn() );
824 sliderColorizeStrength->setValue( hueSaturationFilter->
colorizeStrength() );
825 mInvertColorsCheck->setChecked( hueSaturationFilter->
invertColors() );
828 mRefreshSettingsWidget->syncToLayer();
835 mLayerOrigNameLineEd->setText( mRasterLayer->
name() );
842 updateInformationContent();
845 mLayerShortNameLineEdit->setText( mRasterLayer->
shortName() );
848 mLayerShortNameLineEdit->setValidator( shortNameValidator );
851 mLayerTitleLineEdit->setText( mRasterLayer->
title() );
852 mLayerAbstractTextEdit->setPlainText( mRasterLayer->
abstract() );
853 mLayerKeywordListLineEdit->setText( mRasterLayer->
keywordList() );
854 mLayerDataUrlLineEdit->setText( mRasterLayer->
dataUrl() );
855 mLayerDataUrlFormatComboBox->setCurrentIndex(
856 mLayerDataUrlFormatComboBox->findText(
862 mLayerAttributionLineEdit->setText( mRasterLayer->
attribution() );
863 mLayerAttributionUrlLineEdit->setText( mRasterLayer->
attributionUrl() );
869 const int row = mMetadataUrlModel->rowCount();
870 mMetadataUrlModel->setItem( row, 0,
new QStandardItem( metaUrl.url ) );
871 mMetadataUrlModel->setItem( row, 1,
new QStandardItem( metaUrl.type ) );
872 mMetadataUrlModel->setItem( row, 2,
new QStandardItem( metaUrl.format ) );
876 mLayerLegendUrlLineEdit->setText( mRasterLayer->
legendUrl() );
877 mLayerLegendUrlFormatComboBox->setCurrentIndex( mLayerLegendUrlFormatComboBox->findText( mRasterLayer->
legendUrlFormat() ) );
883 QVariant wmsPrintLayer = mRasterLayer->
customProperty( QStringLiteral(
"WMSPrintLayer" ) );
884 if ( wmsPrintLayer.isValid() )
886 mWMSPrintLayerLineEdit->setText( wmsPrintLayer.toString() );
889 QVariant wmsPublishDataSourceUrl = mRasterLayer->
customProperty( QStringLiteral(
"WMSPublishDataSourceUrl" ),
false );
890 mPublishDataSourceUrlCheckBox->setChecked( wmsPublishDataSourceUrl.toBool() );
892 QVariant wmsBackgroundLayer = mRasterLayer->
customProperty( QStringLiteral(
"WMSBackgroundLayer" ),
false );
893 mBackgroundLayerCheckBox->setChecked( wmsBackgroundLayer.toBool() );
895 mLegendPlaceholderWidget->setLastPathSettingsKey( QStringLiteral(
"lastLegendPlaceholderDir" ) );
897 mLegendConfigEmbeddedWidget->setLayer( mRasterLayer );
902 updateDataDefinedButtons();
906 page->syncToLayer( mRasterLayer );
915 const QString newSource = mSourceWidget->
sourceUri();
916 if ( newSource != mRasterLayer->
source() )
923 if ( !mRasterLayer->
isValid() )
937 mLegendConfigEmbeddedWidget->applyToLayer();
958 if (
"" != mRasterTransparencyWidget->leNoDataValue->text() )
960 bool myDoubleOk =
false;
965 myNoDataRangeList << myNoDataRange;
968 for (
int bandNo = 1; bandNo <= mRasterLayer->
dataProvider()->bandCount(); bandNo++ )
976 if ( rendererWidget )
983 mBackupCrs = mRasterLayer->
crs();
985 mMetadataFilled =
false;
989 if ( rasterRenderer )
991 rasterRenderer->
setAlphaBand( mRasterTransparencyWidget->cboxTransparencyBand->currentBand() );
992 rasterRenderer->
setNodataColor( mRasterTransparencyWidget->mNodataColorButton->color() );
996 if ( mRasterTransparencyWidget->tableTransparency->columnCount() == 4 )
999 QList<QgsRasterTransparency::TransparentThreeValuePixel> myTransparentThreeValuePixelList;
1000 for (
int myListRunner = 0; myListRunner < mRasterTransparencyWidget->tableTransparency->rowCount(); myListRunner++ )
1002 myTransparentPixel.
red = transparencyCellValue( myListRunner, 0 );
1003 myTransparentPixel.
green = transparencyCellValue( myListRunner, 1 );
1004 myTransparentPixel.
blue = transparencyCellValue( myListRunner, 2 );
1006 myTransparentThreeValuePixelList.append( myTransparentPixel );
1010 else if ( mRasterTransparencyWidget->tableTransparency->columnCount() == 3 )
1013 QList<QgsRasterTransparency::TransparentSingleValuePixel> myTransparentSingleValuePixelList;
1014 for (
int myListRunner = 0; myListRunner < mRasterTransparencyWidget->tableTransparency->rowCount(); myListRunner++ )
1016 myTransparentPixel.
min = transparencyCellValue( myListRunner, 0 );
1017 myTransparentPixel.
max = transparencyCellValue( myListRunner, 1 );
1020 myTransparentSingleValuePixelList.append( myTransparentPixel );
1031 rasterRenderer->
setOpacity( mRasterTransparencyWidget->mOpacityWidget->opacity() );
1038 mRasterLayer->
setName( mLayerOrigNameLineEd->text() );
1045 mRefreshSettingsWidget->saveToLayer();
1052 mResamplingUtils.refreshLayerFromWidgets();
1056 if ( hueSaturationFilter )
1058 hueSaturationFilter->
setSaturation( sliderSaturation->value() );
1060 hueSaturationFilter->
setColorizeOn( mColorizeCheck->checkState() );
1063 hueSaturationFilter->
setInvertColors( mInvertColorsCheck->isChecked() );
1067 mRasterLayer->
setBlendMode( mBlendModeComboBox->blendMode() );
1072 mRasterLayer->
setCrs( mCrsSelector->crs() );
1074 if ( mRasterLayer->
shortName() != mLayerShortNameLineEdit->text() )
1075 mMetadataFilled =
false;
1076 mRasterLayer->
setShortName( mLayerShortNameLineEdit->text() );
1078 if ( mRasterLayer->
title() != mLayerTitleLineEdit->text() )
1079 mMetadataFilled =
false;
1080 mRasterLayer->
setTitle( mLayerTitleLineEdit->text() );
1082 if ( mRasterLayer->
abstract() != mLayerAbstractTextEdit->toPlainText() )
1083 mMetadataFilled =
false;
1084 mRasterLayer->
setAbstract( mLayerAbstractTextEdit->toPlainText() );
1086 if ( mRasterLayer->
keywordList() != mLayerKeywordListLineEdit->text() )
1087 mMetadataFilled =
false;
1088 mRasterLayer->
setKeywordList( mLayerKeywordListLineEdit->text() );
1090 if ( mRasterLayer->
dataUrl() != mLayerDataUrlLineEdit->text() )
1091 mMetadataFilled =
false;
1092 mRasterLayer->
setDataUrl( mLayerDataUrlLineEdit->text() );
1094 if ( mRasterLayer->
dataUrlFormat() != mLayerDataUrlFormatComboBox->currentText() )
1095 mMetadataFilled =
false;
1096 mRasterLayer->
setDataUrlFormat( mLayerDataUrlFormatComboBox->currentText() );
1099 if ( mRasterLayer->
attribution() != mLayerAttributionLineEdit->text() )
1100 mMetadataFilled =
false;
1101 mRasterLayer->
setAttribution( mLayerAttributionLineEdit->text() );
1103 if ( mRasterLayer->
attributionUrl() != mLayerAttributionUrlLineEdit->text() )
1104 mMetadataFilled =
false;
1108 QList<QgsMapLayerServerProperties::MetadataUrl> metaUrls;
1109 for (
int row = 0; row < mMetadataUrlModel->rowCount() ; row++ )
1112 metaUrl.
url = mMetadataUrlModel->item( row, 0 )->text();
1113 metaUrl.
type = mMetadataUrlModel->item( row, 1 )->text();
1114 metaUrl.
format = mMetadataUrlModel->item( row, 2 )->text();
1115 metaUrls.append( metaUrl );
1116 mMetadataFilled =
false;
1120 if ( mRasterLayer->
legendUrl() != mLayerLegendUrlLineEdit->text() )
1121 mMetadataFilled =
false;
1122 mRasterLayer->
setLegendUrl( mLayerLegendUrlLineEdit->text() );
1124 if ( mRasterLayer->
legendUrlFormat() != mLayerLegendUrlFormatComboBox->currentText() )
1125 mMetadataFilled =
false;
1128 if ( !mWMSPrintLayerLineEdit->text().isEmpty() )
1130 mRasterLayer->
setCustomProperty( QStringLiteral(
"WMSPrintLayer" ), mWMSPrintLayerLineEdit->text() );
1133 mRasterLayer->
setCustomProperty(
"WMSPublishDataSourceUrl", mPublishDataSourceUrlCheckBox->isChecked() );
1134 mRasterLayer->
setCustomProperty(
"WMSBackgroundLayer", mBackgroundLayerCheckBox->isChecked() );
1151void QgsRasterLayerProperties::buttonBuildPyramids_clicked()
1163 for (
int myCounterInt = 0; myCounterInt < lbxPyramidResolutions->count(); myCounterInt++ )
1165 QListWidgetItem *myItem = lbxPyramidResolutions->item( myCounterInt );
1167 myPyramidList[myCounterInt].setBuild( myItem->isSelected() || myPyramidList[myCounterInt].getExists() );
1171 QString prefix = provider->
name() +
"/driverOptions/_pyramids/";
1173 QString resamplingMethod( cboResamplingMethod->currentData().toString() );
1174 mySettings.
setValue( prefix +
"resampling", resamplingMethod );
1181 QApplication::setOverrideCursor( Qt::WaitCursor );
1188 QApplication::restoreOverrideCursor();
1189 mPyramidProgress->setValue( 0 );
1190 buttonBuildPyramids->setEnabled(
false );
1191 if ( !res.isNull() )
1193 if ( res == QLatin1String(
"CANCELED" ) )
1197 else if ( res == QLatin1String(
"ERROR_WRITE_ACCESS" ) )
1199 QMessageBox::warning(
this, tr(
"Building Pyramids" ),
1200 tr(
"Write access denied. Adjust the file permissions and try again." ) );
1202 else if ( res == QLatin1String(
"ERROR_WRITE_FORMAT" ) )
1204 QMessageBox::warning(
this, tr(
"Building Pyramids" ),
1205 tr(
"The file was not writable. Some formats do not "
1206 "support pyramid overviews. Consult the GDAL documentation if in doubt." ) );
1208 else if ( res == QLatin1String(
"FAILED_NOT_SUPPORTED" ) )
1210 QMessageBox::warning(
this, tr(
"Building Pyramids" ),
1211 tr(
"Building pyramid overviews is not supported on this type of raster." ) );
1213 else if ( res == QLatin1String(
"ERROR_JPEG_COMPRESSION" ) )
1215 QMessageBox::warning(
this, tr(
"Building Pyramids" ),
1216 tr(
"Building internal pyramid overviews is not supported on raster layers with JPEG compression and your current libtiff library." ) );
1218 else if ( res == QLatin1String(
"ERROR_VIRTUAL" ) )
1220 QMessageBox::warning(
this, tr(
"Building Pyramids" ),
1221 tr(
"Building pyramid overviews is not supported on this type of raster." ) );
1229 lbxPyramidResolutions->clear();
1237 if ( pyramid.getExists() )
1239 lbxPyramidResolutions->addItem(
new QListWidgetItem( myPyramidPixmap,
1240 QString::number( pyramid.getXDim() ) + QStringLiteral(
" x " ) +
1241 QString::number( pyramid.getYDim() ) ) );
1245 lbxPyramidResolutions->addItem(
new QListWidgetItem( myNoPyramidPixmap,
1246 QString::number( pyramid.getXDim() ) + QStringLiteral(
" x " ) +
1247 QString::number( pyramid.getYDim() ) ) );
1256 updateInformationContent();
1259void QgsRasterLayerProperties::mRenderTypeComboBox_currentIndexChanged(
int index )
1261 if ( index < 0 || mDisableRenderTypeComboBoxCurrentIndexChanged || ! mRasterLayer->renderer() )
1266 QString rendererName = mRenderTypeComboBox->itemData( index ).toString();
1267 setRendererWidget( rendererName );
1277void QgsRasterLayerProperties::setTransparencyCell(
int row,
int column,
double value )
1279 QgsDebugMsgLevel( QStringLiteral(
"value = %1" ).arg( value, 0,
'g', 17 ), 3 );
1281 if ( !provider )
return;
1284 if ( !renderer )
return;
1285 int nBands = renderer->
usesBands().size();
1287 QLineEdit *lineEdit =
new QLineEdit();
1288 lineEdit->setFrame(
false );
1290 lineEdit->setContentsMargins( 1, 1, 1, 1 );
1292 if ( column == mRasterTransparencyWidget->tableTransparency->columnCount() - 1 )
1296 lineEdit->setValidator(
new QIntValidator(
nullptr ) );
1297 lineEdit->setText( QString::number(
static_cast<int>( value ) ) );
1302 QString valueString;
1308 if ( !std::isnan( value ) )
1311 valueString = QLocale().toString( v,
'g' ) ;
1315 lineEdit->setValidator(
new QIntValidator(
nullptr ) );
1316 if ( !std::isnan( value ) )
1318 valueString = QLocale().toString(
static_cast<int>( value ) );
1322 lineEdit->setText( valueString );
1324 mRasterTransparencyWidget->tableTransparency->setCellWidget( row, column, lineEdit );
1325 adjustTransparencyCellWidth( row, column );
1327 if ( nBands == 1 && ( column == 0 || column == 1 ) )
1329 connect( lineEdit, &QLineEdit::textEdited,
this, &QgsRasterLayerProperties::transparencyCellTextEdited );
1331 mRasterTransparencyWidget->tableTransparency->resizeColumnsToContents();
1334void QgsRasterLayerProperties::setTransparencyCellValue(
int row,
int column,
double value )
1336 QLineEdit *lineEdit =
dynamic_cast<QLineEdit *
>( mRasterTransparencyWidget->tableTransparency->cellWidget( row, column ) );
1337 if ( !lineEdit )
return;
1339 lineEdit->setText( QLocale().toString( v,
'g' ) );
1340 lineEdit->adjustSize();
1341 adjustTransparencyCellWidth( row, column );
1342 mRasterTransparencyWidget->tableTransparency->resizeColumnsToContents();
1345double QgsRasterLayerProperties::transparencyCellValue(
int row,
int column )
1347 QLineEdit *lineEdit =
dynamic_cast<QLineEdit *
>( mRasterTransparencyWidget->tableTransparency->cellWidget( row, column ) );
1348 if ( !lineEdit || lineEdit->text().isEmpty() )
1350 return std::numeric_limits<double>::quiet_NaN();
1352 return QLocale().toDouble( lineEdit->text() );
1355void QgsRasterLayerProperties::adjustTransparencyCellWidth(
int row,
int column )
1357 QLineEdit *lineEdit =
dynamic_cast<QLineEdit *
>( mRasterTransparencyWidget->tableTransparency->cellWidget( row, column ) );
1358 if ( !lineEdit )
return;
1360 int width = std::max( lineEdit->fontMetrics().boundingRect( lineEdit->text() ).width() + 10, 100 );
1361 width = std::max( width, mRasterTransparencyWidget->tableTransparency->columnWidth( column ) );
1363 lineEdit->setFixedWidth( width );
1366void QgsRasterLayerProperties::transparencyCellTextEdited(
const QString &text )
1375 int nBands = renderer->
usesBands().size();
1378 QLineEdit *lineEdit = qobject_cast<QLineEdit *>( sender() );
1379 if ( !lineEdit )
return;
1382 for (
int r = 0; r < mRasterTransparencyWidget->tableTransparency->rowCount(); r++ )
1384 for (
int c = 0;
c < mRasterTransparencyWidget->tableTransparency->columnCount();
c++ )
1386 if ( mRasterTransparencyWidget->tableTransparency->cellWidget( r,
c ) == sender() )
1393 if ( row != -1 )
break;
1395 QgsDebugMsgLevel( QStringLiteral(
"row = %1 column =%2" ).arg( row ).arg( column ), 3 );
1399 QLineEdit *toLineEdit =
dynamic_cast<QLineEdit *
>( mRasterTransparencyWidget->tableTransparency->cellWidget( row, 1 ) );
1400 if ( !toLineEdit )
return;
1401 bool toChanged = mTransparencyToEdited.value( row );
1402 QgsDebugMsgLevel( QStringLiteral(
"toChanged = %1" ).arg( toChanged ), 3 );
1405 toLineEdit->setText( lineEdit->text() );
1408 else if ( column == 1 )
1410 setTransparencyToEdited( row );
1415void QgsRasterLayerProperties::aboutToShowStyleMenu()
1419 QMenu *m = qobject_cast<QMenu *>( sender() );
1427void QgsRasterLayerProperties::syncToLayer()
1432 setRendererWidget( renderer->
type() );
1438void QgsRasterLayerProperties::setTransparencyToEdited(
int row )
1440 if ( row >= mTransparencyToEdited.size() )
1442 mTransparencyToEdited.resize( row + 1 );
1444 mTransparencyToEdited[row] =
true;
1451 if ( !mHistogramWidget )
1463 if ( index ==
mOptStackedWidget->indexOf( mOptsPage_Information ) || !mMetadataFilled )
1466 updateInformationContent();
1472 button->blockSignals(
true );
1476 button->blockSignals(
false );
1479void QgsRasterLayerProperties::updateDataDefinedButtons()
1481 const auto propertyOverrideButtons { findChildren< QgsPropertyOverrideButton * >() };
1484 updateDataDefinedButton( button );
1500void QgsRasterLayerProperties::updateProperty()
1507void QgsRasterLayerProperties::toggleSaturationControls(
int grayscaleMode )
1510 if ( grayscaleMode == 0 )
1512 sliderSaturation->setEnabled(
true );
1513 spinBoxSaturation->setEnabled(
true );
1517 sliderSaturation->setEnabled(
false );
1518 spinBoxSaturation->setEnabled(
false );
1522void QgsRasterLayerProperties::toggleColorizeControls(
bool colorizeEnabled )
1525 btnColorizeColor->setEnabled( colorizeEnabled );
1526 sliderColorizeStrength->setEnabled( colorizeEnabled );
1527 spinColorizeStrength->setEnabled( colorizeEnabled );
1531QLinearGradient QgsRasterLayerProperties::redGradient()
1535 QLinearGradient myGradient = QLinearGradient( mGradientWidth, 0, mGradientWidth, mGradientHeight );
1536 myGradient.setColorAt( 0.0, QColor( 242, 14, 25, 190 ) );
1537 myGradient.setColorAt( 0.5, QColor( 175, 29, 37, 190 ) );
1538 myGradient.setColorAt( 1.0, QColor( 114, 17, 22, 190 ) );
1541QLinearGradient QgsRasterLayerProperties::greenGradient()
1545 QLinearGradient myGradient = QLinearGradient( mGradientWidth, 0, mGradientWidth, mGradientHeight );
1546 myGradient.setColorAt( 0.0, QColor( 48, 168, 5, 190 ) );
1547 myGradient.setColorAt( 0.8, QColor( 36, 122, 4, 190 ) );
1548 myGradient.setColorAt( 1.0, QColor( 21, 71, 2, 190 ) );
1551QLinearGradient QgsRasterLayerProperties::blueGradient()
1555 QLinearGradient myGradient = QLinearGradient( mGradientWidth, 0, mGradientWidth, mGradientHeight );
1556 myGradient.setColorAt( 0.0, QColor( 30, 0, 106, 190 ) );
1557 myGradient.setColorAt( 0.2, QColor( 30, 72, 128, 190 ) );
1558 myGradient.setColorAt( 1.0, QColor( 30, 223, 196, 190 ) );
1561QLinearGradient QgsRasterLayerProperties::grayGradient()
1565 QLinearGradient myGradient = QLinearGradient( mGradientWidth, 0, mGradientWidth, mGradientHeight );
1566 myGradient.setColorAt( 0.0, QColor( 5, 5, 5, 190 ) );
1567 myGradient.setColorAt( 0.8, QColor( 122, 122, 122, 190 ) );
1568 myGradient.setColorAt( 1.0, QColor( 220, 220, 220, 190 ) );
1571QLinearGradient QgsRasterLayerProperties::highlightGradient()
1575 QLinearGradient myGradient = QLinearGradient( mGradientWidth, 0, mGradientWidth, mGradientHeight );
1576 myGradient.setColorAt( 1.0, QColor( 255, 255, 255, 50 ) );
1577 myGradient.setColorAt( 0.5, QColor( 255, 255, 255, 100 ) );
1578 myGradient.setColorAt( 0.0, QColor( 255, 255, 255, 150 ) );
1582void QgsRasterLayerProperties::addMetadataUrl()
1584 const int row = mMetadataUrlModel->rowCount();
1585 mMetadataUrlModel->setItem( row, 0,
new QStandardItem( QLatin1String() ) );
1586 mMetadataUrlModel->setItem( row, 1,
new QStandardItem( QLatin1String() ) );
1587 mMetadataUrlModel->setItem( row, 2,
new QStandardItem( QLatin1String() ) );
1590void QgsRasterLayerProperties::removeSelectedMetadataUrl()
1592 const QModelIndexList selectedRows = tableViewMetadataUrl->selectionModel()->selectedRows();
1593 if ( selectedRows.empty() )
1595 mMetadataUrlModel->removeRow( selectedRows[0].row() );
1610void QgsRasterLayerProperties::restoreWindowModality()
1619void QgsRasterLayerProperties::toggleBuildPyramidsButton()
1621 if ( lbxPyramidResolutions->selectedItems().empty() )
1623 buttonBuildPyramids->setEnabled(
false );
1627 buttonBuildPyramids->setEnabled(
true );
1631void QgsRasterLayerProperties::mResetColorRenderingBtn_clicked()
1633 mBlendModeComboBox->setBlendMode( QPainter::CompositionMode_SourceOver );
1634 mSliderBrightness->setValue( 0 );
1635 mSliderContrast->setValue( 0 );
1636 mGammaSpinBox->setValue( 1.0 );
1637 sliderSaturation->setValue( 0 );
1639 mColorizeCheck->setChecked(
false );
1640 sliderColorizeStrength->setValue( 100 );
1641 mInvertColorsCheck->setChecked(
false );
1644bool QgsRasterLayerProperties::rasterIsMultiBandColor()
1649void QgsRasterLayerProperties::updateInformationContent()
1653 const QString html { mRasterLayer->
htmlMetadata().replace( QLatin1String(
"<head>" ), QStringLiteral( R
"raw(<head><style type="text/css">%1</style>)raw" ) ).arg( myStyle ) };
1654 mMetadataViewer->setHtml( html );
1655 mMetadataFilled = true;
1661 if ( mRasterAttributeTableWidget && mRasterAttributeTableWidget->isDirty() )
1663 mRasterAttributeTableWidget->setEditable(
false,
false );
1667 if ( mBackupCrs != mRasterLayer->
crs() )
1668 mRasterLayer->
setCrs( mBackupCrs );
1671void QgsRasterLayerProperties::showHelp()
1673 const QVariant helpPage = mOptionsStackedWidget->currentWidget()->property(
"helpPage" );
1675 if ( helpPage.isValid() )
1681 QgsHelp::openHelp( QStringLiteral(
"working_with_raster/raster_properties.html" ) );
1685void QgsRasterLayerProperties::updateGammaSpinBox(
int value )
1690void QgsRasterLayerProperties::updateGammaSlider(
double value )
1699 if ( obj == mMapTipPreviewContainer && ev->type() == QEvent::Resize )
1703 return QgsOptionsDialogBase::eventFilter( obj, ev );
1706void QgsRasterLayerProperties::initMapTipPreview()
1709 mMapTipSplitter->setSizes( { 400, 200 } );
1711 mMapTipPreviewContainer->installEventFilter(
this );
1715 mMapTipPreview =
new QgsWebView( mMapTipPreviewContainer );
1718 mMapTipPreview->page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks );
1719 mMapTipPreview->setContextMenuPolicy( Qt::NoContextMenu );
1720 connect( mMapTipPreview, &QWebView::loadFinished,
this, &QgsRasterLayerProperties::resizeMapTip );
1723 mMapTipPreview->page()->settings()->setAttribute( QWebSettings::DeveloperExtrasEnabled,
true );
1724 mMapTipPreview->page()->settings()->setAttribute( QWebSettings::JavascriptEnabled,
true );
1725 mMapTipPreview->page()->settings()->setAttribute( QWebSettings::LocalStorageEnabled,
true );
1728 mMapTipPreview->page()->mainFrame()->setScrollBarPolicy( Qt::Horizontal, Qt::ScrollBarAlwaysOff );
1729 mMapTipPreview->page()->mainFrame()->setScrollBarPolicy( Qt::Vertical, Qt::ScrollBarAlwaysOff );
1733 connect( mMapTipWidget, &QgsCodeEditorHTML::textChanged,
this, &QgsRasterLayerProperties::updateMapTipPreview );
1736void QgsRasterLayerProperties::updateMapTipPreview()
1738 mMapTipPreview->setMaximumSize( mMapTipPreviewContainer->width(), mMapTipPreviewContainer->height() );
1740 mMapTipPreview->setHtml( htmlContent );
1743void QgsRasterLayerProperties::resizeMapTip()
1746 mMapTipPreview->setMaximumSize( mMapTipPreviewContainer->width(), mMapTipPreviewContainer->height() );
1749 const QWebElement container = mMapTipPreview->page()->mainFrame()->findFirstElement(
1750 QStringLiteral(
"#QgsWebViewContainer" ) );
1751 const int width = container.geometry().width();
1752 const int height = container.geometry().height();
1753 mMapTipPreview->resize( width, height );
1756 mMapTipPreview->move( ( mMapTipPreviewContainer->width() - mMapTipPreview->width() ) / 2,
1757 ( mMapTipPreviewContainer->height() - mMapTipPreview->height() ) / 2 );
1760 mMapTipPreview->adjustSize();
@ SingleBandColorData
Single band containing color data.
RasterPyramidFormat
Raster pyramid formats.
@ GeoTiff
Geotiff .ovr (external)
@ Erdas
Erdas Image .aux (external)
@ 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...
@ Float32
Thirty two bit floating point (float)
@ ARGB32_Premultiplied
Color, alpha, red, green, blue, 4 bytes the same as QImage::Format_ARGB32_Premultiplied.
@ ARGB32
Color, alpha, red, green, blue, 4 bytes the same as QImage::Format_ARGB32.
@ Float64
Sixty four bit floating point (double)
@ Preferred
Preferred format, matching the most recent WKT ISO standard. Currently an alias to WKT2_2019,...
static QString reportStyleSheet(QgsApplication::StyleSheetType styleSheetType=QgsApplication::StyleSheetType::Qt)
Returns a css style sheet for reports, the styleSheetType argument determines what type of stylesheet...
static QgsRasterRendererRegistry * rasterRendererRegistry()
Returns the application's raster renderer registry, used for managing raster layer renderers.
@ WebBrowser
StyleSheet for Qt GUI widgets (based on QLabel or QTextBrowser), supports basic CSS and Qt extensions...
static QIcon getThemeIcon(const QString &name, const QColor &fillColor=QColor(), const QColor &strokeColor=QColor())
Helper to get a theme icon.
static QRegularExpression shortNameRegularExpression()
Returns the short name regular expression for line edit validator.
Brightness/contrast and gamma correction filter pipe for rasters.
int contrast() const
Returns current contrast level.
int brightness() const
Returns current brightness level.
double gamma() const
Returns current gamma value.
void setGamma(double gamma)
Set gamma value.
void setContrast(int contrast)
Set contrast level.
void setBrightness(int brightness)
Set brightness level.
This class represents a coordinate reference system (CRS).
virtual QString name() const =0
Returns a provider name.
QgsDoubleValidator is a QLineEdit Validator that combines QDoubleValidator and QRegularExpressionVali...
static double toDouble(const QString &input, bool *ok)
Converts input string to double value.
A generic dialog for building expression strings.
static QgsExpressionContextScope * projectScope(const QgsProject *project)
Creates a new scope which contains variables and functions relating to a QGIS project.
static QgsExpressionContextScope * atlasScope(const QgsLayoutAtlas *atlas)
Creates a new scope which contains variables and functions relating to a QgsLayoutAtlas.
static QgsExpressionContextScope * mapLayerPositionScope(const QgsPointXY &position)
Sets the expression context variables which are available for expressions triggered by moving the mou...
static QgsExpressionContextScope * mapSettingsScope(const QgsMapSettings &mapSettings)
Creates a new scope which contains variables and functions relating to a QgsMapSettings object.
static QgsExpressionContextScope * layerScope(const QgsMapLayer *layer)
Creates a new scope which contains variables and functions relating to a QgsMapLayer.
static QgsExpressionContextScope * globalScope()
Creates a new scope which contains variables and functions relating to the global QGIS context.
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
static QString findAndSelectActiveExpression(QgsCodeEditor *editor, const QString &pattern=QString())
Find the expression under the cursor in the given editor and select it.
void progressChanged(double progress)
Emitted when the feedback object reports a progress change.
static QgsProviderSourceWidgetProviderRegistry * sourceWidgetProviderRegistry()
Returns the registry of provider source widget providers.
static void openHelp(const QString &key)
Opens help topic for the given help key using default system web browser.
Color and saturation filter pipe for rasters.
void setColorizeOn(bool colorizeOn)
void setSaturation(int saturation)
int colorizeStrength() const
bool invertColors() const
Returns true if the filter inverts colors.
void setGrayscaleMode(QgsHueSaturationFilter::GrayscaleMode grayscaleMode)
void setInvertColors(bool invertColors)
Sets whether the filter will invert colors.
QgsHueSaturationFilter::GrayscaleMode grayscaleMode() const
void setColorizeColor(const QColor &colorizeColor)
void setColorizeStrength(int colorizeStrength)
QColor colorizeColor() const
Base class for "layer properties" dialogs, containing common utilities for handling functionality in ...
QPushButton * mBtnStyle
Style button.
void saveMetadataToFile()
Allows the user to save the layer's metadata as a file.
virtual void rollback()
Rolls back changes made to the layer.
void optionsStackedWidget_CurrentChanged(int index) override
void saveStyleAsDefault()
Saves the current layer style as the default for the layer.
QList< QgsMapLayerConfigWidget * > mConfigWidgets
Layer config widgets.
void loadDefaultStyle()
Reloads the default style for the layer.
void saveStyleAs()
Saves a style when appriate button is pressed.
void loadStyle()
Triggers a dialog to load a saved style.
QgsMapCanvas * mCanvas
Associated map canvas.
void loadDefaultMetadata()
Reloads the default layer metadata for the layer.
void loadMetadataFromFile()
Allows the user to load layer metadata from a file.
void saveMetadataAsDefault()
Saves the current layer metadata as the default for the layer.
void openUrl(const QUrl &url)
Handles opening a url from the dialog.
The QgsLoadRasterAttributeTableDialog dialog let the user select a VAT.DBF file and associate the res...
void setOpenWhenDoneVisible(bool visible)
Sets the visibility of the "Open newly created raster attribute table" option to visible,...
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.
static QgsMapLayerLegend * defaultRasterLegend(QgsRasterLayer *rl)
Create new legend implementation for raster layer.
void removesExtraMenuSeparators(QMenu *m)
removes extra separators from the menu
void addStyleManagerActions(QMenu *m, QgsMapLayer *layer)
adds actions to the menu in accordance to the layer
static QgsMapLayerStyleGuiUtils * instance()
returns a singleton instance of this class
void currentStyleChanged(const QString ¤tName)
Emitted when the current style has been changed.
Base class for all map layer types.
void setShortName(const QString &shortName)
Sets the short name of the layer used by QGIS Server to identify the layer.
QString legendUrlFormat() const
Returns the format for a URL based layer legend.
void setAbstract(const QString &abstract)
Sets the abstract of the layer used by QGIS Server in GetCapabilities request.
QString source() const
Returns the source for the layer.
void setLegendUrl(const QString &legendUrl)
Sets the URL for the layer's legend.
Q_INVOKABLE QVariant customProperty(const QString &value, const QVariant &defaultValue=QVariant()) const
Read a custom property from layer.
void setBlendMode(QPainter::CompositionMode blendMode)
Set the blending mode used for rendering a layer.
void setMinimumScale(double scale)
Sets the minimum map scale (i.e.
QgsCoordinateReferenceSystem crs
QString legendPlaceholderImage() const
Returns path to the placeholder image or an empty string if a generated legend is shown.
QgsMapLayerServerProperties * serverProperties()
Returns QGIS Server Properties for the map layer.
QString attribution() const
Returns the attribution of the layer used by QGIS Server in GetCapabilities request.
void triggerRepaint(bool deferredUpdate=false)
Will advise the map canvas (and any other interested party) that this layer requires to be repainted.
void setAttributionUrl(const QString &attribUrl)
Sets the attribution URL of the layer used by QGIS Server in GetCapabilities request.
void setMaximumScale(double scale)
Sets the maximum map scale (i.e.
QString abstract() const
Returns the abstract of the layer used by QGIS Server in GetCapabilities request.
QString dataUrlFormat() const
Returns the DataUrl format of the layer used by QGIS Server in GetCapabilities request.
void setDataUrl(const QString &dataUrl)
Sets the DataUrl of the layer used by QGIS Server in GetCapabilities request.
void setKeywordList(const QString &keywords)
Sets the keyword list of the layer used by QGIS Server in GetCapabilities request.
void setAttribution(const QString &attrib)
Sets the attribution of the layer used by QGIS Server in GetCapabilities request.
QString shortName() const
Returns the short name of the layer used by QGIS Server to identify the layer.
void setDataUrlFormat(const QString &dataUrlFormat)
Sets the DataUrl format of the layer used by QGIS Server in GetCapabilities request.
Q_INVOKABLE void setCustomProperty(const QString &key, const QVariant &value)
Set a custom property for layer.
void rendererChanged()
Signal emitted when renderer is changed.
QString title() const
Returns the title of the layer used by QGIS Server in GetCapabilities request.
void setScaleBasedVisibility(bool enabled)
Sets whether scale based visibility is enabled for the layer.
QString dataUrl() const
Returns the DataUrl of the layer used by QGIS Server in GetCapabilities request.
bool hasScaleBasedVisibility() const
Returns whether scale based visibility is enabled for the layer.
void emitStyleChanged()
Triggers an emission of the styleChanged() signal.
void setName(const QString &name)
Set the display name of the layer.
void setLegendPlaceholderImage(const QString &imgPath)
Set placeholder image for legend.
void setMapTipsEnabled(bool enabled)
Enable or disable map tips for this layer.
QString attributionUrl() const
Returns the attribution URL of the layer used by QGIS Server in GetCapabilities request.
void setDataSource(const QString &dataSource, const QString &baseName, const QString &provider, bool loadDefaultStyleFlag=false)
Updates the data source of the layer.
double minimumScale() const
Returns the minimum map scale (i.e.
QgsMapLayerStyleManager * styleManager() const
Gets access to the layer's style manager.
QString legendUrl() const
Returns the URL for the layer's legend.
void setLegendUrlFormat(const QString &legendUrlFormat)
Sets the format for a URL based layer legend.
void setMapTipTemplate(const QString &mapTipTemplate)
The mapTip is a pretty, html representation for feature information.
void setLegend(QgsMapLayerLegend *legend)
Assign a legend controller to the map layer.
double maximumScale() const
Returns the maximum map scale (i.e.
QString keywordList() const
Returns the keyword list of the layer used by QGIS Server in GetCapabilities request.
void setTitle(const QString &title)
Sets the title of the layer used by QGIS Server in GetCapabilities request.
void setCrs(const QgsCoordinateReferenceSystem &srs, bool emitSignal=true)
Sets layer's spatial reference system.
QgsRectangle outputExtentToLayerExtent(const QgsMapLayer *layer, QgsRectangle extent) const
transform bounding box from output CRS to layer's CRS
static QString rasterMapTipPreviewText(QgsMapLayer *layer, QgsMapCanvas *mapCanvas, const QString &mapTemplate)
Returns the html that would be displayed in a maptip for a given layer.
Renderer for multiband images with the color components.
void addPage(const QString &title, const QString &tooltip, const QIcon &icon, QWidget *widget, const QStringList &path=QStringList(), const QString &key=QString())
Adds a new page to the dialog pages.
QStackedWidget * mOptStackedWidget
void initOptionsBase(bool restoreUi=true, const QString &title=QString())
Set up the base ui connections for vertical tabs.
void insertPage(const QString &title, const QString &tooltip, const QIcon &icon, QWidget *widget, const QString &before, const QStringList &path=QStringList(), const QString &key=QString())
Inserts a new page into the dialog pages.
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.
void setDirty(bool b=true)
Flag the project as dirty (modified).
void setProperty(int key, const QgsProperty &property)
Adds a property to the collection and takes ownership of it.
QgsProperty property(int key) const final
Returns a matching property from the collection, if one exists.
Feedback object tailored for raster block reading.
static QString printValue(double value)
Print double value with all necessary significant digits.
Base class for raster data providers.
virtual QString buildPyramids(const QList< QgsRasterPyramid > &pyramidList, const QString &resamplingMethod="NEAREST", Qgis::RasterPyramidFormat format=Qgis::RasterPyramidFormat::GeoTiff, const QStringList &configOptions=QStringList(), QgsRasterBlockFeedback *feedback=nullptr)
Creates pyramid overviews.
Qgis::DataType sourceDataType(int bandNo) const override=0
Returns source data type for the band specified by number, source data type may be shorter than dataT...
virtual void setUseSourceNoDataValue(int bandNo, bool use)
Sets the source nodata value usage.
Qgis::DataType dataType(int bandNo) const override=0
Returns data type for the band specified by number.
static QList< QPair< QString, QString > > pyramidResamplingMethods(const QString &providerKey)
Returns a list of pyramid resampling method name and label pairs for given provider.
virtual void setUserNoDataValue(int bandNo, const QgsRasterRangeList &noData)
virtual QList< QgsRasterPyramid > buildPyramidList(const QList< int > &overviewList=QList< int >())
Returns the raster layers pyramid list.
@ BuildPyramids
Supports building of pyramids (overviews)
@ Size
Original data source size (and thus resolution) is known, it is not always available,...
virtual int capabilities() const
Returns a bitmask containing the supported capabilities.
Q_DECL_DEPRECATED void saveDefaultStyle()
Saves the default style when appropriate button is pressed.
QgsRasterLayerProperties(QgsMapLayer *lyr, QgsMapCanvas *canvas, QWidget *parent=nullptr, Qt::WindowFlags=QgsGuiUtils::ModalDialogFlags)
Constructor.
bool eventFilter(QObject *obj, QEvent *ev) override
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
void optionsStackedWidget_CurrentChanged(int index) FINAL
void addPropertiesPageFactory(const QgsMapLayerConfigWidgetFactory *factory) FINAL
Adds properties page from a factory.
Represents a raster layer.
QString htmlMetadata() const override
Obtain a formatted HTML string containing assorted metadata for this layer.
bool canCreateRasterAttributeTable()
Returns true if the raster renderer is suitable for creation of a raster attribute table.
int attributeTableCount() const
Returns the number of attribute tables for the raster by counting the number of bands that have an as...
QgsRasterPipe * pipe()
Returns the raster pipe.
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.
QString providerType() const
[ data provider interface ] Which provider is being used for this Raster Layer?
void setRenderer(QgsRasterRenderer *renderer)
Sets the raster's renderer.
QgsHueSaturationFilter * hueSaturationFilter() const
Returns the raster's hue/saturation filter.
QgsPropertyCollection & dataDefinedProperties()
Returns a reference to the pipe's property collection, used for data defined overrides.
Property
Data definable properties.
@ RendererOpacity
Raster renderer global opacity.
static QgsPropertiesDefinition propertyDefinitions()
Returns the definitions for data defined properties available for use in raster pipes.
void setDataDefinedProperties(const QgsPropertyCollection &collection)
Sets the pipe's property collection, used for data defined overrides.
This struct is used to store pyramid info for the raster layer.
Raster values range container.
void insertWidgetFunction(const QString &rendererName, QgsRasterRendererWidgetCreateFunc func)
QStringList renderersList() const
Raster renderer pipe that applies colors to a raster.
QColor nodataColor() const
Returns the color to use for shading nodata pixels.
virtual QString type() const
Returns a unique string representation of the renderer type.
double opacity() const
Returns 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 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 setRasterTransparency(QgsRasterTransparency *t)
void setNodataColor(const QColor &color)
Sets the color to use for shading nodata pixels.
Defines the list of pixel values to be considered as transparent or semi transparent when rendering r...
void setTransparentSingleValuePixelList(const QList< QgsRasterTransparency::TransparentSingleValuePixel > &newList)
Sets the transparent single value pixel list, replacing the whole existing list.
void setTransparentThreeValuePixelList(const QList< QgsRasterTransparency::TransparentThreeValuePixel > &newList)
Sets the transparent three value pixel list, replacing the whole existing list.
A rectangle specified with double values.
This class is a composition of two QSettings instances:
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
bool contains(const QString &key, QgsSettings::Section section=QgsSettings::NoSection) const
Returns true if there exists a setting called key; returns false otherwise.
void setValue(const QString &key, const QVariant &value, QgsSettings::Section section=QgsSettings::NoSection)
Sets the value of setting key to value.
The QgsWebView class is a collection of stubs to mimic the API of QWebView on systems where the real ...
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.
#define QgsDebugMsgLevel(str, level)
QList< QgsRasterRange > QgsRasterRangeList
const QgsCoordinateReferenceSystem & crs
Setting options for creating vector data providers.
Registry for raster renderer entries.
QgsRasterRendererWidgetCreateFunc widgetCreateFunction
double percentTransparent
double percentTransparent