Skip to content

Commit 4f4a3ba

Browse files
committed
Enable load style for raster renderers
1 parent 61ceec5 commit 4f4a3ba

13 files changed

+148
-114
lines changed

src/app/qgsrasterlayerproperties.cpp

Lines changed: 23 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,22 @@ void QgsRasterLayerProperties::populateTransparencyTable()
399399
tableTransparency->resizeRowsToContents();
400400
}
401401

402+
void QgsRasterLayerProperties::setRendererWidget( const QString& rendererName )
403+
{
404+
delete mRendererWidget;
405+
mRendererWidget = 0;
406+
407+
QgsRasterRendererRegistryEntry rendererEntry;
408+
if ( QgsRasterRendererRegistry::instance()->rendererData( rendererName, rendererEntry ) )
409+
{
410+
if ( rendererEntry.widgetCreateFunction ) //single band color data renderer e.g. has no widget
411+
{
412+
mRendererWidget = ( *rendererEntry.widgetCreateFunction )( mRasterLayer );
413+
mRendererStackedWidget->addWidget( mRendererWidget );
414+
}
415+
}
416+
}
417+
402418
/**
403419
@note moved from ctor
404420
@@ -940,30 +956,13 @@ void QgsRasterLayerProperties::on_buttonBuildPyramids_clicked()
940956

941957
void QgsRasterLayerProperties::on_mRenderTypeComboBox_currentIndexChanged( int index )
942958
{
943-
delete mRendererWidget;
944-
mRendererWidget = 0;
945-
946959
if ( index < 0 )
947960
{
948961
return;
949962
}
950963

951964
QString rendererName = mRenderTypeComboBox->itemData( index ).toString();
952-
953-
QgsRasterRendererRegistryEntry rendererEntry;
954-
if ( QgsRasterRendererRegistry::instance()->rendererData( rendererName, rendererEntry ) )
955-
{
956-
if ( rendererEntry.widgetCreateFunction )
957-
{
958-
mRendererWidget = ( *rendererEntry.widgetCreateFunction )( mRasterLayer );
959-
mRendererStackedWidget->addWidget( mRendererWidget );
960-
}
961-
else //single band color data renderer e.g. has no widget
962-
{
963-
delete mRendererWidget;
964-
mRendererWidget = 0;
965-
}
966-
}
965+
setRendererWidget( rendererName );
967966
}
968967

969968
void QgsRasterLayerProperties::on_pbnAddValuesFromDisplay_clicked()
@@ -1525,6 +1524,12 @@ void QgsRasterLayerProperties::on_pbnLoadStyle_clicked()
15251524
}
15261525

15271526
settings.setValue( "style/lastStyleDir", QFileInfo( fileName ).absolutePath() );
1527+
QgsRasterRenderer* renderer = mRasterLayer->renderer();
1528+
if ( renderer )
1529+
{
1530+
setRendererWidget( renderer->type() );
1531+
}
1532+
mRasterLayer->triggerRepaint();
15281533
}
15291534

15301535

src/app/qgsrasterlayerproperties.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,7 @@ class QgsRasterLayerProperties : public QDialog, private Ui::QgsRasterLayerPrope
139139
/** \brief Clear the current transparency table and populate the table with the correct types for current drawing mode and data type*/
140140
void populateTransparencyTable();
141141

142-
/**Restores the state of the colormap tab*/
143-
void syncColormapTab();
142+
void setRendererWidget( const QString& rendererName );
144143

145144
//@TODO we should move these gradient generators somewhere more generic
146145
//so they can be used generically throughut the app

src/core/raster/qgscolorrampshader.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class CORE_EXPORT QgsColorRampShader : public QgsRasterShaderFunction
6565
QList<QgsColorRampShader::ColorRampItem> colorRampItemList() const {return mColorRampItemList;}
6666

