72#include <QDesktopServices> 
   73#include <QTableWidgetItem> 
   80#include <QLinearGradient> 
   81#include <QPainterPath> 
   83#include <QColorDialog> 
   90#include <QRegularExpressionValidator> 
   91#include <QRegularExpression> 
   96  , TRSTRING_NOT_SET( tr( 
"Not Set" ) )
 
   97  , mDefaultStandardDeviation( 0 )
 
   98  , mDefaultRedBand( 0 )
 
   99  , mDefaultGreenBand( 0 )
 
  100  , mDefaultBlueBand( 0 )
 
  102  , mGradientHeight( 0.0 )
 
  103  , mGradientWidth( 0.0 )
 
  104  , mMapCanvas( canvas )
 
  105  , mMetadataFilled( false )
 
  107  mGrayMinimumMaximumEstimated = 
true;
 
  108  mRGBMinimumMaximumEstimated = 
true;
 
  113  mOptsPage_Information->layout()->addWidget( mMetadataViewer );
 
  117  transparencyScrollArea->setWidget( mRasterTransparencyWidget );
 
  119  connect( buttonBuildPyramids, &QPushButton::clicked, 
this, &QgsRasterLayerProperties::buttonBuildPyramids_clicked );
 
  121  connect( mRenderTypeComboBox, 
static_cast<void ( QComboBox::* )( 
int )
>( &QComboBox::currentIndexChanged ), 
this, &QgsRasterLayerProperties::mRenderTypeComboBox_currentIndexChanged );
 
  122  connect( mResetColorRenderingBtn, &QToolButton::clicked, 
this, &QgsRasterLayerProperties::mResetColorRenderingBtn_clicked );
 
  123  connect( buttonRemoveMetadataUrl, &QPushButton::clicked, 
this, &QgsRasterLayerProperties::removeSelectedMetadataUrl );
 
  124  connect( buttonAddMetadataUrl, &QPushButton::clicked, 
this, &QgsRasterLayerProperties::addMetadataUrl );
 
  129  connect( buttonBox, &QDialogButtonBox::helpRequested, 
this, &QgsRasterLayerProperties::showHelp );
 
  131  mSourceGroupBox->hide();
 
  133  mBtnStyle = 
new QPushButton( tr( 
"Style" ) );
 
  134  QMenu *menuStyle = 
new QMenu( 
this );
 
  137  menuStyle->addSeparator();
 
  140  mBtnStyle->setMenu( menuStyle );
 
  141  connect( menuStyle, &QMenu::aboutToShow, 
this, &QgsRasterLayerProperties::aboutToShowStyleMenu );
 
  142  buttonBox->addButton( mBtnStyle, QDialogButtonBox::ResetRole );
 
  144  mBtnMetadata = 
new QPushButton( tr( 
"Metadata" ), 
this );
 
  145  QMenu *menuMetadata = 
new QMenu( 
this );
 
  146  mActionLoadMetadata = menuMetadata->addAction( tr( 
"Load Metadata…" ), 
this, &QgsRasterLayerProperties::loadMetadata );
 
  147  mActionSaveMetadataAs = menuMetadata->addAction( tr( 
"Save Metadata…" ), 
this, &QgsRasterLayerProperties::saveMetadataAs );
 
  148  menuMetadata->addSeparator();
 
  149  menuMetadata->addAction( tr( 
"Save as Default" ), 
this, &QgsRasterLayerProperties::saveDefaultMetadata );
 
  150  menuMetadata->addAction( tr( 
"Restore Default" ), 
this, &QgsRasterLayerProperties::loadDefaultMetadata );
 
  151  mBtnMetadata->setMenu( menuMetadata );
 
  152  buttonBox->addButton( mBtnMetadata, QDialogButtonBox::ResetRole );
 
  156  connect( 
this, &QDialog::accepted, 
this, &QgsRasterLayerProperties::apply );
 
  157  connect( 
this, &QDialog::rejected, 
this, &QgsRasterLayerProperties::onCancel );
 
  159  connect( buttonBox->button( QDialogButtonBox::Apply ), &QAbstractButton::clicked, 
this, &QgsRasterLayerProperties::apply );
 
  161  cbxPyramidsFormat->addItem( tr( 
"External" ), QVariant::fromValue( Qgis::RasterPyramidFormat::GeoTiff ) );
 
  162  cbxPyramidsFormat->addItem( tr( 
"Internal (if possible)" ), QVariant::fromValue( Qgis::RasterPyramidFormat::Internal ) );
 
  163  cbxPyramidsFormat->addItem( tr( 
"External (Erdas Imagine)" ), QVariant::fromValue( Qgis::RasterPyramidFormat::Erdas ) );
 
  166  connect( mSliderBrightness, &QAbstractSlider::valueChanged, mBrightnessSpinBox, &QSpinBox::setValue );
 
  167  connect( mBrightnessSpinBox, 
static_cast < void ( QSpinBox::* )( 
int ) 
> ( &QSpinBox::valueChanged ), mSliderBrightness, &QAbstractSlider::setValue );
 
  168  mBrightnessSpinBox->setClearValue( 0 );
 
  170  connect( mSliderContrast, &QAbstractSlider::valueChanged, mContrastSpinBox, &QSpinBox::setValue );
 
  171  connect( mContrastSpinBox, 
static_cast < void ( QSpinBox::* )( 
int ) 
> ( &QSpinBox::valueChanged ), mSliderContrast, &QAbstractSlider::setValue );
 
  172  mContrastSpinBox->setClearValue( 0 );
 
  175  connect( mSliderGamma, &QAbstractSlider::valueChanged, 
this, &QgsRasterLayerProperties::updateGammaSpinBox );
 
  176  connect( mGammaSpinBox, 
static_cast < void ( QDoubleSpinBox::* )( 
double ) 
> ( &QDoubleSpinBox::valueChanged ), 
this, &QgsRasterLayerProperties::updateGammaSlider );
 
  177  mGammaSpinBox->setClearValue( 1.0 );
 
  180  connect( sliderSaturation, &QAbstractSlider::valueChanged, spinBoxSaturation, &QSpinBox::setValue );
 
  181  connect( spinBoxSaturation, 
static_cast < void ( QSpinBox::* )( 
int ) 
> ( &QSpinBox::valueChanged ), sliderSaturation, &QAbstractSlider::setValue );
 
  182  spinBoxSaturation->setClearValue( 0 );
 
  185  connect( sliderColorizeStrength, &QAbstractSlider::valueChanged, spinColorizeStrength, &QSpinBox::setValue );
 
  186  connect( spinColorizeStrength, 
static_cast < void ( QSpinBox::* )( 
int ) 
> ( &QSpinBox::valueChanged ), sliderColorizeStrength, &QAbstractSlider::setValue );
 
  187  spinColorizeStrength->setClearValue( 100 );
 
  190  connect( comboGrayscale, 
static_cast<void ( QComboBox::* )( 
int )
>( &QComboBox::currentIndexChanged ), 
this, &QgsRasterLayerProperties::toggleSaturationControls );
 
  193  connect( mColorizeCheck, &QAbstractButton::toggled, 
this, &QgsRasterLayerProperties::toggleColorizeControls );
 
  196  connect( lbxPyramidResolutions, &QListWidget::itemSelectionChanged, 
this, &QgsRasterLayerProperties::toggleBuildPyramidsButton );
 
  198  connect( mRefreshLayerCheckBox, &QCheckBox::toggled, mRefreshLayerIntervalSpinBox, &QDoubleSpinBox::setEnabled );
 
  201  mScaleRangeWidget->setMapCanvas( mMapCanvas );
 
  206  tableViewMetadataUrl->setSelectionMode( QAbstractItemView::SingleSelection );
 
  207  tableViewMetadataUrl->setSelectionBehavior( QAbstractItemView::SelectRows );
 
  208  tableViewMetadataUrl->horizontalHeader()->setStretchLastSection( 
true );
 
  209  tableViewMetadataUrl->horizontalHeader()->setSectionResizeMode( QHeaderView::Stretch );
 
  211  mMetadataUrlModel = 
