Skip to content

Commit beb5d00

Browse files
committed
Fix crashes in styling dock when dealing with WMTS / XYZ
1 parent 2d9e72d commit beb5d00

File tree

2 files changed

+32
-17
lines changed

2 files changed

+32
-17
lines changed

src/app/qgslayerstylingwidget.cpp

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
#include "qgsrenderer.h"
3939
#include "qgsrendererregistry.h"
4040
#include "qgsmaplayerregistry.h"
41+
#include "qgsrasterdataprovider.h"
4142
#include "qgsrasterlayer.h"
4243
#include "qgsmaplayerconfigwidget.h"
4344
#include "qgsmaplayerstylemanagerwidget.h"
@@ -171,10 +172,14 @@ void QgsLayerStylingWidget::setLayer( QgsMapLayer *layer )
171172
transparencyItem->setToolTip( tr( "Transparency" ) );
172173
transparencyItem->setData( Qt::UserRole, RasterTransparency );
173174
mOptionsListWidget->addItem( transparencyItem );
174-
QListWidgetItem* histogramItem = new QListWidgetItem( QgsApplication::getThemeIcon( "propertyicons/histogram.png" ), QString() );
175-
histogramItem->setData( Qt::UserRole, RasterHistogram );
176-
mOptionsListWidget->addItem( histogramItem );
177-
histogramItem->setToolTip( tr( "Histogram" ) );
175+
176+
if ( static_cast<QgsRasterLayer*>( layer )->dataProvider()->capabilities() & QgsRasterDataProvider::Size )
177+
{
178+
QListWidgetItem* histogramItem = new QListWidgetItem( QgsApplication::getThemeIcon( "propertyicons/histogram.png" ), QString() );
179+
histogramItem->setData( Qt::UserRole, RasterHistogram );
180+
mOptionsListWidget->addItem( histogramItem );
181+
histogramItem->setToolTip( tr( "Histogram" ) );
182+
}
178183
}
179184

180185
Q_FOREACH ( QgsMapLayerConfigWidgetFactory* factory, mPageFactories )
@@ -392,21 +397,24 @@ void QgsLayerStylingWidget::updateCurrentWidgetLayer()
392397
}
393398
case 2: // Histogram
394399
{
395-
if ( mRasterStyleWidget )
400+
if ( rlayer->dataProvider()->capabilities() & QgsRasterDataProvider::Size )
396401
{
397-
mRasterStyleWidget->deleteLater();
398-
delete mRasterStyleWidget;
402+
if ( mRasterStyleWidget )
403+
{
404+
mRasterStyleWidget->deleteLater();
405+
delete mRasterStyleWidget;
406+
}
407+
mRasterStyleWidget = new QgsRendererRasterPropertiesWidget( rlayer, mMapCanvas, mWidgetStack );
408+
mRasterStyleWidget->syncToLayer( rlayer );
409+
connect( mRasterStyleWidget, SIGNAL( widgetChanged() ), this, SLOT( autoApply() ) );
410+
411+
QgsRasterHistogramWidget* widget = new QgsRasterHistogramWidget( rlayer, mWidgetStack );
412+
connect( widget, SIGNAL( widgetChanged() ), this, SLOT( autoApply() ) );
413+
QString name = mRasterStyleWidget->currentRenderWidget()->renderer()->type();
414+
widget->setRendererWidget( name, mRasterStyleWidget->currentRenderWidget() );
415+
416+
mWidgetStack->addMainPanel( widget );
399417
}
400-
mRasterStyleWidget = new QgsRendererRasterPropertiesWidget( rlayer, mMapCanvas, mWidgetStack );
401-
mRasterStyleWidget->syncToLayer( rlayer );
402-
connect( mRasterStyleWidget, SIGNAL( widgetChanged() ), this, SLOT( autoApply() ) );
403-
404-
QgsRasterHistogramWidget* widget = new QgsRasterHistogramWidget( rlayer, mWidgetStack );
405-
connect( widget, SIGNAL( widgetChanged() ), this, SLOT( autoApply() ) );
406-
QString name = mRasterStyleWidget->currentRenderWidget()->renderer()->type();
407-
widget->setRendererWidget( name, mRasterStyleWidget->currentRenderWidget() );
408-
409-
mWidgetStack->addMainPanel( widget );
410418
break;
411419
}
412420
default:

src/gui/raster/qgsrastertransparencywidget.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,13 @@ void QgsRasterTransparencyWidget::syncToLayer()
7676
QgsRasterRenderer* renderer = mRasterLayer->renderer();
7777
if ( provider )
7878
{
79+
if ( provider->dataType( 1 ) == Qgis::ARGB32
80+
|| provider->dataType( 1 ) == Qgis::ARGB32_Premultiplied )
81+
{
82+
gboxNoDataValue->setEnabled( false );
83+
gboxCustomTransparency->setEnabled( false );
84+
}
85+
7986
cboxTransparencyBand->addItem( tr( "None" ), -1 );
8087
int nBands = provider->bandCount();
8188
QString bandName;

0 commit comments

Comments
 (0)