6767
/** \brief Get the color ramp type */
68-
QgsColorRampShader::ColorRamp_TYPE colorRampType() {return mColorRampType;}
68+
QgsColorRampShader::ColorRamp_TYPE colorRampType() const {return mColorRampType;}
6969

7070
/** \brief Get the color ramp type as a string */
7171
QString colorRampTypeAsQString();

src/core/raster/qgsrastershader.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class CORE_EXPORT QgsRasterShader
4747
double minimumValue() { return mMinimumValue; }
4848

4949
QgsRasterShaderFunction* rasterShaderFunction() { return mRasterShaderFunction; }
50+
const QgsRasterShaderFunction* rasterShaderFunction() const { return mRasterShaderFunction; }
5051

5152
/*
5253
*

src/core/raster/qgssinglebandpseudocolorrenderer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ class QgsSingleBandPseudoColorRenderer: public QgsRasterRenderer
3737
/**Takes ownership of the shader*/
3838
void setShader( QgsRasterShader* shader );
3939
QgsRasterShader* shader() { return mShader; }
40+
const QgsRasterShader* shader() const { return mShader; }
4041

4142
void writeXML( QDomDocument& doc, QDomElement& parentElem ) const;
4243

src/gui/raster/qgsmultibandcolorrendererwidget.cpp

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -51,23 +51,7 @@ QgsMultiBandColorRendererWidget::QgsMultiBandColorRendererWidget( QgsRasterLayer
5151
mBlueBandComboBox->addItem( provider->colorInterpretationName( i ), i );
5252
}
5353

54-
QgsMultiBandColorRenderer* r = dynamic_cast<QgsMultiBandColorRenderer*>( mRasterLayer->renderer() );
55-
if ( r )
56-
{
57-
mRedBandComboBox->setCurrentIndex( mRedBandComboBox->findData( r->redBand() ) );
58-
mGreenBandComboBox->setCurrentIndex( mGreenBandComboBox->findData( r->greenBand() ) );
59-
mBlueBandComboBox->setCurrentIndex( mBlueBandComboBox->findData( r->blueBand() ) );
60-
61-
setMinMaxValue( r->redContrastEnhancement(), mRedMinLineEdit, mRedMaxLineEdit );
62-
setMinMaxValue( r->greenContrastEnhancement(), mGreenMinLineEdit, mGreenMaxLineEdit );
63-
setMinMaxValue( r->blueContrastEnhancement(), mBlueMinLineEdit, mBlueMaxLineEdit );
64-
}
65-
else
66-
{
67-
mRedBandComboBox->setCurrentIndex( mRedBandComboBox->findText( tr( "Red" ) ) );
68-
mGreenBandComboBox->setCurrentIndex( mGreenBandComboBox->findText( tr( "Green" ) ) );
69-
mBlueBandComboBox->setCurrentIndex( mBlueBandComboBox->findText( tr( "Blue" ) ) );
70-
}
54+
setFromRenderer( mRasterLayer->renderer() );
7155
}
7256
}
7357

@@ -256,3 +240,24 @@ void QgsMultiBandColorRendererWidget::loadMinMaxValueForBand( int band, QLineEdi
256240
minEdit->setText( QString::number( minVal ) );
257241
maxEdit->setText( QString::number( maxVal ) );
258242
}
243+
244+
void QgsMultiBandColorRendererWidget::setFromRenderer( const QgsRasterRenderer* r )
245+
{
246+
const QgsMultiBandColorRenderer* mbcr = dynamic_cast<const QgsMultiBandColorRenderer*>( r );
247+
if ( mbcr )
248+
{
249+
mRedBandComboBox->setCurrentIndex( mRedBandComboBox->findData( mbcr->redBand() ) );
250+
mGreenBandComboBox->setCurrentIndex( mGreenBandComboBox->findData( mbcr->greenBand() ) );
251+
mBlueBandComboBox->setCurrentIndex( mBlueBandComboBox->findData( mbcr->blueBand() ) );
252+
253+
setMinMaxValue( mbcr->redContrastEnhancement(), mRedMinLineEdit, mRedMaxLineEdit );
254+
setMinMaxValue( mbcr->greenContrastEnhancement(), mGreenMinLineEdit, mGreenMaxLineEdit );
255+
setMinMaxValue( mbcr->blueContrastEnhancement(), mBlueMinLineEdit, mBlueMaxLineEdit );
256+
}
257+
else
258+
{
259+
mRedBandComboBox->setCurrentIndex( mRedBandComboBox->findText( tr( "Red" ) ) );
260+
mGreenBandComboBox->setCurrentIndex( mGreenBandComboBox->findText( tr( "Green" ) ) );
261+
mBlueBandComboBox->setCurrentIndex( mBlueBandComboBox->findText( tr( "Blue" ) ) );
262+
}
263+
}