new QStandardItemModel( tableViewMetadataUrl );
 
  212  mMetadataUrlModel->clear();
 
  213  mMetadataUrlModel->setColumnCount( 3 );
 
  214  QStringList metadataUrlHeaders;
 
  215  metadataUrlHeaders << tr( 
"URL" ) << tr( 
"Type" ) << tr( 
"Format" );
 
  216  mMetadataUrlModel->setHorizontalHeaderLabels( metadataUrlHeaders );
 
  217  tableViewMetadataUrl->setModel( mMetadataUrlModel );
 
  218  tableViewMetadataUrl->setItemDelegate( 
new MetadataUrlItemDelegate( 
this ) );
 
  225  mRasterTransparencyWidget->pbnAddValuesFromDisplay->setIcon( 
QgsApplication::getThemeIcon( QStringLiteral( 
"/mActionContextHelp.png" ) ) );
 
  228  mRasterTransparencyWidget->pbnImportTransparentPixelValues->setIcon( 
QgsApplication::getThemeIcon( QStringLiteral( 
"/mActionFileOpen.svg" ) ) );
 
  229  mRasterTransparencyWidget->pbnExportTransparentPixelValues->setIcon( 
QgsApplication::getThemeIcon( QStringLiteral( 
"/mActionFileSave.svg" ) ) );
 
  237  connect( mEnableMapTips, &QAbstractButton::toggled, mHtmlMapTipGroupBox, &QWidget::setEnabled );
 
  240  updateRasterAttributeTableOptionsPage();
 
  244  connect( mCreateRasterAttributeTableButton, &QPushButton::clicked, 
this, [ = ]
 
  249      QgsCreateRasterAttributeTableDialog dlg { mRasterLayer };
 
  250      dlg.setOpenWhenDoneVisible( 
false );
 
  251      if ( dlg.exec() == QDialog::Accepted )
 
  253        updateRasterAttributeTableOptionsPage();
 
  258  connect( mLoadRasterAttributeTableFromFileButton, &QPushButton::clicked, 
this, [ = ]
 
  263    if ( dlg.exec() == QDialog::Accepted )
 
  265      updateRasterAttributeTableOptionsPage();
 
  269  mBackupCrs = mRasterLayer->crs();
 
  272  if ( mMapCanvas && mRasterTransparencyWidget->pixelSelectorTool() )
 
  284    connect( mRasterTransparencyWidget->pbnAddValuesFromDisplay, &QPushButton::clicked, 
this, [ = ]
 
  290      mMapCanvas->window()->raise();
 
  291      mMapCanvas->window()->activateWindow();
 
  292      mMapCanvas->window()->setFocus();
 
  309  mMapTipExpressionWidget->registerExpressionContextGenerator( 
this );
 
  311  connect( mInsertExpressionButton, &QAbstractButton::clicked, 
this, [ = ]
 
  313    QString expression = QStringLiteral( 
"[% " );
 
  314    expression += mMapTipExpressionWidget->expression();
 
  315    expression += QLatin1String( 
" %]" );
 
  316    mMapTipWidget->insertText( expression );
 
  325    cboResamplingMethod->clear();
 
  328    for ( 
const QPair<QString, QString> &method : std::as_const( constProviderType ) )
 
  330      cboResamplingMethod->addItem( method.second, method.first );
 
  334    QString prefix = provider->name() + 
"/driverOptions/_pyramids/";
 
  336    QString defaultMethod = mySettings.
value( prefix + 
"resampling", 
"AVERAGE" ).toString();
 
  337    int idx = cboResamplingMethod->findData( defaultMethod );
 
  339      cboResamplingMethod->setCurrentIndex( idx );
 
  343    const QList< QgsRasterPyramid > myPyramidList = provider->buildPyramidList();
 
  347      if ( pyramid.getExists() )
 
  349        lbxPyramidResolutions->addItem( 
new QListWidgetItem( myPyramidPixmap,
 
  350                                        QString::number( pyramid.getXDim() ) + QStringLiteral( 
" x " ) +
 
  351                                        QString::number( pyramid.getYDim() ) ) );
 
  355        lbxPyramidResolutions->addItem( 
new QListWidgetItem( myNoPyramidPixmap,
 
  356                                        QString::number( pyramid.getXDim() ) + QStringLiteral( 
" x " ) +
 
  357                                        QString::number( pyramid.getYDim() ) ) );
 
  364    mOptsPage_Pyramids->setEnabled( 
false );
 
  373    mOptsPage_Histogram->setEnabled( 
false );
 
  376  QVBoxLayout *layout = 
new QVBoxLayout( metadataFrame );
 
  377  layout->setContentsMargins( 0, 0, 0, 0 );
 
  379  mMetadataWidget->layout()->setContentsMargins( 0, 0, 0, 0 );
 
  380  mMetadataWidget->setMapCanvas( mMapCanvas );
 
  381  layout->addWidget( mMetadataWidget );
 
  382  metadataFrame->setLayout( layout );
 
  384  QVBoxLayout *temporalLayout = 
new QVBoxLayout( temporalFrame );
 
  385  temporalLayout->setContentsMargins( 0, 0, 0, 0 );
 
  387  temporalLayout->addWidget( mTemporalWidget );
 
  390  QgsDebugMsgLevel( 
"Setting crs to " + mRasterLayer->crs().userFriendlyIdentifier(), 2 );
 
  391  mCrsSelector->setCrs( mRasterLayer->crs() );
 
  394  QString pyramidFormat( QStringLiteral( 
"<h2>%1</h2><p>%2 %3 %4</p><b><font color='red'><p>%5</p><p>%6</p>" ) );
 
  395  QString pyramidHeader    = tr( 
"Description" );
 
  396  QString pyramidSentence1 = tr( 
"Large resolution raster layers can slow navigation in QGIS." );
 
  397  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." );
 
  398  QString pyramidSentence3 = tr( 
"You must have write access in the directory where the original data is stored to build pyramids." );
 
  399  QString pyramidSentence4 = tr( 
"Please note that building internal pyramids may alter the original data file and once created they cannot be removed!" );
 
  400  QString pyramidSentence5 = tr( 
"Please note that building internal pyramids could corrupt your image - always make a backup of your data first!" );
 
  402  tePyramidDescription->setHtml( pyramidFormat.arg( pyramidHeader,
 
  407                                 pyramidSentence5 ) );
 
  410  mResamplingGroupBox->setSaveCheckedState( 
true );
 
  411  mResamplingUtils.initWidgets( mRasterLayer, mZoomedInResamplingComboBox, mZoomedOutResamplingComboBox, mMaximumOversamplingSpinBox, mCbEarlyResampling );
 
  412  mResamplingUtils.refreshWidgetsFromLayer();
 
  416  btnColorizeColor->setColorDialogTitle( tr( 
"Select Color" ) );
 
  417  btnColorizeColor->setContext( QStringLiteral( 
"symbology" ) );
 
  422  if ( hueSaturationFilter )
 
  424    sliderSaturation->setValue( hueSaturationFilter->
saturation() );
 
  425    comboGrayscale->setCurrentIndex( ( 
int ) hueSaturationFilter->
grayscaleMode() );
 
  428    toggleSaturationControls( 
static_cast<int>( hueSaturationFilter->
grayscaleMode() ) );
 
  431    mColorizeCheck->setChecked( hueSaturationFilter->
colorizeOn() );
 
  432    btnColorizeColor->setColor( hueSaturationFilter->
colorizeColor() );
 
  433    toggleColorizeControls( hueSaturationFilter->
colorizeOn() );
 
  434    sliderColorizeStrength->setValue( hueSaturationFilter->
colorizeStrength() );
 
  435    mInvertColorsCheck->setChecked( hueSaturationFilter->
invertColors() );
 
  440  mBlendModeComboBox->setBlendMode( mRasterLayer->blendMode() );
 
  445    mRasterTransparencyWidget->cboxTransparencyBand->setShowNotSetOption( 
true, tr( 
"None" ) );
 
  446    mRasterTransparencyWidget->cboxTransparencyBand->setLayer( mRasterLayer );
 
  455        cboxTransparencyBand->setCurrentIndex( cboxTransparencyBand->findData( renderer->
alphaBand() ) );
 
  462  mHistogramWidget = 
nullptr;
 
  463  if ( mOptsPage_Histogram->isEnabled() )
 
  466    mHistogramStackedWidget->addWidget( mHistogramWidget );
 
  479  mDisableRenderTypeComboBoxCurrentIndexChanged = 
true;
 
  481  for ( 
const QString &name : constRenderersList )
 
  485      if ( ( mRasterLayer->rasterType() != Qgis::RasterLayerType::SingleBandColorData && entry.
name != QLatin1String( 
"singlebandcolordata" ) ) ||
 
  486           ( mRasterLayer->rasterType() == Qgis::RasterLayerType::SingleBandColorData && entry.
name == QLatin1String( 
"singlebandcolordata" ) ) )
 
  492  mDisableRenderTypeComboBoxCurrentIndexChanged = 
false;
 
  497    QString rendererType = renderer->
type();
 
  498    widgetIndex = mRenderTypeComboBox->findData( rendererType );
 
  499    if ( widgetIndex != -1 )
 
  501      mDisableRenderTypeComboBoxCurrentIndexChanged = 
true;
 
  502      mRenderTypeComboBox->setCurrentIndex( widgetIndex );
 
  503      mDisableRenderTypeComboBoxCurrentIndexChanged = 
false;
 
  506    if ( rendererType == QLatin1String( 
"singlebandcolordata" ) && mRenderTypeComboBox->count() == 1 )
 
  509      QSizePolicy sizep = mBandRenderingGrpBx->sizePolicy();
 
  510      sizep.setVerticalStretch( 0 );
 
  511      sizep.setVerticalPolicy( QSizePolicy::Maximum );
 
  512      mBandRenderingGrpBx->setSizePolicy( sizep );
 
  513      mBandRenderingGrpBx->updateGeometry();
 
  516    if ( mRasterLayer->providerType() != QLatin1String( 
"wms" ) )
 
  518      mWMSPrintGroupBox->hide();
 
  519      mPublishDataSourceUrlCheckBox->hide();
 
  520      mBackgroundLayerCheckBox->hide();
 
  527  const int horizontalDpi = logicalDpiX();
 
  530  if ( horizontalDpi > 96 )
 
  532    mMetadataViewer->setZoomFactor( mMetadataViewer->zoomFactor() * 0.9 );
 
  534  mMetadataViewer->page()->setLinkDelegationPolicy( QWebPage::LinkDelegationPolicy::DelegateAllLinks );
 
  535  connect( mMetadataViewer->page(), &QWebPage::linkClicked, 
this, &QgsRasterLayerProperties::urlClicked );
 
  536  mMetadataViewer->page()->settings()->setAttribute( QWebSettings::DeveloperExtrasEnabled, 
true );
 
  537  mMetadataViewer->page()->settings()->setAttribute( QWebSettings::JavascriptEnabled, 
true );
 
  543  mRenderTypeComboBox_currentIndexChanged( widgetIndex );
 
  551  if ( !settings.
contains( QStringLiteral( 
"/Windows/RasterLayerProperties/tab" ) ) )
 
  553    settings.
setValue( QStringLiteral( 
"Windows/RasterLayerProperties/tab" ),
 
  554                       mOptStackedWidget->indexOf( mOptsPage_Style ) );
 
  559  QString title = tr( 
"Layer Properties — %1" ).arg( lyr->name() );
 
  561  if ( !mRasterLayer->styleManager()->isDefault( mRasterLayer->styleManager()->currentStyle() ) )
 
  562    title += QStringLiteral( 
" (%1)" ).arg( mRasterLayer->styleManager()->currentStyle() );
 
  563  restoreOptionsBaseUi( title );
 
  564  optionsStackedWidget_CurrentChanged( mOptionsStackedWidget->currentIndex() );
 
  567  mOptsPage_Information->setProperty( 
"helpPage", QStringLiteral( 
"working_with_raster/raster_properties.html#information-properties" ) );
 
  568  mOptsPage_Source->setProperty( 
"helpPage", QStringLiteral( 
"working_with_raster/raster_properties.html#source-properties" ) );
 
  569  mOptsPage_Style->setProperty( 
"helpPage", QStringLiteral( 
"working_with_raster/raster_properties.html#symbology-properties" ) );
 
  570  mOptsPage_Transparency->setProperty( 
"helpPage", QStringLiteral( 
"working_with_raster/raster_properties.html#transparency-properties" ) );
 
  572  if ( mOptsPage_Histogram )
 
  573    mOptsPage_Histogram->setProperty( 
"helpPage", QStringLiteral( 
"working_with_raster/raster_properties.html#histogram-properties" ) );
 
  575  mOptsPage_Rendering->setProperty( 
"helpPage", QStringLiteral( 
"working_with_raster/raster_properties.html#rendering-properties" ) );
 
  576  mOptsPage_Temporal->setProperty( 
"helpPage", QStringLiteral( 
"working_with_raster/raster_properties.html#temporal-properties" ) );
 
  578  if ( mOptsPage_Pyramids )
 
  579    mOptsPage_Pyramids->setProperty( 
"helpPage", QStringLiteral( 
"working_with_raster/raster_properties.html#pyramids-properties" ) );
 
  581  if ( mOptsPage_Display )
 
  582    mOptsPage_Display->setProperty( 
"helpPage", QStringLiteral( 
"working_with_raster/raster_properties.html#display-properties" ) );
 
  584  mOptsPage_Metadata->setProperty( 
"helpPage", QStringLiteral( 
"working_with_raster/raster_properties.html#metadata-properties" ) );
 
  585  mOptsPage_Legend->setProperty( 
"helpPage", QStringLiteral( 
"working_with_raster/raster_properties.html#legend-properties" ) );
 
  586  mOptsPage_Server->setProperty( 
"helpPage", QStringLiteral( 
"working_with_raster/raster_properties.html#server-properties" ) );
 
  601      mLayerPropertiesPages << page;
 
  604      if ( beforePage.isEmpty() )
 
  622void QgsRasterLayerProperties::updateRasterAttributeTableOptionsPage( )
 
  624  if ( mRasterAttributeTableWidget )
 
  626    mOptsPage_RasterAttributeTable->layout()->removeWidget( mRasterAttributeTableWidget );
 
  627    mRasterAttributeTableWidget = 
nullptr;
 
  634    mOptsPage_RasterAttributeTable->layout()->addWidget( mRasterAttributeTableWidget );
 
  637    mNoRasterAttributeTableWidget->hide();
 
  641    mNoRasterAttributeTableWidget->show();
 
  646void QgsRasterLayerProperties::setRendererWidget( 
const QString &rendererName )
 
  659    opacity = oldRenderer->
opacity();
 
  668      QgsDebugMsgLevel( QStringLiteral( 
"renderer has widgetCreateFunction" ), 3 );
 
  671      if ( oldWidget && ( !oldRenderer || rendererName != oldRenderer->
type() ) )
 
  673        if ( rendererName == QLatin1String( 
"singlebandgray" ) )
 
  676          whileBlocking( mRasterLayer )->setDefaultContrastEnhancement();
 
  678        else if ( rendererName == QLatin1String( 
"multibandcolor" ) )
 
  681          whileBlocking( mRasterLayer )->setDefaultContrastEnhancement();
 
  689      mRendererStackedWidget->addWidget( mRendererWidget );
 
  693        std::unique_ptr<QgsRasterRenderer> oldRenderer;
 
  694        oldRenderer.reset( oldWidget->
renderer() );
 
  695        std::unique_ptr<QgsRasterRenderer> newRenderer;
 
  696        newRenderer.reset( mRendererWidget->
renderer() );
 
  697        const QList<int> oldBands = oldRenderer->
usesBands();
 
  698        const QList<int> newBands = newRenderer->usesBands();
 
  699        if ( oldBands != newBands )
 
  707  const int widgetIndex = mRenderTypeComboBox->findData( rendererName );
 
  708  if ( widgetIndex != -1 )
 
  710    mDisableRenderTypeComboBoxCurrentIndexChanged = 
true;
 
  711    mRenderTypeComboBox->setCurrentIndex( widgetIndex );
 
  712    mDisableRenderTypeComboBoxCurrentIndexChanged = 
false;
 
  715  if ( mRendererWidget != oldWidget )
 
  718  if ( mHistogramWidget )
 
  724void QgsRasterLayerProperties::sync()
 
  728  if ( !mSourceWidget )
 
  733      QHBoxLayout *layout = 
new QHBoxLayout();
 
  734      layout->addWidget( mSourceWidget );
 
  735      mSourceGroupBox->setLayout( layout );
 
  736      mSourceGroupBox->show();
 
  740        buttonBox->button( QDialogButtonBox::Apply )->setEnabled( isValid );
 
  741        buttonBox->button( QDialogButtonBox::Ok )->setEnabled( isValid );
 
  759    mRasterTransparencyWidget->gboxNoDataValue->setEnabled( 
false );
 
  760    mRasterTransparencyWidget->gboxCustomTransparency->setEnabled( 
false );
 
  761    mOptionsStackedWidget->setCurrentWidget( mOptsPage_Server );
 
  767    if ( mOptsPage_Pyramids )
 
  769      delete mOptsPage_Pyramids;
 
  770      mOptsPage_Pyramids = 
nullptr;
 
  776    if ( mOptsPage_Histogram )
 
  778      delete mOptsPage_Histogram;
 
  779      mOptsPage_Histogram = 
nullptr;
 
  780      delete mHistogramWidget;
 
  781      mHistogramWidget = 
nullptr;
 
  793  if ( brightnessFilter )
 
  795    mSliderBrightness->setValue( brightnessFilter->
brightness() );
 
  796    mSliderContrast->setValue( brightnessFilter->
contrast() );
 
  797    mGammaSpinBox->setValue( brightnessFilter->
gamma() );
 
  803  if ( hueSaturationFilter )
 
  805    sliderSaturation->setValue( hueSaturationFilter->
saturation() );
 
  806    comboGrayscale->setCurrentIndex( ( 
int ) hueSaturationFilter->
grayscaleMode() );
 
  809    toggleSaturationControls( 
static_cast<int>( hueSaturationFilter->
grayscaleMode() ) );
 
  812    mColorizeCheck->setChecked( hueSaturationFilter->
colorizeOn() );
 
  813    btnColorizeColor->setColor( hueSaturationFilter->
colorizeColor() );
 
  814    toggleColorizeControls( hueSaturationFilter->
colorizeOn() );
 
  815    sliderColorizeStrength->setValue( hueSaturationFilter->
colorizeStrength() );
 
  816    mInvertColorsCheck->setChecked( hueSaturationFilter->
invertColors() );
 
  829  mLayerOrigNameLineEd->setText( mRasterLayer->
name() );
 
  836  updateInformationContent();
 
  839  mLayerShortNameLineEdit->setText( mRasterLayer->
shortName() );
 
  842  mLayerShortNameLineEdit->setValidator( shortNameValidator );
 
  845  mLayerTitleLineEdit->setText( mRasterLayer->
title() );
 
  846  mLayerAbstractTextEdit->setPlainText( mRasterLayer->
abstract() );
 
  847  mLayerKeywordListLineEdit->setText( mRasterLayer->
keywordList() );
 
  848  mLayerDataUrlLineEdit->setText( mRasterLayer->
dataUrl() );
 
  849  mLayerDataUrlFormatComboBox->setCurrentIndex(
 
  850    mLayerDataUrlFormatComboBox->findText(
 
  856  mLayerAttributionLineEdit->setText( mRasterLayer->
attribution() );
 
  857  mLayerAttributionUrlLineEdit->setText( mRasterLayer->
attributionUrl() );
 
  863    const int row = mMetadataUrlModel->rowCount();
 
  864    mMetadataUrlModel->setItem( row, 0, 
new QStandardItem( metaUrl.url ) );
 
  865    mMetadataUrlModel->setItem( row, 1, 
new QStandardItem( metaUrl.type ) );
 
  866    mMetadataUrlModel->setItem( row, 2, 
new QStandardItem( metaUrl.format ) );
 
  870  mLayerLegendUrlLineEdit->setText( mRasterLayer->
legendUrl() );
 
  871  mLayerLegendUrlFormatComboBox->setCurrentIndex( mLayerLegendUrlFormatComboBox->findText( mRasterLayer->
legendUrlFormat() ) );
 
  877  QVariant wmsPrintLayer = mRasterLayer->
customProperty( QStringLiteral( 
"WMSPrintLayer" ) );
 
  878  if ( wmsPrintLayer.isValid() )
 
  880    mWMSPrintLayerLineEdit->setText( wmsPrintLayer.toString() );
 
  883  QVariant wmsPublishDataSourceUrl = mRasterLayer->
customProperty( QStringLiteral( 
"WMSPublishDataSourceUrl" ), 
false );
 
  884  mPublishDataSourceUrlCheckBox->setChecked( wmsPublishDataSourceUrl.toBool() );
 
  886  QVariant wmsBackgroundLayer = mRasterLayer->
customProperty( QStringLiteral( 
"WMSBackgroundLayer" ), 
false );
 
  887  mBackgroundLayerCheckBox->setChecked( wmsBackgroundLayer.toBool() );
 
  889  mLegendPlaceholderWidget->setLastPathSettingsKey( QStringLiteral( 
"lastLegendPlaceholderDir" ) );
 
  891  mLegendConfigEmbeddedWidget->setLayer( mRasterLayer );
 
  896  updateDataDefinedButtons();
 
  900    page->syncToLayer( mRasterLayer );
 
  905void QgsRasterLayerProperties::apply()
 
  909    const QString newSource = mSourceWidget->
sourceUri();
 
  910    if ( newSource != mRasterLayer->
source() )
 
  917  if ( !mRasterLayer->
isValid() )
 
  931  mLegendConfigEmbeddedWidget->applyToLayer();
 
  952  if ( 
"" != mRasterTransparencyWidget->leNoDataValue->text() )
 
  954    bool myDoubleOk = 
false;
 
  959      myNoDataRangeList << myNoDataRange;
 
  962  for ( 
int bandNo = 1; bandNo <= mRasterLayer->
dataProvider()->bandCount(); bandNo++ )
 
  970  if ( rendererWidget )
 
  977  mBackupCrs = mRasterLayer->
crs();
 
  979  mMetadataFilled = 
false;
 
  983  if ( rasterRenderer )
 
  985    rasterRenderer->
setAlphaBand( mRasterTransparencyWidget->cboxTransparencyBand->currentBand() );
 
  986    rasterRenderer->
setNodataColor( mRasterTransparencyWidget->mNodataColorButton->color() );
 
  990    if ( mRasterTransparencyWidget->tableTransparency->columnCount() == 4 )
 
  993      QList<QgsRasterTransparency::TransparentThreeValuePixel> myTransparentThreeValuePixelList;
 
  994      for ( 
int myListRunner = 0; myListRunner < mRasterTransparencyWidget->tableTransparency->rowCount(); myListRunner++ )
 
  996        myTransparentPixel.
red = transparencyCellValue( myListRunner, 0 );
 
  997        myTransparentPixel.
green = transparencyCellValue( myListRunner, 1 );
 
  998        myTransparentPixel.
blue = transparencyCellValue( myListRunner, 2 );
 
 1000        myTransparentThreeValuePixelList.append( myTransparentPixel );
 
 1004    else if ( mRasterTransparencyWidget->tableTransparency->columnCount() == 3 )
 
 1007      QList<QgsRasterTransparency::TransparentSingleValuePixel> myTransparentSingleValuePixelList;
 
 1008      for ( 
int myListRunner = 0; myListRunner < mRasterTransparencyWidget->tableTransparency->rowCount(); myListRunner++ )
 
 1010        myTransparentPixel.
min = transparencyCellValue( myListRunner, 0 );
 
 1011        myTransparentPixel.
max = transparencyCellValue( myListRunner, 1 );
 
 1014        myTransparentSingleValuePixelList.append( myTransparentPixel );
 
 1025    rasterRenderer->
setOpacity( mRasterTransparencyWidget->mOpacityWidget->opacity() );
 
 1032  mRasterLayer->
setName( mLayerOrigNameLineEd->text() );
 
 1047  mResamplingUtils.refreshLayerFromWidgets();
 
 1051  if ( hueSaturationFilter )
 
 1053    hueSaturationFilter->
setSaturation( sliderSaturation->value() );
 
 1055    hueSaturationFilter->
setColorizeOn( mColorizeCheck->checkState() );
 
 1058    hueSaturationFilter->
setInvertColors( mInvertColorsCheck->isChecked() );
 
 1062  mRasterLayer->
setBlendMode( mBlendModeComboBox->blendMode() );
 
 1067  mRasterLayer->
setCrs( mCrsSelector->crs() );
 
 1069  if ( mRasterLayer->
shortName() != mLayerShortNameLineEdit->text() )
 
 1070    mMetadataFilled = 
false;
 
 1071  mRasterLayer->
setShortName( mLayerShortNameLineEdit->text() );
 
 1073  if ( mRasterLayer->
title() != mLayerTitleLineEdit->text() )
 
 1074    mMetadataFilled = 
false;
 
 1075  mRasterLayer->
setTitle( mLayerTitleLineEdit->text() );
 
 1077  if ( mRasterLayer->
abstract() != mLayerAbstractTextEdit->toPlainText() )
 
 1078    mMetadataFilled = 
false;
 
 1079  mRasterLayer->
setAbstract( mLayerAbstractTextEdit->toPlainText() );
 
 1081  if ( mRasterLayer->
keywordList() != mLayerKeywordListLineEdit->text() )
 
 1082    mMetadataFilled = 
false;
 
 1083  mRasterLayer->
setKeywordList( mLayerKeywordListLineEdit->text() );
 
 1085  if ( mRasterLayer->
dataUrl() != mLayerDataUrlLineEdit->text() )
 
 1086    mMetadataFilled = 
false;
 
 1087  mRasterLayer->
setDataUrl( mLayerDataUrlLineEdit->text() );
 
 1089  if ( mRasterLayer->
dataUrlFormat() != mLayerDataUrlFormatComboBox->currentText() )
 
 1090    mMetadataFilled = 
false;
 
 1091  mRasterLayer->
setDataUrlFormat( mLayerDataUrlFormatComboBox->currentText() );
 
 1094  if ( mRasterLayer->
attribution() != mLayerAttributionLineEdit->text() )
 
 1095    mMetadataFilled = 
false;
 
 1096  mRasterLayer->
setAttribution( mLayerAttributionLineEdit->text() );
 
 1098  if ( mRasterLayer->
attributionUrl() != mLayerAttributionUrlLineEdit->text() )
 
 1099    mMetadataFilled = 
false;
 
 1103  QList<QgsMapLayerServerProperties::MetadataUrl> metaUrls;
 
 1104  for ( 
int row = 0; row < mMetadataUrlModel->rowCount() ; row++ )
 
 1107    metaUrl.
url = mMetadataUrlModel->item( row, 0 )->text();
 
 1108    metaUrl.
type = mMetadataUrlModel->item( row, 1 )->text();
 
 1109    metaUrl.
format = mMetadataUrlModel->item( row, 2 )->text();
 
 1110    metaUrls.append( metaUrl );
 
 1111    mMetadataFilled = 
false;
 
 1115  if ( mRasterLayer->
legendUrl() != mLayerLegendUrlLineEdit->text() )
 
 1116    mMetadataFilled = 
false;
 
 1117  mRasterLayer->
setLegendUrl( mLayerLegendUrlLineEdit->text() );
 
 1119  if ( mRasterLayer->
legendUrlFormat() != mLayerLegendUrlFormatComboBox->currentText() )
 
 1120    mMetadataFilled = 
false;
 
 1123  if ( !mWMSPrintLayerLineEdit->text().isEmpty() )
 
 1125    mRasterLayer->
setCustomProperty( QStringLiteral( 
"WMSPrintLayer" ), mWMSPrintLayerLineEdit->text() );
 
 1128  mRasterLayer->
setCustomProperty( 
"WMSPublishDataSourceUrl", mPublishDataSourceUrlCheckBox->isChecked() );
 
 1129  mRasterLayer->
setCustomProperty( 
"WMSBackgroundLayer", mBackgroundLayerCheckBox->isChecked() );
 
 1146void QgsRasterLayerProperties::buttonBuildPyramids_clicked()
 
 1158  for ( 
int myCounterInt = 0; myCounterInt < lbxPyramidResolutions->count(); myCounterInt++ )
 
 1160    QListWidgetItem *myItem = lbxPyramidResolutions->item( myCounterInt );
 
 1162    myPyramidList[myCounterInt].setBuild( myItem->isSelected() || myPyramidList[myCounterInt].getExists() );
 
 1166  QString prefix = provider->
name() + 
"/driverOptions/_pyramids/";
 
 1168  QString resamplingMethod( cboResamplingMethod->currentData().toString() );
 
 1169  mySettings.
setValue( prefix + 
"resampling", resamplingMethod );
 
 1176  QApplication::setOverrideCursor( Qt::WaitCursor );
 
 1183  QApplication::restoreOverrideCursor();
 
 1184  mPyramidProgress->setValue( 0 );
 
 1185  buttonBuildPyramids->setEnabled( 
false );
 
 1186  if ( !res.isNull() )
 
 1188    if ( res == QLatin1String( 
"CANCELED" ) )
 
 1192    else if ( res == QLatin1String( 
"ERROR_WRITE_ACCESS" ) )
 
 1194      QMessageBox::warning( 
this, tr( 
"Building Pyramids" ),
 
 1195                            tr( 
"Write access denied. Adjust the file permissions and try again." ) );
 
 1197    else if ( res == QLatin1String( 
"ERROR_WRITE_FORMAT" ) )
 
 1199      QMessageBox::warning( 
this, tr( 
"Building Pyramids" ),
 
 1200                            tr( 
"The file was not writable. Some formats do not " 
 1201                                "support pyramid overviews. Consult the GDAL documentation if in doubt." ) );
 
 1203    else if ( res == QLatin1String( 
"FAILED_NOT_SUPPORTED" ) )
 
 1205      QMessageBox::warning( 
this, tr( 
"Building Pyramids" ),
 
 1206                            tr( 
"Building pyramid overviews is not supported on this type of raster." ) );
 
 1208    else if ( res == QLatin1String( 
"ERROR_JPEG_COMPRESSION" ) )
 
 1210      QMessageBox::warning( 
this, tr( 
"Building Pyramids" ),
 
 1211                            tr( 
"Building internal pyramid overviews is not supported on raster layers with JPEG compression and your current libtiff library." ) );
 
 1213    else if ( res == QLatin1String( 
"ERROR_VIRTUAL" ) )
 
 1215      QMessageBox::warning( 
this, tr( 
"Building Pyramids" ),
 
 1216                            tr( 
"Building pyramid overviews is not supported on this type of raster." ) );
 
 1224  lbxPyramidResolutions->clear();
 
 1232    if ( pyramid.getExists() )
 
 1234      lbxPyramidResolutions->addItem( 
new QListWidgetItem( myPyramidPixmap,
 
 1235                                      QString::number( pyramid.getXDim() ) + QStringLiteral( 
" x " ) +
 
 1236                                      QString::number( pyramid.getYDim() ) ) );
 
 1240      lbxPyramidResolutions->addItem( 
new QListWidgetItem( myNoPyramidPixmap,
 
 1241                                      QString::number( pyramid.getXDim() ) + QStringLiteral( 
" x " ) +
 
 1242                                      QString::number( pyramid.getYDim() ) ) );
 
 1251  updateInformationContent();
 
 1254void QgsRasterLayerProperties::urlClicked( 
const QUrl &url )
 
 1256  QFileInfo file( url.toLocalFile() );
 
 1257  if ( file.exists() && !file.isDir() )
 
 1260    QDesktopServices::openUrl( url );
 
 1263void QgsRasterLayerProperties::mRenderTypeComboBox_currentIndexChanged( 
int index )
 
 1265  if ( index < 0 || mDisableRenderTypeComboBoxCurrentIndexChanged || ! mRasterLayer->renderer() )
 
 1270  QString rendererName = mRenderTypeComboBox->itemData( index ).toString();
 
 1271  setRendererWidget( rendererName );
 
 1281void QgsRasterLayerProperties::setTransparencyCell( 
int row, 
int column, 
double value )
 
 1283  QgsDebugMsgLevel( QStringLiteral( 
"value = %1" ).arg( value, 0, 
'g', 17 ), 3 );
 
 1285  if ( !provider ) 
return;
 
 1288  if ( !renderer ) 
return;
 
 1289  int nBands = renderer->
usesBands().size();
 
 1291  QLineEdit *lineEdit = 
new QLineEdit();
 
 1292  lineEdit->setFrame( 
false ); 
 
 1294  lineEdit->setContentsMargins( 1, 1, 1, 1 );
 
 1296  if ( column == mRasterTransparencyWidget->tableTransparency->columnCount() - 1 )
 
 1300    lineEdit->setValidator( 
new QIntValidator( 
nullptr ) );
 
 1301    lineEdit->setText( QString::number( 
static_cast<int>( value ) ) );
 
 1306    QString valueString;
 
 1312        if ( !std::isnan( value ) )
 
 1315          valueString = QLocale().toString( v, 
'g' ) ;
 
 1319        lineEdit->setValidator( 
new QIntValidator( 
nullptr ) );
 
 1320        if ( !std::isnan( value ) )
 
 1322          valueString = QLocale().toString( 
static_cast<int>( value ) );
 
 1326    lineEdit->setText( valueString );
 
 1328  mRasterTransparencyWidget->tableTransparency->setCellWidget( row, column, lineEdit );
 
 1329  adjustTransparencyCellWidth( row, column );
 
 1331  if ( nBands == 1 && ( column == 0 || column == 1 ) )
 
 1333    connect( lineEdit, &QLineEdit::textEdited, 
this, &QgsRasterLayerProperties::transparencyCellTextEdited );
 
 1335  mRasterTransparencyWidget->tableTransparency->resizeColumnsToContents();
 
 1338void QgsRasterLayerProperties::setTransparencyCellValue( 
int row, 
int column, 
double value )
 
 1340  QLineEdit *lineEdit = 
dynamic_cast<QLineEdit *
>( mRasterTransparencyWidget->tableTransparency->cellWidget( row, column ) );
 
 1341  if ( !lineEdit ) 
return;
 
 1343  lineEdit->setText( QLocale().toString( v, 
'g' ) );
 
 1344  lineEdit->adjustSize();
 
 1345  adjustTransparencyCellWidth( row, column );
 
 1346  mRasterTransparencyWidget->tableTransparency->resizeColumnsToContents();
 
 1349double QgsRasterLayerProperties::transparencyCellValue( 
int row, 
int column )
 
 1351  QLineEdit *lineEdit = 
dynamic_cast<QLineEdit *
>( mRasterTransparencyWidget->tableTransparency->cellWidget( row, column ) );
 
 1352  if ( !lineEdit || lineEdit->text().isEmpty() )
 
 1354    return std::numeric_limits<double>::quiet_NaN();
 
 1356  return QLocale().toDouble( lineEdit->text() );
 
 1359void QgsRasterLayerProperties::adjustTransparencyCellWidth( 
int row, 
int column )
 
 1361  QLineEdit *lineEdit = 
dynamic_cast<QLineEdit *
>( mRasterTransparencyWidget->tableTransparency->cellWidget( row, column ) );
 
 1362  if ( !lineEdit ) 
return;
 
 1364  int width = std::max( lineEdit->fontMetrics().boundingRect( lineEdit->text() ).width() + 10, 100 );
 
 1365  width = std::max( width, mRasterTransparencyWidget->tableTransparency->columnWidth( column ) );
 
 1367  lineEdit->setFixedWidth( width );
 
 1370void QgsRasterLayerProperties::transparencyCellTextEdited( 
const QString &text )
 
 1379  int nBands = renderer->
usesBands().size();
 
 1382    QLineEdit *lineEdit = qobject_cast<QLineEdit *>( sender() );
 
 1383    if ( !lineEdit ) 
return;
 
 1386    for ( 
int r = 0; r < mRasterTransparencyWidget->tableTransparency->rowCount(); r++ )
 
 1388      for ( 
int c = 0; 
c < mRasterTransparencyWidget->tableTransparency->columnCount(); 
c++ )
 
 1390        if ( mRasterTransparencyWidget->tableTransparency->cellWidget( r, 
c ) == sender() )
 
 1397      if ( row != -1 ) 
break;
 
 1399    QgsDebugMsgLevel( QStringLiteral( 
"row = %1 column =%2" ).arg( row ).arg( column ), 3 );
 
 1403      QLineEdit *toLineEdit = 
dynamic_cast<QLineEdit *
>( mRasterTransparencyWidget->tableTransparency->cellWidget( row, 1 ) );
 
 1404      if ( !toLineEdit ) 
return;
 
 1405      bool toChanged = mTransparencyToEdited.value( row );
 
 1406      QgsDebugMsgLevel( QStringLiteral( 
"toChanged = %1" ).arg( toChanged ), 3 );
 
 1409        toLineEdit->setText( lineEdit->text() );
 
 1412    else if ( column == 1 )
 
 1414      setTransparencyToEdited( row );
 
 1419void QgsRasterLayerProperties::aboutToShowStyleMenu()
 
 1423  QMenu *m = qobject_cast<QMenu *>( sender() );
 
 1431void QgsRasterLayerProperties::syncToLayer()
 
 1436    setRendererWidget( renderer->
type() );
 
 1442void QgsRasterLayerProperties::setTransparencyToEdited( 
int row )
 
 1444  if ( row >= mTransparencyToEdited.size() )
 
 1446    mTransparencyToEdited.resize( row + 1 );
 
 1448  mTransparencyToEdited[row] = 
true;
 
 1455  bool isMetadataPanel = ( index == 
mOptStackedWidget->indexOf( mOptsPage_Metadata ) );
 
 1456  mBtnStyle->setVisible( ! isMetadataPanel );
 
 1457  mBtnMetadata->setVisible( isMetadataPanel );
 
 1459  if ( !mHistogramWidget )
 
 1471  if ( index == 
mOptStackedWidget->indexOf( mOptsPage_Information ) || !mMetadataFilled )
 
 1474    updateInformationContent();
 
 1480  button->blockSignals( 
true );
 
 1484  button->blockSignals( 
false );
 
 1487void QgsRasterLayerProperties::updateDataDefinedButtons()
 
 1489  const auto propertyOverrideButtons { findChildren< QgsPropertyOverrideButton * >() };
 
 1492    updateDataDefinedButton( button );
 
 1508void QgsRasterLayerProperties::updateProperty()
 
 1515void QgsRasterLayerProperties::toggleSaturationControls( 
int grayscaleMode )
 
 1518  if ( grayscaleMode == 0 )
 
 1520    sliderSaturation->setEnabled( 
true );
 
 1521    spinBoxSaturation->setEnabled( 
true );
 
 1525    sliderSaturation->setEnabled( 
false );
 
 1526    spinBoxSaturation->setEnabled( 
false );
 
 1530void QgsRasterLayerProperties::toggleColorizeControls( 
bool colorizeEnabled )
 
 1533  btnColorizeColor->setEnabled( colorizeEnabled );
 
 1534  sliderColorizeStrength->setEnabled( colorizeEnabled );
 
 1535  spinColorizeStrength->setEnabled( colorizeEnabled );
 
 1539QLinearGradient QgsRasterLayerProperties::redGradient()
 
 1543  QLinearGradient myGradient = QLinearGradient( mGradientWidth, 0, mGradientWidth, mGradientHeight );
 
 1544  myGradient.setColorAt( 0.0, QColor( 242, 14, 25, 190 ) );
 
 1545  myGradient.setColorAt( 0.5, QColor( 175, 29, 37, 190 ) );
 
 1546  myGradient.setColorAt( 1.0, QColor( 114, 17, 22, 190 ) );
 
 1549QLinearGradient QgsRasterLayerProperties::greenGradient()
 
 1553  QLinearGradient myGradient = QLinearGradient( mGradientWidth, 0, mGradientWidth, mGradientHeight );
 
 1554  myGradient.setColorAt( 0.0, QColor( 48, 168, 5, 190 ) );
 
 1555  myGradient.setColorAt( 0.8, QColor( 36, 122, 4, 190 ) );
 
 1556  myGradient.setColorAt( 1.0, QColor( 21, 71, 2, 190 ) );
 
 1559QLinearGradient QgsRasterLayerProperties::blueGradient()
 
 1563  QLinearGradient myGradient = QLinearGradient( mGradientWidth, 0, mGradientWidth, mGradientHeight );
 
 1564  myGradient.setColorAt( 0.0, QColor( 30, 0, 106, 190 ) );
 
 1565  myGradient.setColorAt( 0.2, QColor( 30, 72, 128, 190 ) );
 
 1566  myGradient.setColorAt( 1.0, QColor( 30, 223, 196, 190 ) );
 
 1569QLinearGradient QgsRasterLayerProperties::grayGradient()
 
 1573  QLinearGradient myGradient = QLinearGradient( mGradientWidth, 0, mGradientWidth, mGradientHeight );
 
 1574  myGradient.setColorAt( 0.0, QColor( 5, 5, 5, 190 ) );
 
 1575  myGradient.setColorAt( 0.8, QColor( 122, 122, 122, 190 ) );
 
 1576  myGradient.setColorAt( 1.0, QColor( 220, 220, 220, 190 ) );
 
 1579QLinearGradient QgsRasterLayerProperties::highlightGradient()
 
 1583  QLinearGradient myGradient = QLinearGradient( mGradientWidth, 0, mGradientWidth, mGradientHeight );
 
 1584  myGradient.setColorAt( 1.0, QColor( 255, 255, 255, 50 ) );
 
 1585  myGradient.setColorAt( 0.5, QColor( 255, 255, 255, 100 ) );
 
 1586  myGradient.setColorAt( 0.0, QColor( 255, 255, 255, 150 ) );
 
 1590void QgsRasterLayerProperties::addMetadataUrl()
 
 1592  const int row = mMetadataUrlModel->rowCount();
 
 1593  mMetadataUrlModel->setItem( row, 0, 
new QStandardItem( QLatin1String() ) );
 
 1594  mMetadataUrlModel->setItem( row, 1, 
new QStandardItem( QLatin1String() ) );
 
 1595  mMetadataUrlModel->setItem( row, 2, 
new QStandardItem( QLatin1String() ) );
 
 1598void QgsRasterLayerProperties::removeSelectedMetadataUrl()
 
 1600  const QModelIndexList selectedRows = tableViewMetadataUrl->selectionModel()->selectedRows();
 
 1601  if ( selectedRows.empty() )
 
 1603  mMetadataUrlModel->removeRow( selectedRows[0].row() );
 
 1614  bool defaultLoadedFlag = 
false;
 
 1617  if ( defaultLoadedFlag )
 
 1624    QMessageBox::information( 
this,
 
 1625                              tr( 
"Default Style" ),
 
 1637  bool defaultSavedFlag = 
false;
 
 1645  if ( !defaultSavedFlag )
 
 1648    QMessageBox::information( 
this,
 
 1649                              tr( 
"Default Style" ),
 
 1659  QString lastUsedDir = settings.
value( QStringLiteral( 
"style/lastStyleDir" ), QDir::homePath() ).toString();
 
 1661  QString fileName = QFileDialog::getOpenFileName(
 
 1663                       tr( 
"Load layer properties from style file" ),
 
 1665                       tr( 
"QGIS Layer Style File" ) + 
" (*.qml)" );
 
 1666  if ( fileName.isEmpty() )
 
 1670  if ( !fileName.endsWith( QLatin1String( 
".qml" ), Qt::CaseInsensitive ) )
 
 1671    fileName += QLatin1String( 
".qml" );
 
 1675  bool defaultLoadedFlag = 
false;
 
 1676  QString message = mRasterLayer->
loadNamedStyle( fileName, defaultLoadedFlag );
 
 1677  if ( defaultLoadedFlag )
 
 1679    settings.
setValue( QStringLiteral( 
"style/lastStyleDir" ), QFileInfo( fileName ).absolutePath() );
 
 1684    QMessageBox::information( 
this, tr( 
"Save Style" ), message );
 
 1692  QString lastUsedDir = settings.
value( QStringLiteral( 
"style/lastStyleDir" ), QDir::homePath() ).toString();
 
 1694  QString selectedFilter;
 
 1695  QString outputFileName = QFileDialog::getSaveFileName(
 
 1697                             tr( 
"Save layer properties as style file" ),
 
 1699                             tr( 
"QGIS Layer Style File" ) + 
" (*.qml)" + 
";;" + tr( 
"Styled Layer Descriptor" ) + 
" (*.sld)",
 
 1701  if ( outputFileName.isEmpty() )
 
 1706  if ( selectedFilter.contains( QStringLiteral( 
".qml" ), Qt::CaseInsensitive ) )
 
 1709    type = StyleType::QML;
 
 1714    type = StyleType::SLD;
 
 1720  bool defaultLoadedFlag = 
false;
 
 1726      message = mRasterLayer->
saveNamedStyle( outputFileName, defaultLoadedFlag );
 
 1731      message = mRasterLayer->
saveSldStyle( outputFileName, defaultLoadedFlag );
 
 1735  if ( defaultLoadedFlag )
 
 1737    settings.
setValue( QStringLiteral( 
"style/lastStyleDir" ), QFileInfo( outputFileName ).absolutePath() );
 
 1741    QMessageBox::information( 
this, tr( 
"Save Style" ), message );
 
 1744void QgsRasterLayerProperties::restoreWindowModality()
 
 1759void QgsRasterLayerProperties::loadMetadata()
 
 1762  QString myLastUsedDir = myQSettings.
value( QStringLiteral( 
"style/lastStyleDir" ), QDir::homePath() ).toString();
 
 1764  QString myFileName = QFileDialog::getOpenFileName( 
this, tr( 
"Load layer metadata from metadata file" ), myLastUsedDir,
 
 1765                       tr( 
"QGIS Layer Metadata File" ) + 
" (*.qmd)" );
 
 1766  if ( myFileName.isNull() )
 
 1772  bool defaultLoadedFlag = 
false;
 
 1776  if ( defaultLoadedFlag )
 
 1783    QMessageBox::warning( 
this, tr( 
"Load Metadata" ), myMessage );
 
 1786  QFileInfo myFI( myFileName );
 
 1787  QString myPath = myFI.path();
 
 1788  myQSettings.
setValue( QStringLiteral( 
"style/lastStyleDir" ), myPath );
 
 1793void QgsRasterLayerProperties::saveMetadataAs()
 
 1796  QString myLastUsedDir = myQSettings.
value( QStringLiteral( 
"style/lastStyleDir" ), QDir::homePath() ).toString();
 
 1798  QString myOutputFileName = QFileDialog::getSaveFileName( 
this, tr( 
"Save Layer Metadata as QMD" ),
 
 1799                             myLastUsedDir, tr( 
"QMD File" ) + 
" (*.qmd)" );
 
 1800  if ( myOutputFileName.isNull() ) 
 
 1813  bool defaultLoadedFlag = 
false;
 
 1814  QString message = mRasterLayer->
saveNamedMetadata( myOutputFileName, defaultLoadedFlag );
 
 1815  if ( defaultLoadedFlag )
 
 1816    myQSettings.
setValue( QStringLiteral( 
"style/lastStyleDir" ), QFileInfo( myOutputFileName ).absolutePath() );
 
 1818    QMessageBox::information( 
this, tr( 
"Save Metadata" ), message );
 
 1821void QgsRasterLayerProperties::saveDefaultMetadata()
 
 1825  bool defaultSavedFlag = 
false;
 
 1827  if ( !defaultSavedFlag )
 
 1829    QMessageBox::warning( 
this, tr( 
"Default Metadata" ), errorMsg );
 
 1833void QgsRasterLayerProperties::loadDefaultMetadata()
 
 1835  bool defaultLoadedFlag = 
false;
 
 1838  if ( defaultLoadedFlag )
 
 1844    QMessageBox::information( 
this, tr( 
"Default Metadata" ), myMessage );
 
 1849void QgsRasterLayerProperties::toggleBuildPyramidsButton()
 
 1851  if ( lbxPyramidResolutions->selectedItems().empty() )
 
 1853    buttonBuildPyramids->setEnabled( 
false );
 
 1857    buttonBuildPyramids->setEnabled( 
true );
 
 1861void QgsRasterLayerProperties::mResetColorRenderingBtn_clicked()
 
 1863  mBlendModeComboBox->setBlendMode( QPainter::CompositionMode_SourceOver );
 
 1864  mSliderBrightness->setValue( 0 );
 
 1865  mSliderContrast->setValue( 0 );
 
 1866  mGammaSpinBox->setValue( 1.0 );
 
 1867  sliderSaturation->setValue( 0 );
 
 1869  mColorizeCheck->setChecked( 
false );
 
 1870  sliderColorizeStrength->setValue( 100 );
 
 1871  mInvertColorsCheck->setChecked( 
false );
 
 1874bool QgsRasterLayerProperties::rasterIsMultiBandColor()
 
 1879void QgsRasterLayerProperties::updateInformationContent()
 
 1883  const QString html { mRasterLayer->
htmlMetadata().replace( QLatin1String( 
"<head>" ), QStringLiteral( R
"raw(<head><style type="text/css">%1</style>)raw" ) ).arg( myStyle ) }; 
 1884  mMetadataViewer->setHtml( html ); 
 1885  mMetadataFilled = true;
 
 1888void QgsRasterLayerProperties::onCancel()
 
 1892  if ( mRasterAttributeTableWidget && mRasterAttributeTableWidget->
isDirty() )
 
 1894    mRasterAttributeTableWidget->
setEditable( 
false, 
false );
 
 1901    QDomDocument doc( QStringLiteral( 
"qgis" ) );
 
 1902    int errorLine, errorColumn;
 
 1903    doc.setContent( mOldStyle.
xmlData(), 
false, &myMessage, &errorLine, &errorColumn );
 
 1907  if ( mBackupCrs != mRasterLayer->
crs() )
 
 1908    mRasterLayer->
setCrs( mBackupCrs );
 
 1911void QgsRasterLayerProperties::showHelp()
 
 1913  const QVariant helpPage = mOptionsStackedWidget->currentWidget()->property( 
"helpPage" );
 
 1915  if ( helpPage.isValid() )
 
 1921    QgsHelp::openHelp( QStringLiteral( 
"working_with_raster/raster_properties.html" ) );
 
 1925void QgsRasterLayerProperties::updateGammaSpinBox( 
int value )
 
 1930void QgsRasterLayerProperties::updateGammaSlider( 
double value )
 
 1939  if ( obj == mMapTipPreviewContainer && ev->type() == QEvent::Resize )
 
 1943  return QgsOptionsDialogBase::eventFilter( obj, ev );
 
 1946void QgsRasterLayerProperties::initMapTipPreview()
 
 1949  mMapTipSplitter->setSizes( { 400, 200 } );
 
 1951  mMapTipPreviewContainer->installEventFilter( 
this );
 
 1955  mMapTipPreview = 
new QgsWebView( mMapTipPreviewContainer );
 
 1958  mMapTipPreview->page()->setLinkDelegationPolicy( QWebPage::DelegateAllLinks );
 
 1959  mMapTipPreview->setContextMenuPolicy( Qt::NoContextMenu ); 
 
 1960  connect( mMapTipPreview, &QWebView::loadFinished, 
this, &QgsRasterLayerProperties::resizeMapTip );
 
 1963  mMapTipPreview->page()->settings()->setAttribute( QWebSettings::DeveloperExtrasEnabled, 
true );
 
 1964  mMapTipPreview->page()->settings()->setAttribute( QWebSettings::JavascriptEnabled, 
true );
 
 1965  mMapTipPreview->page()->settings()->setAttribute( QWebSettings::LocalStorageEnabled, 
true );
 
 1968  mMapTipPreview->page()->mainFrame()->setScrollBarPolicy( Qt::Horizontal, Qt::ScrollBarAlwaysOff );
 
 1969  mMapTipPreview->page()->mainFrame()->setScrollBarPolicy( Qt::Vertical, Qt::ScrollBarAlwaysOff );
 
 1973  connect( mMapTipWidget, &QgsCodeEditorHTML::textChanged, 
this, &QgsRasterLayerProperties::updateMapTipPreview );
 
 1976void QgsRasterLayerProperties::updateMapTipPreview()
 
 1978  mMapTipPreview->setMaximumSize( mMapTipPreviewContainer->width(), mMapTipPreviewContainer->height() );
 
 1980  mMapTipPreview->setHtml( htmlContent );
 
 1983void QgsRasterLayerProperties::resizeMapTip()
 
 1986  mMapTipPreview->setMaximumSize( mMapTipPreviewContainer->width(), mMapTipPreviewContainer->height() );
 
 1989  const QWebElement container = mMapTipPreview->page()->mainFrame()->findFirstElement(
 
 1990                                  QStringLiteral( 
"#QgsWebViewContainer" ) );
 
 1991  const int width = container.geometry().width();
 
 1992  const int height = container.geometry().height();
 
 1993  mMapTipPreview->resize( width, height );
 
 1996  mMapTipPreview->move( ( mMapTipPreviewContainer->width() - mMapTipPreview->width() ) / 2,
 
 1997                        ( mMapTipPreviewContainer->height() - mMapTipPreview->height() ) / 2 );
 
 2000  mMapTipPreview->adjustSize();
 
RasterPyramidFormat
Raster pyramid formats.
 
@ 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)
 
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.
 
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).
 
@ WKT_PREFERRED
Preferred format, matching the most recent WKT ISO standard. Currently an alias to WKT2_2019,...
 
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.
 
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...
 
void progressChanged(double progress)
Emitted when the feedback object reports a progress change.
 
static QString ensureFileNameHasExtension(const QString &fileName, const QStringList &extensions)
Ensures that a fileName ends with an extension from the provided list of extensions.
 
static QgsProviderSourceWidgetProviderRegistry * sourceWidgetProviderRegistry()
Returns the registry of provider source widget providers.
 
static QgsNative * nativePlatformInterface()
Returns the global native interface, which offers abstraction to the host OS's underlying public inte...
 
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
 
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
 
QString currentStyle() const
Returns name of the current style.
 
QgsMapLayerStyle style(const QString &name) const
Returns data of a stored style - accessed by its unique name.
 
void currentStyleChanged(const QString ¤tName)
Emitted when the current style has been changed.
 
QString xmlData() const
Returns XML content of the style.
 
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.
 
virtual bool importNamedStyle(QDomDocument &doc, QString &errorMsg, QgsMapLayer::StyleCategories categories=QgsMapLayer::AllStyleCategories)
Import the properties of this layer from a QDomDocument.
 
void setAbstract(const QString &abstract)
Sets the abstract of the layer used by QGIS Server in GetCapabilities request.
 
virtual QString saveSldStyle(const QString &uri, bool &resultFlag) const
Saves the properties of this layer to an SLD format file.
 
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.
 
virtual QString loadDefaultStyle(bool &resultFlag)
Retrieve the default style for this layer if one exists (either as a .qml file on disk or as a record...
 
virtual QString loadNamedMetadata(const QString &uri, bool &resultFlag)
Retrieve a named metadata for this layer if one exists (either as a .qmd file on disk or as a record ...
 
bool hasAutoRefreshEnabled() const
Returns true if auto refresh is enabled for the layer.
 
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 setAutoRefreshEnabled(bool enabled)
Sets whether auto refresh is enabled for the layer.
 
void setMaximumScale(double scale)
Sets the maximum map scale (i.e.
 
QgsLayerMetadata metadata
 
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.
 
virtual QString saveDefaultMetadata(bool &resultFlag)
Save the current metadata of this layer as the default metadata (either as a .qmd file on disk or as ...
 
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.
 
virtual QString loadNamedStyle(const QString &uri, bool &resultFlag, QgsMapLayer::StyleCategories categories=QgsMapLayer::AllStyleCategories)
Retrieve a named style for this layer if one exists (either as a .qml file on disk or as a record in ...
 
void emitStyleChanged()
Triggers an emission of the styleChanged() signal.
 
static QString extensionPropertyType(PropertyType type)
Returns the extension of a Property.
 
void setName(const QString &name)
Set the display name of the layer.
 
void setAutoRefreshInterval(int interval)
Sets the auto refresh interval (in milliseconds) for the layer.
 
QString saveNamedMetadata(const QString &uri, bool &resultFlag)
Save the current metadata of this layer as a named metadata (either as a .qmd file on disk or as a re...
 
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.
 
virtual QString saveNamedStyle(const QString &uri, bool &resultFlag, StyleCategories categories=AllStyleCategories)
Save the properties of this layer as a named style (either as a .qml file on disk or as a record in t...
 
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.
 
virtual QString metadataUri() const
Retrieve the metadata URI for this layer (either as a .qmd file on disk or as a record in the users s...
 
virtual QString saveDefaultStyle(bool &resultFlag, StyleCategories categories)
Save the properties of this layer as the default style (either as a .qml file on disk or as a record ...
 
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.
 
A base dialog for options and properties dialogs that offers vertical tabs.
 
virtual void optionsStackedWidget_CurrentChanged(int index)
Select relevant tab on current page change.
 
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).
 
QgsProperty property(int key) const override
Returns a matching property from the collection, if one exists.
 
void setProperty(int key, const QgsProperty &property)
Adds a property to the collection and takes ownership of it.
 
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.
 
StyleType
enumeration for the different types of style
 
void saveDefaultStyle()
Saves the default style when appropriate button is pressed.
 
void loadDefaultStyle()
Loads the default style when appropriate button is pressed.
 
void saveStyleAs()
Saves a style when appriate button is pressed.
 
void addPropertiesPageFactory(const QgsMapLayerConfigWidgetFactory *factory)
Adds a properties page factory to the raster layer properties dialog.
 
void loadStyle()
Loads a saved 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
 
void optionsStackedWidget_CurrentChanged(int index) override
auto slot executed when the active page in the main widget stack is changed
 
QgsExpressionContext createExpressionContext() const override
This method needs to be reimplemented in all classes which implement this interface and return an exp...
 
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.
 
static QgsPropertiesDefinition propertyDefinitions()
Returns the definitions for data defined properties available for use in raster pipes.
 
Property
Data definable properties.
 
@ RendererOpacity
Raster renderer global opacity.
 
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
 
#define Q_NOWARN_DEPRECATED_POP
 
#define Q_NOWARN_DEPRECATED_PUSH
 
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