src/gui/raster/qgsmultibandcolorrendererwidget.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ class QgsMultiBandColorRendererWidget: public QgsRasterRendererWidget, private U
3838

3939
QgsRasterRenderer* renderer();
4040

41+
void setFromRenderer( const QgsRasterRenderer* r );
42+
4143
private slots:
4244
void on_mLoadPushButton_clicked();
4345

src/gui/raster/qgspalettedrendererwidget.cpp

Lines changed: 34 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -39,35 +39,7 @@ QgsPalettedRendererWidget::QgsPalettedRendererWidget( QgsRasterLayer* layer ): Q
3939
mBandComboBox->addItem( provider->colorInterpretationName( i ), i );
4040
}
4141

42-
QgsPalettedRasterRenderer* r = dynamic_cast<QgsPalettedRasterRenderer*>( mRasterLayer->renderer() );
43-
if ( r )
44-
{
45-
//read values and colors and fill into tree widget
46-
int nColors = r->nColors();
47-
QColor* colors = r->colors();
48-
for ( int i = 0; i < nColors; ++i )
49-
{
50-
QTreeWidgetItem* item = new QTreeWidgetItem( mTreeWidget );
51-
item->setText( 0, QString::number( i ) );
52-
item->setBackground( 1, QBrush( colors[i] ) );
53-
}
54-
delete[] colors;
55-
}
56-
else
57-
{
58-
//read default palette settings from layer
59-
QList<QgsColorRampShader::ColorRampItem>* itemList =
60-
mRasterLayer->colorTable( mBandComboBox->itemData( mBandComboBox->currentIndex() ).toInt() );
61-
QList<QgsColorRampShader::ColorRampItem>::const_iterator itemIt = itemList->constBegin();
62-
int index = 0;
63-
for ( ; itemIt != itemList->constEnd(); ++itemIt )
64-
{
65-
QTreeWidgetItem* item = new QTreeWidgetItem( mTreeWidget );
66-
item->setText( 0, QString::number( index ) );
67-
item->setBackground( 1, QBrush( itemIt->color ) );
68-
++index;
69-
}
70-
}
42+
setFromRenderer( mRasterLayer->renderer() );
7143
}
7244
}
7345

@@ -99,3 +71,36 @@ void QgsPalettedRendererWidget::on_mTreeWidget_itemDoubleClicked( QTreeWidgetIte
9971
}
10072
}
10173
}
74+
75+
void QgsPalettedRendererWidget::setFromRenderer( const QgsRasterRenderer* r )
76+
{
77+
const QgsPalettedRasterRenderer* pr = dynamic_cast<const QgsPalettedRasterRenderer*>( r );
78+
if ( pr )
79+
{
80+
//read values and colors and fill into tree widget
81+
int nColors = pr->nColors();
82+
QColor* colors = pr->colors();
83+
for ( int i = 0; i < nColors; ++i )
84+
{
85+
QTreeWidgetItem* item = new QTreeWidgetItem( mTreeWidget );
86+
item->setText( 0, QString::number( i ) );
87+
item->setBackground( 1, QBrush( colors[i] ) );
88+
}
89+
delete[] colors;
90+
}
91+
else
92+
{
93+
//read default palette settings from layer
94+
QList<QgsColorRampShader::ColorRampItem>* itemList =
95+
mRasterLayer->colorTable( mBandComboBox->itemData( mBandComboBox->currentIndex() ).toInt() );
96+
QList<QgsColorRampShader::ColorRampItem>::const_iterator itemIt = itemList->constBegin();
97+
int index = 0;
98+
for ( ; itemIt != itemList->constEnd(); ++itemIt )
99+
{
100+
QTreeWidgetItem* item = new QTreeWidgetItem( mTreeWidget );
101+
item->setText( 0, QString::number( index ) );
102+
item->setBackground( 1, QBrush( itemIt->color ) );
103+
++index;
104+
}
105+
}
106+
}

src/gui/raster/qgspalettedrendererwidget.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ class QgsPalettedRendererWidget: public QgsRasterRendererWidget, private Ui::Qgs
3434

3535
QgsRasterRenderer* renderer();
3636

37+
void setFromRenderer( const QgsRasterRenderer* r );
38+
3739
private slots:
3840
void on_mTreeWidget_itemDoubleClicked( QTreeWidgetItem * item, int column );
3941
};

src/gui/raster/qgssinglebandgrayrendererwidget.cpp

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -46,19 +46,7 @@ QgsSingleBandGrayRendererWidget::QgsSingleBandGrayRendererWidget( QgsRasterLayer
4646
mContrastEnhancementComboBox->addItem( tr( "Stretch and clip to MinMax" ), 2 );
4747
mContrastEnhancementComboBox->addItem( tr( "Clip to MinMax" ), 3 );
4848

49-
QgsSingleBandGrayRenderer* r = dynamic_cast<QgsSingleBandGrayRenderer*>( layer->renderer() );
50-
if ( r )
51-
{
52-
//band
53-
mGrayBandComboBox->setCurrentIndex( mGrayBandComboBox->findData( r->grayBand() ) );
54-
const QgsContrastEnhancement* ce = r->contrastEnhancement();
55-
//minmax
56-
mMinLineEdit->setText( QString::number( ce->minimumValue() ) );
57-
mMaxLineEdit->setText( QString::number( ce->maximumValue() ) );
58-
//contrast enhancement algorithm
59-
mContrastEnhancementComboBox->setCurrentIndex(
60-
mContrastEnhancementComboBox->findData(( int )( ce->contrastEnhancementAlgorithm() ) ) );
61-
}
49+
setFromRenderer( layer->renderer() );
6250
}
6351
}
6452

@@ -133,3 +121,20 @@ void QgsSingleBandGrayRendererWidget::on_mLoadPushButton_clicked()
133121
mMinLineEdit->setText( QString::number( minVal ) );
134122
mMaxLineEdit->setText( QString::number( maxVal ) );
135123
}
124+
125+
void QgsSingleBandGrayRendererWidget::setFromRenderer( const QgsRasterRenderer* r )
126+
{
127+
const QgsSingleBandGrayRenderer* gr = dynamic_cast<const QgsSingleBandGrayRenderer*>( r );
128+
if ( gr )
129+
{
130+
//band
131+
mGrayBandComboBox->setCurrentIndex( mGrayBandComboBox->findData( gr->grayBand() ) );
132+
const QgsContrastEnhancement* ce = gr->contrastEnhancement();
133+
//minmax
134+
mMinLineEdit->setText( QString::number( ce->minimumValue() ) );
135+
mMaxLineEdit->setText( QString::number( ce->maximumValue() ) );
136+
//contrast enhancement algorithm
137+
mContrastEnhancementComboBox->setCurrentIndex(
138+
mContrastEnhancementComboBox->findData(( int )( ce->contrastEnhancementAlgorithm() ) ) );
139+
}
140+
}

0 commit comments

Comments
 (0)